NVIDIA($NVDA) เผยแพร่บทสอนเมื่อวันที่ 22 ผ่านบล็อกเทคนิค อธิบายวิธีตรวจสอบเส้นทางการส่งข้อมูลจริงขณะอ่านข้อมูลจากไฟล์ด้วย Python เข้าไปยังหน่วยความจำ GPU ตัวอย่างอ่านข้อมูลขนาด 1 GiB แบ่งเป็น 256 คำขอ โดยเครื่องมือสถิติ gds_stats นับการทำงานผ่านเส้นทางเร่งความเร็ว nvfs ได้ 256 รายการ และเส้นทางรองรับการทำงานร่วมกัน posix ได้ 0 รายการ
แอนดรูว์ ฮอยล์ (Andrew Hoyle) ผู้เขียน ระบุว่าเขาพัฒนาฟังก์ชันย้ายข้อมูลและการเชื่อมต่อไลบรารีซอฟต์แวร์ในทีม GPUDirect Storage ของ NVIDIA ส่วนฟอรัมสำหรับนักพัฒนาของ NVIDIA โพสต์แนะนำบล็อกดังกล่าวเมื่อวันที่ 22
KvikIO เลือก ส่วน cuFile กำหนดเส้นทาง
GPUDirect Storage (GDS) เป็นเทคโนโลยีที่ช่วยลดการคัดลอกข้อมูลผ่านหน่วยความจำ CPU ระหว่างอุปกรณ์จัดเก็บข้อมูลที่รองรับกับหน่วยความจำ GPU เอกสารภาพรวม GPUDirect Storage ของ NVIDIA ระบุว่าเส้นทางตรงอาจใช้งานไม่ได้ ขึ้นอยู่กับฮาร์ดแวร์ ระบบไฟล์ และการตั้งค่า ในกรณีนั้นโหมดรองรับการทำงานร่วมกันจะใช้การเรียก POSIX
ประเด็นหลักของบทสอนคือเส้นทางการทำงานถูกกำหนดเป็นสองขั้น ขั้นแรก KvikIO ซึ่งเป็นอินเทอร์เฟซ Python และ C++ จะเลือกว่าจะเรียกใช้ cuFile หรือใช้เส้นทาง POSIX ของตัวเอง แม้เรียกใช้ cuFile แล้ว ระบบก็ยังเลือกได้ว่าจะใช้เส้นทาง GDS ที่อาศัย nvidia-fs หรือเส้นทางรองรับการทำงานร่วมกันที่ผ่านหน่วยความจำ CPU โดยขึ้นกับระบบไฟล์ที่รองรับ การกำหนดค่าระบบ และการตั้งค่า ดังนั้น การกำหนดหน่วยความจำ GPU เป็นปลายทางและเรียกใช้ cuFile เพียงอย่างเดียว ไม่ได้ยืนยันว่าใช้ GDS เร่งความเร็ว
การตั้งค่าเริ่มต้น compat_mode ของ KvikIO คือ AUTO หากลองใช้ cuFile แล้วใช้งานไม่ได้ KvikIO จะเปลี่ยนไปใช้แบ็กเอนด์ POSIX ของตน ในระบบที่ใช้ทำบทสอน ค่า gds_threshold อยู่ที่ 16 KiB การอ่านที่เล็กกว่านี้จะใช้เส้นทาง POSIX ของ KvikIO โดยตรง
สถิติแตกต่างกันตามตัวแปรสภาพแวดล้อม
การตรวจสอบเส้นทางทำได้โดยตั้งค่า CUFILE_STATS_LEVEL=3 แล้วใช้ gds_stats NVIDIA แสดงให้เห็นว่าสถิติเปลี่ยนไปตามการตั้งค่า
△ KVIKIO_COMPAT_MODE=off: KvikIO ใช้ cuFile และสถิติแสดงรายการใน nvfs
△ CUFILE_FORCE_COMPAT_MODE=true: ยังคงเรียกใช้ cuFile แต่ระบบนับงานไว้ใน posix
△ KVIKIO_COMPAT_MODE=on: KvikIO ข้าม cuFile และใช้เส้นทาง POSIX แยกต่างหาก จึงไม่มีการบันทึกในสถิติของ cuFile
บทสอนอธิบายว่า gdscheck.py ใช้ตรวจสอบการติดตั้งและการรองรับ ส่วน gds_stats แสดงจำนวนงานที่แต่ละโปรเซสจัดการผ่าน nvfs และ posix
ความหมายของคำขอ 256 รายการ
ตัวเลข 256 มาจากขนาดงานเริ่มต้นของ KvikIO ที่ 4 MiB เมื่อแบ่งข้อมูล 1 GiB เป็นส่วนละ 4 MiB จะได้คำขอ cuFile 256 รายการ หากเปลี่ยน KVIKIO_TASK_SIZE เป็น 1 GiB KvikIO จะส่งคำขอขนาดใหญ่หนึ่งรายการให้ cuFile แล้ว cuFile แบ่งและจัดตารางงานเป็นหน่วยละ 256 MiB จำนวนสี่งาน NVIDIA ระบุว่าหน่วยดังกล่าวเป็นหน่วยจัดตารางงาน ซึ่งต่างจากขนาดการส่งข้อมูลไปยังอุปกรณ์จัดเก็บข้อมูลแต่ละรายการ
บทสอนยังอธิบายขั้นตอนคัดลอกข้อมูลผ่านบัฟเฟอร์พักบน GPU ที่ลงทะเบียนไว้กับ cuFile ไปยังบัฟเฟอร์ปลายทาง ในกรณีที่บัฟเฟอร์ GPU ปลายทางยังไม่ได้ลงทะเบียน
สภาพแวดล้อมทดสอบประกอบด้วยเซิร์ฟเวอร์ x86_64 พร้อม NVIDIA H100, CUDA 13.3, cuFile 1.18 และ NVMe ภายในเครื่องที่ฟอร์แมตด้วย ext4 GPU และ NVMe เชื่อมต่อกันผ่าน PCIe แบบ PIX ซึ่งมี PCIe bridge คั่นไม่เกินหนึ่งตัว โดยปิด IOMMU และ ACS และโหลดโมดูลเคอร์เนล nvidia-fs NVIDIA ระบุว่านี่เป็นเพียงสภาพแวดล้อมที่ใช้ทดสอบบทสอน ไม่ใช่เงื่อนไขรับประกันสำหรับทุกระบบ เอกสารแก้ไขปัญหาของ NVIDIA แนะนำให้ตรวจสอบระบบไฟล์ที่รองรับ เวอร์ชันไดรเวอร์และไลบรารี การตั้งค่า cuFile และการเชื่อมต่อฮาร์ดแวร์ร่วมกันเมื่อใช้ระบบอื่น
KvikIO เป็นส่วนหนึ่งของไลบรารีวิทยาการข้อมูล CUDA-X ของ NVIDIA คลังซอร์สโค้ดอย่างเป็นทางการอธิบายว่า KvikIO เป็นไบนดิง Python และ C++ สำหรับ cuFile และยังอ่านเขียนข้อมูลระหว่างโฮสต์กับอุปกรณ์ได้ในสภาพแวดล้อมที่ใช้ GDS ไม่ได้ ก่อนหน้านี้ TokenPost รายงานว่า NVIDIA ระบุในเดือนกรกฎาคมว่าจะเพิ่มไลบรารี CUDA-X เป็นเครื่องมือสำหรับเอเจนต์
ประเด็นที่บทความนี้ไม่ได้กล่าวถึง
ด้านอุปกรณ์จัดเก็บข้อมูล ก่อนหน้านี้ TokenPost รายงานว่า Micron อธิบาย SSD NVMe สำหรับศูนย์ข้อมูลที่ใช้ PCIe Gen 6 ว่าช่วยลดข้อจำกัดการเคลื่อนย้ายข้อมูลระหว่างอุปกรณ์จัดเก็บข้อมูลกับทรัพยากรประมวลผล บทสอนครั้งนี้มุ่งอธิบายวิธีตรวจสอบเส้นทางการทำงานจริงผ่านการตั้งค่าซอฟต์แวร์และสถิติ ไม่ได้กล่าวถึงคุณสมบัติฮาร์ดแวร์
บทความของ NVIDIA และเอกสารทางการของ KvikIO กับ GDS ไม่ได้กล่าวถึงกรณีใช้งานด้านสินทรัพย์ดิจิทัลหรือบล็อกเชน และ NVIDIA ไม่ได้ให้ตัวเลขเปรียบเทียบอัตราการประมวลผลหรือการเพิ่มประสิทธิภาพไว้ในบทความนี้ ค่า nvfs=256 คือจำนวนคำขอที่นับได้ในการทำงานครั้งนั้น ไม่ใช่ตัวเลขการเพิ่มความเร็ว
ความคิดเห็น 0