- Imbue ฝึก โมเดลพารามิเตอร์ 70B ตั้งแต่ต้นบนโครงสร้างพื้นฐาน bare metal ของตนเองด้วยทีมขนาดเล็ก และเผยแพร่ขั้นตอนการปฏิบัติงานกับสคริปต์ตั้งแต่การสร้างคลัสเตอร์ไปจนถึงการกู้คืนเมื่อเกิดความขัดข้อง
- คลัสเตอร์ประกอบด้วย H100 GPU 4,088 ตัว และเซิร์ฟเวอร์ GPU 511 เครื่อง โดยแต่ละเซิร์ฟเวอร์มี GPU 8 ตัวเข้าร่วมการฝึกแบบ synchronous ขนาดใหญ่ผ่าน InfiniBand
- การสร้างจริงเป็นกระบวนการทำซ้ำระหว่างการ provision เครื่องแต่ละเครื่อง, การปรับปรุง InfiniBand fabric, การตรวจสุขภาพโฮสต์, การวินิจฉัยข้อผิดพลาดในการฝึก และการปรับปรุง automation โดยต้องจัดการกับเครื่องที่บูตไม่สำเร็จราว 10% และคำเตือนพอร์ตจำนวนมาก
- เครื่องมือที่เผยแพร่ประกอบด้วยการตรวจสุขภาพโฮสต์, แพตช์ logging ของ NCCL, การทดสอบ stress ของ GPU, การทดสอบเครือข่าย NVLink·InfiniBand, parser สำหรับ event log ของ UFM และสคริปต์สร้าง workload burn-in สำหรับ InfiniBand
- ในการฝึก LLM ขนาดใหญ่ โฮสต์หรือลิงก์ที่ไม่เสถียรเพียงรายการเดียวอาจทำให้การรันทั้งหมดช้าลงได้ ดังนั้น การตรวจสุขภาพอัตโนมัติ·การแยกความขัดข้อง·การรีสตาร์ต·การปิดใช้งานพอร์ต จึงเป็นหัวใจของการปฏิบัติการอย่างต่อเนื่อง
การสร้างคลัสเตอร์เพื่อฝึกโมเดล 70B ของตนเอง
- Imbue ฝึก โมเดลพารามิเตอร์ 70B ตั้งแต่ต้นบนโครงสร้างพื้นฐานของตนเองเป็นเวลาหลายเดือน และโมเดลนี้ทำคะแนนเหนือกว่า zero-shot GPT-4o ในงานที่เกี่ยวข้องกับการ reasoning
- ขอบเขตที่เผยแพร่คือ ขั้นตอนโครงสร้างพื้นฐานแบบ end-to-end ตั้งแต่การบูตคลัสเตอร์ครั้งแรก การติดตั้ง OS ไปจนถึงการกู้คืนข้อผิดพลาดระหว่างการฝึกโดยอัตโนมัติ
- เครื่องมือโครงสร้างพื้นฐานที่เผยแพร่พร้อมกันมีดังนี้
- Host-level health checks: สคริปต์สำหรับตรวจว่าโฮสต์พร้อมนำไปใช้ฝึกได้โดยไม่มีข้อผิดพลาดที่ทราบหรือไม่
- แพตช์ NCCL: ปรับปรุงให้บันทึก log มากขึ้นเมื่อเกิดข้อผิดพลาดและสถานการณ์ค้าง
- GPU stress test: ตรวจสอบว่า GPU สามารถจัดสรร tensor ขนาดใหญ่และทำการดำเนินการมาตรฐานได้หรือไม่
- Networking tests: ตรวจสอบการสื่อสาร NVLink ระหว่าง GPU ในเครื่องเดียวกัน และการสื่อสาร InfiniBand ระหว่าง GPU ต่างเครื่อง
- UFM event log parser: parse event log ของ Unified Fabric Manager เพื่อตัดสินใจว่าจะปิดใช้งานพอร์ตเครือข่ายใด
- InfiniBand burn-in workload generator: สร้าง workload burn-in ของ InfiniBand ที่ stress ลิงก์ทั้งหมดที่ใช้งานได้
โครงสร้างคลัสเตอร์และเครือข่าย
- คลัสเตอร์หลักแบ่ง H100 GPU 4,088 ตัว ไว้ในเซิร์ฟเวอร์ GPU 511 เครื่อง โดยแต่ละเซิร์ฟเวอร์ติดตั้ง GPU 8 ตัว
- เหตุผลที่มีเซิร์ฟเวอร์ GPU 511 เครื่องคือจำเป็นต้องสำรองการเชื่อมต่อบางส่วนไว้ให้โหนด Unified Fabric Manager(UFM) สำหรับจัดการเครือข่าย InfiniBand
- GPU แต่ละตัวเชื่อมต่อโดยตรงกับการ์ด ConnectX-7 และสามารถรับส่งข้อมูลพร้อมกันที่ 400Gbps กับ GPU อื่นในเครือข่าย InfiniBand ผ่านการ์ด ConnectX-7 ของตัวเองได้
- topology ของ InfiniBand เป็นโครงสร้างแบบ fully non-blocking ที่ทำให้ตามทฤษฎีแล้ว GPU ทุกตัวสามารถสื่อสารกับ GPU อื่นได้พร้อมกันด้วยความเร็วสูงสุด
- สถาปัตยกรรมสวิตช์ InfiniBand 3 ระดับให้ throughput ของเครือข่ายทั้งหมด
- การสื่อสารสำหรับการฝึกทำบน InfiniBand ไม่ใช่ Ethernet
- Ethernet ใช้สำหรับ dataset, checkpoint และการถ่ายโอนข้อมูลอื่น ๆ
- หากส่งการสื่อสารสำหรับการฝึกผ่าน Ethernet ข้อมูลต้องย้ายจาก GPU ไปยัง CPU แล้วออกผ่านการ์ด Ethernet 100Gbps จึงช้ากว่ามาก
- การฝึกผ่าน Ethernet ด้วย RoCE ก็ทำได้ แต่ต้องมีงานเพิ่มเติมจำนวนมากทั้งฝั่งฮาร์ดแวร์และซอฟต์แวร์ และโดยทั่วไปมีความน่าเชื่อถือต่ำกว่า InfiniBand
- เครือข่าย Ethernet สำหรับการจัดการแยกต่างหากใช้สำหรับเข้าถึง BIOS, power supply และคอนโทรลเลอร์อินเทอร์เฟซเครื่องระดับล่าง
- หากไม่มีเครือข่ายจัดการนี้ จะต้องตั้งค่าเครื่องหลายร้อยเครื่องด้วยตนเองโดยใช้ USB drive, keyboard และ monitor
- ในการฝึกสมรรถนะสูงขนาดใหญ่ InfiniBand, Ethernet, GPU และโหนดต้องทำงานเกือบสมบูรณ์แบบ
- เพียงการเชื่อมต่อเดียวจากมากกว่า 12,000 รายการที่ไม่เสถียร ก็อาจทำให้การรันการฝึกทั้งหมดช้าลงได้
การ provision เครื่องแต่ละเครื่อง
- หลังจากสร้างการเชื่อมต่อ Ethernet เข้ากับคลัสเตอร์ด้วยเครือข่ายจัดการเริ่มต้นแล้ว จึงได้ข้อมูลรับรองสำหรับเข้าถึง BMC(Baseboard Management Controller)
- BMC คือ service processor ที่ใช้ monitor โฮสต์จากระยะไกล
- ให้ API สำหรับสถานะฮาร์ดแวร์ การตั้งค่า BIOS และการจัดการพลังงาน
- เซิร์ฟเวอร์เครื่องแรกติดตั้ง Ubuntu 22.04 แบบ manual ผ่าน iDRAC ซึ่งเป็น BMC ของ Dell
- สามารถ mount ISO image จากคอมพิวเตอร์ local เพื่อบูตได้ และมีคอนโซลเสมือนผ่านเบราว์เซอร์
- เป้าหมายคือทำให้การติดตั้งแบบ manual นี้เป็นการติดตั้งแบบ manual เพียงครั้งเดียวตลอดทั้งกระบวนการ
-
MAAS และการบูต PXE
- หลังเตรียมเครื่องแรกแล้ว ได้ติดตั้ง Ubuntu MAAS(Metal-as-a-Service) เพื่อ provision เซิร์ฟเวอร์ที่เหลือ
- ใช้การบูต PXE และเครื่องมือ iDRAC แบบอัตโนมัติสั่งให้แต่ละเครื่องบูตจากเครือข่าย
- เซิร์ฟเวอร์รับ IP จาก MAAS ผ่าน DHCP ดาวน์โหลด kernel เริ่มต้น แล้วติดตั้ง OS แบบถาวรโดยอัตโนมัติแม้ local drive จะว่างอยู่ก็ตาม
- ในทางปฏิบัติ การเชื่อม MAAS กับ BMC ไม่เสถียร จึงรวบรวม MAC address ของทุกเครื่องไว้ล่วงหน้าผ่าน iDRAC API
- โดยรวมแล้ว MAAS เชื่อถือได้ตลอดกระบวนการฝึก แต่ช่วงแรกมีปัญหาเฉพาะด้านการตั้งค่า
- ความต่างของ clock มากเกินไป ทำให้การตรวจสอบใบรับรอง HTTPS ล้มเหลวและ apt ติดตั้งไม่ได้
- เซิร์ฟเวอร์ MAAS ทำหน้าที่พร้อมกันทั้ง DHCP, DNS, HTTP proxy, NTP, การจัดการการตั้งค่า cloud-init และฐานข้อมูลอ้างอิงสำหรับ MAC·IP·hostname·metadata ทำให้ติดตามสาเหตุได้ยาก
-
ความล้มเหลวในการบูตและ observability พื้นฐาน
- เช่นเดียวกับการตั้งค่าคลัสเตอร์ GPU ขนาดใหญ่ทั่วไป เครื่องประมาณ 10% บูตไม่สำเร็จ โดยสาเหตุหลักคือปัญหาทางกายภาพของเซิร์ฟเวอร์
- สาย Ethernet ไม่ได้เชื่อมต่อหรือเดินสายผิด
- ปัญหาฮาร์ดแวร์ iDRAC
- power supply เสีย
- ไดรฟ์ NVMe เสีย
- การเดินสายภายในขาดหาย
- ตรวจไม่พบการ์ดเครือข่ายหรือ GPU
- Imbue ทำ automation สำหรับตรวจปัญหาเหล่านี้ ส่งเครื่องบางส่วนให้ Dell ตรวจซ้ำ และเปิด ticket ที่จำเป็นให้เจ้าหน้าที่ data center
- ด้วยการตั้งค่าโครงสร้างพื้นฐานด้วยตนเอง จึงสามารถใช้เครื่องที่ปกติได้ทันทีแม้ระหว่างรอการซ่อมแซม
- เซิร์ฟเวอร์ทุกเครื่องติดตั้ง Docker, ไดรเวอร์ GPU ของ data center, Prometheus node exporter, NVIDIA DCGM exporter และ RAIDZ ZFS pool บนไดรฟ์ทั้งหมดที่ไม่ใช่ OS
- ZFS ทำให้เครื่องยังคงทำงานได้แม้ไดรฟ์หนึ่งตัวหยุดทำงาน และด้วย transparent compression ช่วยลดพื้นที่จัดเก็บสำหรับ dataset ข้อความทั่วไปและ log ซ้ำ ๆ ได้อย่างมาก
- เมื่อ install package ซอฟต์แวร์แบบขนานบน 400 โหนด เกิด คอขวดด้าน bandwidth
- เริ่มมีการแจ้งเตือนอุณหภูมิสูงจากหลายองค์ประกอบในการติดตั้งที่ data center และปัญหาความร้อนช่วงแรกส่วนใหญ่บรรเทาลงได้ด้วยการอัปเดต firmware
- เช่นเดียวกับการตั้งค่าคลัสเตอร์ GPU ขนาดใหญ่ทั่วไป เครื่องประมาณ 10% บูตไม่สำเร็จ โดยสาเหตุหลักคือปัญหาทางกายภาพของเซิร์ฟเวอร์
-
ตรวจสอบการฝึก GPU แบบโหนดเดียว
- ตรวจสอบว่าแต่ละเครื่องสามารถจัดการ workload GPU จริงได้อย่างอิสระหรือไม่
- หลายเครื่องล้มเหลวในการฝึก GPU แบบโหนดเดียวด้วยปัญหาต่อไปนี้
- ข้อผิดพลาดเกี่ยวกับ GPU ส่วนใหญ่แก้ได้ด้วยการถอดการ์ดออกแล้วเสียบกลับเข้า slot ใหม่
- ใน log ของเซิร์ฟเวอร์ Ubuntu การเชื่อมต่อ PCIe แสดงเป็น
limited width: x4 < x16 - แม้หลังอัปเดต firmware ของ PCIe switch bus แล้ว ยังต้องเสียบสาย PCIe ภายในใหม่ในโฮสต์ประมาณหนึ่งในสี่ของคลัสเตอร์
- มีไดรฟ์ NVMe ที่ไม่ได้ถูกระบุว่าเสีย แต่เมื่อเข้าถึงแล้วทำให้ทั้งเครื่อง lock
- ลำดับ hard disk ใน Linux แสดงแบบสุ่ม ทำให้ MAAS ติดตั้ง OS ลงผิดไดรฟ์
- การอ่านค่าอุณหภูมิผิดพลาดทำให้พัดลมหมุนที่ 100% ตลอดเวลา
- CPU dynamic frequency scaling จำกัดคอร์ที่ active ไว้ที่ 2GHz
- การใช้ GDR หรือ GPUDirect RDMA Peer Memory Client ล้มเหลว
การโปรวิชัน InfiniBand
- InfiniBand มีหน่วยควบคุมเดียวสำหรับทั้งเครือข่ายด้วยการออกแบบแบบรวมศูนย์ และสามารถจัดการ network switch 320 ตัวเป็น fabric เดียวได้
- งานแรกคือการระบุว่า switch ใดเชื่อมต่อกับเครื่องใด แล้วเทียบกับแผนผังสายเพื่อเปลี่ยนชื่อ switch ตามตำแหน่งทางกายภาพ
-
การออกแบบ fabric ที่ผิดพลาดและการเดินสายใหม่
- ในช่วงแรก UFM ตรวจไม่พบ network switch ทั้ง 320 ตัว และไม่พบ host ที่ควรอยู่ใน fabric
- เมื่อตรวจสอบกับพาร์ตเนอร์ดาต้าเซ็นเตอร์ พบว่า switch เปิดอยู่และมีการเดินสายแล้ว แต่ไม่ถูกตรวจพบ
- เมื่อตรวจสอบรายการเดินสายเครือข่าย พบว่า upper fabric ไม่ได้เป็น fabric รวมหนึ่งเดียว แต่ประกอบด้วย เครือข่ายที่แยกจากกัน 8 เครือข่าย ซึ่งไม่มีเส้นทาง routing ร่วมกัน
- หลังจากเดินสายใหม่ ได้เพิ่มการตรวจสอบเพื่อยืนยันว่าการเชื่อมต่อทางกายภาพทั้งหมดตรงกับการออกแบบใหม่
-
คำเตือนอุณหภูมิและข้อผิดพลาดของพอร์ต
- หลังแก้ปัญหาการเดินสายทางกายภาพแล้ว UFM เชื่อมต่อกับ InfiniBand switch ทั้งหมดได้ แต่พอร์ตของ switch แทบทั้งหมดรายงานอุณหภูมิสูงเกินไป
- แม้ก่อนมีการส่งข้อมูลจริง พอร์ตบางพอร์ตก็มีอุณหภูมิเกิน 70 องศาเซลเซียสแล้ว สาเหตุคือโครงสร้างที่ทำให้อากาศร้อนหมุนเวียนกลับไปด้านหน้าผ่านช่องว่างระหว่าง switch ใน networking rack
- พอร์ตจำนวนมากมีอัตราข้อผิดพลาดสูง หรือเกิด link flapping คือสถานะสลับไปมาระหว่างปกติและเสีย ปัญหานี้จะปรากฏเฉพาะเมื่อมีการใช้งานพอร์ตจริง ทำให้ตรวจพบล่วงหน้าได้ยาก
- แม้ fabric ทั้งหมดจะมีลิงก์ 10,000 รายการและมี redundancy สูง แต่เมื่อราว 10% ของ fabric เริ่มมีปัญหา ฟีเจอร์อย่าง adaptive routing ก็ไม่สามารถหลบเลี่ยงลิงก์ที่ขาด ๆ หาย ๆ อย่างไม่สม่ำเสมอได้เพียงพอ
- พาร์ตเนอร์ดาต้าเซ็นเตอร์ทำความสะอาดและติดตั้งพอร์ตที่มีคำเตือนใหม่ ส่วน warning transceiver ที่เหลือซึ่งรอการเปลี่ยนถูกปิดใช้งาน
- ในช่วงนี้ได้ทำ multi-node training ด้วยเครื่อง 100~200 เครื่อง เพื่อหาชุดย่อยของ InfiniBand ที่เสถียร
-
การ burn-in InfiniBand และ GPUDirect RDMA
- เพื่อวินิจฉัยปัญหา InfiniBand ให้มีประสิทธิภาพมากขึ้น จึงสร้าง workload เฉพาะที่อัดข้อมูลให้มากที่สุดเท่าที่ทำได้พร้อมกันเข้าไปยังทุกพอร์ตของทั้ง fabric
- วิธีนี้ต่างจากการรัน all-reduce ขนาดใหญ่หนึ่งงานทั่วทั้งคลัสเตอร์
- เพราะ NCCL ปรับแต่งการสื่อสารภายในโหนดเดียวให้เหมาะกับเส้นทาง NVLink และ SXM socket
- UFM ส่งการแจ้งเตือนว่ามีการส่งข้อมูลเกิน 97% ของความจุตามทฤษฎีในพอร์ตส่วนใหญ่ และ switch บางตัว crash ชั่วคราว
- พอร์ตที่ยังรอดอยู่จนถึงสิ้นวันถือว่าแข็งแรงเพียงพอ ส่วนที่เหลือถูกปิดใช้งานหรือส่งต่อเป็นรายการซ่อมในภายหลัง
- เปิดใช้งาน GPUDirect RDMA เพื่อให้ GPU สื่อสารได้โดยไม่มี overhead จาก CPU
- เปิดใช้งาน nvidia-peermem kernel module
- ปิดใช้งาน PCIe ACS เพื่อป้องกันการหยุดค้างทันที
-
ชุดเครื่องที่เสถียรและการบำรุงรักษา
- จากประสบการณ์กับคลัสเตอร์ GPU ฮาร์ดแวร์รุ่นใหม่ ควรคาดว่าเครื่องประมาณ 3% จะเสีย ในแต่ละสัปดาห์
- ไม่ใช่ว่าทุกเครื่องมีโอกาสเสีย 3% เท่ากัน แต่เครื่องบางตัวที่มีปัญหามากจะเสียซ้ำ ๆ ในหลายรูปแบบ
- เมื่อมีเครื่องจำนวนมากอยู่ใน fabric เดียวกัน แทนที่จะคอยไล่ตามปัญหาเครื่องแบบสุ่มอยู่เรื่อย ๆ จะสามารถขยายชุดเครื่อง golden ที่ทราบว่าเสถียรได้
- การบำรุงรักษา InfiniBand ส่วนใหญ่ประกอบด้วยการตอบสนองต่อคำเตือนจาก UFM, การเปลี่ยนสายเคเบิลและ transceiver, และการวินิจฉัย switch ที่มีข้อบกพร่อง
- regression ขนาดใหญ่มักเกิดจากสองปัจจัย
- การอัปเกรด firmware ที่ใช้กับเพียงครึ่งหนึ่งของคลัสเตอร์ทำให้สถานะ UFM เสียหาย จนต้อง restart UFM บน InfiniBand switch ทั้งหมด
- เมื่อ restart GPU box จำนวนมากพร้อมกัน การอัปเดตสถานะ UFM จะถาโถมจนต้อง restart บริการ UFM
ระบบตรวจสุขภาพ host
- Imbue พบความขัดข้องของเครื่องเดี่ยวหลากหลายแบบที่ทำให้การรัน training ล้มเหลวหรือช้าลง และเขียน health check เพื่อพิจารณาว่า host ใดมีสุขภาพดีพอสำหรับ training
- โค้ดเผยแพร่ไว้ที่ cluster-health
- check จำนวนมากเฉพาะเจาะจงกับ runtime environment ของ Imbue แต่เป้าหมายคือการมี entry point เดียวที่คืนค่า yes/no ว่าพร้อมสำหรับ training หรือไม่
-
health check แบบรวดเร็ว
- GPU Health Check: ตรวจสอบจำนวน GPU, การเปิดใช้งาน ECC, ข้อผิดพลาด ECC, topology และข้อผิดพลาดของ NVLink
- Disk Space Health Check: ตรวจสอบว่าอัตราการใช้ดิสก์ของ host ไม่เกิน 95%
- Docker Health Check: ตรวจสอบว่ามีการรัน container ที่เชื่อมต่อ GPU หรือไม่ และตรวจสอบสิทธิ์ของ container สำหรับ monitoring และ profiling
- Dmesg Health Check: ค้นหาข้อผิดพลาด Xid·SXid ของ NVIDIA GPU หรือ NVIDIA switch และตรวจสอบว่า line ใน dmesg log ถูกจัดประเภทอยู่ในรายการ log ที่คาดการณ์ได้หรือไม่
- iDRAC Health Check: ตรวจสอบข้อผิดพลาด iDRAC ของเครื่อง Dell และเพิกเฉยต่อข้อความผิดพลาดที่ไม่ร้ายแรง
- check นี้ไม่ใช่ส่วนที่จะเปิดเผยเป็นโอเพนซอร์ส
- Disk Health Check: ตรวจสอบ zpool mount, การเชื่อมต่อ Docker, และดูว่า CPU ค้างเมื่อเข้าถึงดิสก์หรือไม่
- InfiniBand Health Check: ตรวจสอบอัตราข้อผิดพลาด InfiniBand ที่เพิ่มขึ้นและ driver firmware ที่ล้าสมัย
- Nvlink Health Check: ตรวจสอบข้อผิดพลาด NVLink ของเครื่อง
- จากประสบการณ์ ไม่ได้ทำให้ training ล้มเหลว แต่อาจทำให้ช้าลงได้
- GDR Health Check: ตรวจสอบว่า GDR ถูกเปิดใช้งานบนเครื่องหรือไม่
- VBIOS Health Check: ตรวจสอบว่าเวอร์ชัน GPU VBIOS และ firmware ของ H100 baseboard เป็นเวอร์ชันล่าสุดหรือไม่
- Flint Health Check: ใช้
flintและhca_self_testตรวจสอบเวอร์ชัน Mellanox OFED driver, card firmware, transceiver firmware และสถานะการคอมไพล์ของ NVIDIA driver - PSB Health Check: query อุปกรณ์ PCIe เพื่อตรวจสอบว่า connection speed และ width ระหว่าง GPU, PSB และ network card ตรงตามที่คาดไว้หรือไม่
- เป็นสคริปต์ที่ Dell พัฒนา จึงยังไม่สามารถแชร์ได้ในตอนนี้
-
health check ที่ใช้เวลานานกว่า
- initialize การคำนวณ matrix ด้วย PyTorch เพื่อวัด แบนด์วิดท์ NVLink, ความเร็วการคำนวณของ GPU และหน่วยความจำ
- ตั้งค่า flag ของ GDR เพื่อทดสอบทั้ง InfiniBand และ NVLink
- ใช้
ib_write_bwและ--use_cudaส่งข้อมูลไปยัง IB card เพื่อวัดแบนด์วิดท์ของ PCIe และ InfiniBand card - รันประมาณ 15 นาทีเพื่อจับ InfiniBand link ที่ flapping
- ตรวจสอบความเป็นไปได้ในการ initialize NCCL และดูว่ามีการค้างแบบสุ่มหรือไม่ด้วยการรันการวินิจฉัยแบบ multi-node
- หากค้าง โค้ด NCCL ที่ fork ไว้จะทิ้ง log เพิ่มเติม
- เนื่องจากการตรวจพบปัญหาอาจใช้เวลา 12~24 ชั่วโมง จึงมักรันกับ node ใหม่หรือเมื่อมีสถานการณ์ที่น่าสงสัย
- ตรวจสอบเหตุการณ์ GPU clock throttling จาก DCGM exports แต่ยกเว้น
gpu_idleและpower_capที่คาดไว้ - multi-node training ที่ใช้ GPU, InfiniBand card, CPU และดิสก์ทั้งหมดพร้อมกันจะเผยให้เห็น power event ได้ดีที่สุด
การวินิจฉัยข้อผิดพลาดทั่วไประหว่างการฝึก
-
แครชทันทีหลังเริ่ม
- การแครชทันทีหลังเริ่มเป็นข้อผิดพลาดที่รับมือได้ง่ายกว่า เพราะทำซ้ำและวนทดสอบได้ค่อนข้างง่าย
- ขั้นแรกตรวจสอบว่าเวอร์ชันโค้ด การตั้งค่า และตัวแปรสภาพแวดล้อมถูกต้องหรือไม่
- ชั้น abstraction ระหว่างกลาง เช่น การแคช Docker image หรือการตั้งค่า secrets ที่ไม่โปร่งใส อาจทำให้การหาสาเหตุไม่ชัดเจน
- ตรวจสอบด้วยว่าเครื่องทั้งหมดออนไลน์อยู่หรือไม่ และสามารถรวบรวม·ตรวจสอบ stack trace กับ log ได้ง่ายหรือไม่
- Imbue ใช้สแต็ก Loki, Prometheus, Grafana
- ในการรันแบบกระจายที่ซิงโครนัส ข้อผิดพลาดแรกมักก่อให้เกิดข้อผิดพลาดลูกโซ่ที่ไม่เกี่ยวข้องกัน
- เมื่อสร้างระบบรันซ้ำอัตโนมัติ การรวบรวม log·ข้อผิดพลาดยิ่งสำคัญขึ้น เพื่อไม่ให้ log และข้อผิดพลาดจากการรันซ้ำคนละครั้งปะปนกัน
- ข้อผิดพลาดที่พบบ่อยมีดังนี้
Forward order differs across ranks...: เป็นลักษณะของ implementation PyTorch FSDP และแก้ได้ด้วยการรันซ้ำCUDA out of memory...: แก้โดยตรวจสอบการตั้งค่าและโค้ด รวมถึง rollback การเปลี่ยนแปลงโค้ดล่าสุด- CPU/RAM OOM: ควรตรวจจับจากการเรียก OOM Killer ใน log dmesg ของโฮสต์นอกคอนเทนเนอร์
-
แครชกลางการฝึก
- หลังจากฮาร์ดแวร์เริ่มทำงานแล้ว สิ่งที่จำเป็นก่อนคือระบบที่รัน diagnostic health check ทั้งหมดอีกครั้ง และรีสตาร์ตอัตโนมัติโดยตัดโฮสต์ที่ไม่ healthy ออก
- ข้อผิดพลาดฮาร์ดแวร์แบบสุ่ม เช่น Xid·SXid อาจทำให้การรันแครชโดยไม่มี Python stack trace ที่มีความหมาย
- บางกรณีอย่าง row remapping สามารถกู้คืนได้ด้วยการรีสตาร์ต แต่ uncorrectable ECC error มักต้องบำรุงรักษาฮาร์ดแวร์หรือเปลี่ยนชิ้นส่วน
- ข้อมูลฝึกที่มีรูปแบบแย่มากก็ทำให้แครชได้เช่นกัน
- เอกสารเดี่ยวขนาดใหญ่มากใน corpus อาจทำให้ GPU หรือ CPU OOM
- ใช้ data loader ที่ deterministic อย่างสมบูรณ์ เพื่อเชื่อมโยงเลข epoch หรือ step กับการแครชได้ง่าย
- หากต้องการยืนยันว่าข้อมูลเป็นสาเหตุหรือไม่ ให้ปิดการโหลดข้อมูลหรือแทนที่ด้วยข้อมูลปลอมที่เป็นศูนย์ทั้งหมด
- การหลุดชั่วคราวของอีเทอร์เน็ตหรือพื้นที่ดิสก์ไม่พอ อาจไม่แสดงเป็นข้อความข้อผิดพลาดที่มีประโยชน์ จึงบันทึกตัวชี้วัดสถานะเครือข่ายและโหนดเพื่อตรวจสอบความสัมพันธ์
-
ค้างโดยไม่มี stack trace
- ข้อผิดพลาดที่ค้างหรือ timeout โดยไม่มี stack trace ดีบักได้ยากเป็นพิเศษ เพราะมีข้อมูลน้อยและทำซ้ำได้ไม่เสถียร
- ข้อความตัวอย่างมักอยู่ในรูป
Watchdog caught collective operation timeout... - หากโฮสต์หนึ่งหรือมากกว่านั้นทำงาน NCCL ไม่เสร็จ หรือหลุดออกจากการเชื่อมต่อ NCCL·InfiniBand โฮสต์อื่นทั้งหมดจะถูกบล็อกแบบซิงโครนัสที่การคำนวณ tensor นั้นจนถึง
NCCL_TIMEOUT - ด้วยลักษณะของไลบรารี NCCL จึงหายากว่าโฮสต์ใดเป็นต้นเหตุ
- Imbue เพิ่มการเปลี่ยนแปลงด้าน logging ใน NCCL fork เพื่อให้มองเห็นข้อความหรือ operation ที่กำลัง in-flight ตอนแครชได้ดีขึ้น และระบุโฮสต์หรือ GPU ที่มีปัญหา
- เพื่อหาโฮสต์ที่ทำงานผิดปกติ มักต้องตรวจสอบว่าโฮสต์ใด ไม่ได้สร้าง ข้อความ log เฉพาะนั้น
- ใช้ Py-Spy และ GDB เพื่อดีบักโปรเซสที่หยุดนิ่งแบบเรียลไทม์ และแยกแยะว่าเป็น NCCL ค้าง, ไดรเวอร์ค้าง หรือ race condition·deadlock ในโค้ด Python
การชะลอตัวของการฝึกเมื่อดูจาก MFU
- การชะลอตัวทั่วไปหรือ MFU(Model FLOPs Utilization) ที่ต่ำกว่าระดับที่เคยสังเกตได้ อาจเกิดจากหลายสาเหตุ
- การตรวจสอบการตั้งค่า โค้ด และตัวแปรสภาพแวดล้อมอีกครั้งก่อนจะช่วยได้
- โมเดลผิด
- ขนาด batch ผิด
- การตั้งค่า UFM หรือ NCCL ผิด
CUDA_DEVICE_MAX_CONNECTIONSผิด
- การวัด MFU ทันทีแบบราย batch มีประโยชน์ต่อการวินิจฉัยประเภทปัญหามากกว่าค่าเฉลี่ยที่ผ่านการ smoothing
-
สาเหตุตามรูปแบบ MFU
- หากทันทีหลังเริ่มการฝึก MFU คงที่ต่ำกว่า 1/10 ของค่าที่คาดไว้ มักเป็นปัญหาฮาร์ดแวร์ InfiniBand เช่น สวิตช์เสียในเลเยอร์ T2 หรือ T3
- ปัญหาฮาร์ดแวร์ระหว่าง GPU กับ NIC ก็อาจเป็นสาเหตุได้ และจะปรากฏใน dmesg เป็น
PCIe x16 lanes limited by ...
- ปัญหาฮาร์ดแวร์ระหว่าง GPU กับ NIC ก็อาจเป็นสาเหตุได้ และจะปรากฏใน dmesg เป็น
- หากทันทีหลังเริ่มคงที่ที่ 30% MFU ของค่าที่คาดไว้ อาจเป็นเพราะการตั้งค่า GDR หรือ environment variable ของ GDR บนโฮสต์หนึ่งผิด
- หากทันทีหลังเริ่มคงที่ที่ 60~80% MFU ของค่าที่คาดไว้ มักมีสาเหตุจากลิงก์ InfiniBand ที่เสื่อมหรือมีข้อบกพร่อง
- หาก InfiniBand NIC ที่เชื่อมต่อกับ GPU เฉพาะตัวมีปัญหา NCCL จะพยายามใช้ NIC ของ GPU อื่นในโฮสต์เดียวกันผ่าน local NVLink
- CPU throttling ก็อาจเป็นสาเหตุได้ จึงต้องปรับการตั้งค่า BIOS ของโฮสต์บางเครื่อง
- หากเกิด การตกลง 10 เท่า ใน batch เดียวเป็นประจำ มักเกี่ยวข้องกับ checkpointing หรือ evaluation และตรวจสอบได้โดยเทียบกับจำนวน epoch·step
- หากตั้งแจ้งเตือนอัตโนมัติจากความผิดปกติของ MFU อย่างเดียว จะเกิด false positive จำนวนมาก
- หากการตกลง 10 เท่าใน batch เดียวเกิดขึ้นไม่บ่อยและสุ่ม แล้วฟื้นตัวทันที มักเป็นกรณีที่มี workload ที่ใช้ CPU หนักถูก schedule บนหนึ่งในโฮสต์ที่กำลังรันอยู่
- ปัญหาเครือข่ายเป็นครั้งคราวหรือคอขวดของ data loader ก็อาจเป็นสาเหตุได้
- หากกราฟ MFU ค่อยๆ ลดลงเมื่อการรันดำเนินไป และกลับเป็น 100% เมื่อรีสตาร์ต ได้ตรวจสอบด้วย Python และ NVIDIA profiler แล้วว่าสาเหตุคือ automatic garbage collection
- เมื่อปิด automatic garbage collection และให้ทุกโฮสต์ทำ garbage collection ตามช่วงเวลาที่กำหนด การลดลงของ throughput ก็หายไป
- หากประสิทธิภาพช่วงแรกดี แต่หลังจากนั้นมักตกลงเหลือ 70% ของค่าที่คาดไว้ พบว่ามีความสัมพันธ์กับ NVIDIA GPU clock throttle reasons
- สาเหตุคืออุณหภูมิ GPU, พัดลมระบายความร้อนของโฮสต์เสีย·เสื่อม หรือ power supply ล้มเหลว
- หากประสิทธิภาพดี แต่มีสัญญาณรบกวนความถี่สูงมากในช่วง 90~100% ของ MFU ที่คาดไว้ มักเป็นปัญหาฮาร์ดแวร์ InfiniBand เช่น การเสื่อมระดับปานกลางในเลเยอร์บนของเครือข่าย หรือ flapping link
- หากทันทีหลังเริ่มการฝึก MFU คงที่ต่ำกว่า 1/10 ของค่าที่คาดไว้ มักเป็นปัญหาฮาร์ดแวร์ InfiniBand เช่น สวิตช์เสียในเลเยอร์ T2 หรือ T3
-
คำถามสำหรับตรวจสอบ throughput regression
- ตรวจสอบว่าเคยทำงานปกติมาก่อนหรือไม่
- ตรวจสอบว่ามีสิ่งที่เปลี่ยนแปลงหรือไม่ เช่น การ merge โค้ดล่าสุดหรือการอัปเดตไดรเวอร์
- ตรวจสอบว่ากำลังรันบนโฮสต์ที่ healthy หรือไม่ และบริการที่พึ่งพา เช่น Docker Hub·GitHub ทำงานอยู่หรือไม่
- ตรวจสอบว่ารันด้วยโค้ด สภาพแวดล้อม การตั้งค่า เวอร์ชัน รายชื่อโฮสต์ ลำดับ rank และ random seed เดียวกับการรันปกติครั้งก่อนหน้าหรือไม่
- ตรวจสอบว่าสามารถทำซ้ำได้หรือไม่
- ตรวจสอบว่ามีความสัมพันธ์กับโปรเซสอื่น, crontab รายวัน, ตัวชี้วัดของโฮสต์·DCGM·UFM หรือไม่
- ตรวจสอบว่าเครื่องมือวัดตัวชี้วัดถูกต้องหรือไม่
- ตรวจสอบว่าปัญหาเกิดขึ้นในโค้ดที่ลดขนาดลงหรือไม่ เช่น โมเดลที่เล็กกว่า, ข้อมูลปลอม, การตัดการบันทึก·โหลด checkpoint ออก
เครื่องมืออัตโนมัติและการปรับปรุงการปฏิบัติการ
- แม้การฝึกจะเริ่มต้นด้วยประสิทธิภาพที่ดีได้ แต่สุดท้ายก็จะมีบางอย่างพัง จึงจำเป็นต้องมีเครื่องมือและระบบที่ลดการแทรกแซงของคนให้เหลือน้อยที่สุด
- Imbue เป็นทีมขนาดเล็ก จึงไม่มีบุคลากรเพียงพอที่จะซ่อมด้วยมือไปเรื่อย ๆ และได้ทำให้กระบวนการต่าง ๆ เป็นอัตโนมัติให้มากที่สุดเท่าที่เป็นไปได้
- ปัญหาส่วนใหญ่ในการรันการฝึกถูกจำกัดวงลงไปที่เครื่องที่มีข้อบกพร่องหรือองค์ประกอบเครือข่าย
-
แยกเครื่องที่มีข้อบกพร่องออกโดยอัตโนมัติ
- พัฒนาระบบที่รีสตาร์ตการรันที่แครชจาก checkpoint ล่าสุดโดยอัตโนมัติ
- กระบวนการรีสตาร์ตจะรัน health check บนเครื่องที่ใช้งานได้ทั้งหมด และจัดประเภทสถานะสุขภาพของเครื่องตามเช็กที่ผ่าน
- จากนั้นรันงานฝึกอีกครั้งบนเครื่องที่มีสุขภาพดีที่สุด
-
รับมือองค์ประกอบเครือข่ายโดยอัตโนมัติ
- ความล้มเหลวขององค์ประกอบเครือข่ายที่สังเกตพบทั้งหมดถูก UFM ตรวจจับและบันทึกไว้ใน event log ของ UFM
- อีเวนต์ที่เป็นปัญหาจริงมีเพียงบางส่วนจากหลายสิบประเภท และส่วนใหญ่เกี่ยวข้องกับลิงก์ down หรือ symbol error count สูง
- สคริปต์จะ parse event log ของ UFM เพื่อปิดใช้งานลิงก์และพอร์ตที่เกี่ยวข้องกับอีเวนต์ล่าสุด สร้าง ticket บำรุงรักษา และเปิดใช้งานอีกครั้งหลังซ่อมเสร็จ
-
มิเรอร์ระบบไฟล์ภายใน
- ความเร็ว Ethernet ภายในและภายนอกคลัสเตอร์อาจกลายเป็นคอขวดของการฝึกแบบกระจายขนาดใหญ่ได้
- การเชื่อมต่อ Ethernet แบบแชร์ประมาณ 10Gbit/s จะอิ่มตัวอย่างรวดเร็วเมื่อ worker หลายร้อยตัวดาวน์โหลด dataset และ model checkpoint พร้อมกัน
- Imbue สร้างระบบไฟล์ภายในที่ mirror cloud storage ภายในคลัสเตอร์ เพื่อลดจำนวนไฟล์ที่ต้องดึงจาก S3
- ทำสำเนาแต่ละไฟล์ 3 ชุดเพื่อรับมือกับ churn ที่เครื่องถูกปิดใช้งานหรือเปลี่ยนบ่อย
- ใช้ consistent hashing เพื่อกระจายโหลดให้สม่ำเสมอและลดการย้ายไฟล์ระหว่างเกิด churn
- เนื่องจากพื้นที่ดิสก์มีจำกัด จึงพัฒนาเครื่องมือติดตามวงจรชีวิตไฟล์และลบไฟล์ที่ไม่จำเป็นด้วย
-
Docker registry แบบกระจายภายใน
- ใช้ Kraken สำหรับการส่ง Docker image
- Kraken เป็นซอฟต์แวร์โอเพนซอร์สที่ทำให้ส่ง Docker image แบบ peer-to-peer ได้ และ Imbue ระบุว่าแทบไม่มีปัญหา
-
การมอนิเตอร์ประสิทธิภาพและการระบุโฮสต์ที่มีข้อบกพร่อง
- ตั้งค่า Torch profiler และ NVIDIA Nsight Systems
- Nsight Systems มีประโยชน์ในการทำความเข้าใจว่า forward/backward pass และการสื่อสารของ NCCL ใช้เวลานานเท่าไร
- ช่วยตัดสินว่าเป็นคอขวดด้านการสื่อสารหรือคอขวดด้านการคำนวณ โดยอิงจากขนาดโมเดลและจำนวน worker
- ใช้งานค่อนข้างยากเพราะต้องใช้ Docker privileged mode, ปิดใช้งาน security check ที่เกี่ยวข้องกับ performance monitoring event และต้องหยุดการฝึกเพื่อบันทึก profile
- ยังเขียนเครื่องมือสำหรับตรวจจับ batch การฝึกที่ช้าและหาสาเหตุด้วย
- เครื่องมือที่มีประโยชน์ที่สุดคือเฝ้าดูเวลาของแต่ละ batch แล้ว dump stack trace ของ worker ทั้งหมดเมื่อพบ batch ที่ช้าผิดปกติ
- ทำให้ระบุโฮสต์เฉพาะที่มีปัญหาฮาร์ดแวร์หรือซอฟต์แวร์แบบละเอียดอ่อนได้ง่ายขึ้น
- ก่อนที่ health check จะพัฒนาจนเพียงพอ หากการฝึกล้มเหลวบนชุดเครื่องบางชุด ก็ยังไม่ชัดเจนว่าเครื่องใดเป็นสาเหตุ
- ตัวอย่างเช่น หากกลุ่มเครื่อง 48 เครื่องล้มเหลว จะเปิดการรันขนาดเล็กเป็น 6 กลุ่ม กลุ่มละ 8 เครื่อง และ 8 กลุ่ม กลุ่มละ 6 เครื่อง
- เครื่องที่อยู่ในกลุ่มที่ล้มเหลวทั้งสองขั้นจะถูกตัดสินด้วยความมั่นใจสูงว่าเป็นเครื่องที่มีปัญหา
หลักปฏิบัติการที่ได้จากกระบวนการสร้าง
- หากมีเครื่องมากกว่าที่จำเป็นสำหรับการรันการฝึกเฉพาะ 10~20% จะช่วยให้รันใหม่ได้ง่ายเมื่อเครื่องล้มเหลว
- หากออกแบบเครือข่ายคลัสเตอร์ให้ทุกเครื่องเชื่อมต่อกันอย่างใกล้ชิด จะสามารถใช้ subset ใด ๆ ที่ยังทำงานอยู่ได้
- ความล้มเหลวของฮาร์ดแวร์หรือซอฟต์แวร์ที่พบระหว่างการฝึกจะเกิดขึ้นอีก ดังนั้นจึงคุ้มค่าที่จะเขียน test และโซลูชันอัตโนมัติสำหรับความล้มเหลวแต่ละประเภท
- การสร้างเครื่องมือที่ตีความได้มากขึ้นสำหรับข้อความผิดพลาดที่คลุมเครือแต่ละรายการมีประโยชน์
- เพื่อความสามารถในการทำซ้ำ เลือกใช้กฎที่ว่าแม้แต่การเปลี่ยนแปลงที่ง่ายที่สุดก็ให้เปลี่ยนทีละอย่างเท่านั้น
- เมื่อนำเครื่องมือภายนอกมาใช้หรือมีคนใหม่เข้าร่วมกระบวนการ ให้ตรวจสอบข้ออ้างอีกครั้ง โดยเฉพาะเมื่อขั้นตอนถัดไปต้องพึ่งพาผลลัพธ์นั้น
- กระบวนการทั้งหมดต้องอาศัยการกำกับดูแลและการทำซ้ำจำนวนมาก แต่สิ่งที่เป็นปัจจัยชี้ขาดคือการควบคุมโครงสร้างพื้นฐานได้อย่างสมบูรณ์และสามารถดีบักปัญหาได้ในทุกชั้นของ abstraction
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
หากจะใช้คลัสเตอร์ของตัวเองสำหรับการฝึกประสิทธิภาพสูง ส่วนประกอบทุกอย่างตั้งแต่ InfiniBand, Ethernet, GPU ไปจนถึงโหนดต้องทำงานได้สมบูรณ์ และหากมีการเชื่อมต่อที่ไม่เสถียรเพียงจุดเดียวจากมากกว่า 12,000 จุด การฝึกทั้งหมดก็อาจช้าลงได้
พวกเขาได้เผยแพร่สคริปต์โอเพนซอร์สและคู่มือแบบ end-to-end สำหรับการตั้งค่าโครงสร้างพื้นฐาน ซึ่งเป็นหนึ่งในชุดเครื่องมือไตรภาคสำหรับการฝึกโมเดล 70 พันล้าน โดยสามารถดูเครื่องมือประเมินผลและปรับแต่งไฮเปอร์พารามิเตอร์ CARBS ได้ที่นี่: https://imbue.com/research/70b-intro/
มีสองเรื่องที่สงสัย อย่างแรกคือ ถ้าจะฝึก โมเดล 4 แสนล้านพารามิเตอร์ จะมีอะไรแตกต่างออกไปบ้าง แม้ดูเหมือนว่าเมื่อรวมทั้งคลัสเตอร์แล้ววิดีโอเมมโมรีจะเพียงพอ แต่ก็อยากรู้การประเมินจริง
อย่างที่สองคือ สถาปัตยกรรมแบบนี้ถือเป็นรูปแบบสุดท้ายของการฝึกโมเดลหรือไม่ มันดูเปราะบางมาก จึงอยากรู้ว่ามีกลไกการฝึกร่วมกันหรือสถาปัตยกรรมที่ดีกว่า รวมถึงโครงสร้างคลัสเตอร์ที่ดีกว่านี้หรือไม่
ถ้าเป็นอย่างหลัง ก็อยากรู้ว่าชนะ GPT-4 ได้อย่างไร
พอดูจริง ๆ แล้วทั้งประโยคนี้และเนื้อหาส่วนใหญ่ในบทความดูเหมือนถูกโพสต์ลง Twitter, LinkedIn, Reddit แบบแทบจะคำต่อคำเลย แบบนี้ถือเป็นสแปมหรือเปล่า?
https://x.com/imbue_ai/status/1805629547473518695
https://reddit.com/r/learnmachinelearning/comments/1dobgbs/t...
https://www.linkedin.com/posts/mattboulos_training-a-70b-mod...
อยากรู้ว่าส่วนไหนของสิ่งนี้จะลงมาอยู่ในขอบเขตที่นักพัฒนาสายงานอดิเรกซึ่งมีงบระดับพีซีเกมมิงจะเข้าถึงได้ และเมื่อไหร่
ฟังปัญหาที่เจอแล้วสนุกดี
ที่นี่ดูเหมือน GPU จะเข้าถึง InfiniBand ได้โดยตรง ซึ่งสวยงามมาก นี่เป็นหนึ่งในบทความที่มีประโยชน์ในทางปฏิบัติจริง
เป็นตอนที่ดี และคุ้มค่าที่จะฟังเหตุผลเบื้องหลังว่าทำไมจึงตัดสินใจแบบนี้
Zuckerberg พูดในพอดแคสต์ว่ากำลังวางแผนโมเดล 1GW ตัวถัดไป ซึ่งแทบจะหมายถึงดาต้าเซ็นเตอร์ที่มีโรงไฟฟ้าขนาดกลางติดมาด้วย เลยยิ่งอยากรู้
มีคำถามอยู่บ้าง เช่น ทำไมถึงเลือกสร้างคลัสเตอร์เอง ประสบการณ์กับพาร์ตเนอร์คลาวด์ในการจัดการอุปกรณ์หรือสวิตช์ที่มีปัญหาเป็นอย่างไร
อีกทั้งนอกจากการสื่อสารแบบ all-to-all แล้ว ตอนเลือกสถาปัตยกรรมคลัสเตอร์ให้ความสำคัญกับอะไรที่สุด และในทางปฏิบัติอะไรมีคุณค่ามากที่สุด โครงสร้างพื้นฐานด้านล็อกเป็นอย่างไรนอกเหนือจากการใช้ Loki ทำไมจึงต้องมี local Docker registry และนอกจาก nvidia-container-runtime แล้วใช้ image อื่นด้วยหรือไม่
ทำไมไม่ต่อ GPU เข้ากับแบ็กเอนด์ PCI และ InfiniBand แล้วมีเพียงคอนโทรลเลอร์ ARM ขนาดเล็กไว้ประสานงานกัน? ไม่แน่ใจว่านี่เป็นเพราะแรงเฉื่อยจากการออกแบบเดิม หรือเพราะตลาดคอนโทรลเลอร์ GPU เฉพาะทางยังไม่พอ
ถ้าวิเคราะห์โค้ดฝึกอย่างจริงจังและทำ preprocessing ข้อมูลให้มากพอ อาจใช้ทรัพยากร CPU/RAM ที่เบามากได้ แต่เพราะ GPU แพง ดังนั้น CPU/RAM จึงเป็นสัดส่วนต้นทุนที่เล็กของทั้งระบบ จึงอาจไม่จำเป็นต้องใช้เวลาในการพัฒนาเพื่อปรับแต่งระดับนั้นเสมอไป
ผู้ให้บริการคลาวด์รายใหญ่มากก็น่าจะไล่ตามประสิทธิภาพด้านต้นทุนระดับ 0.x% แบบนั้นเช่นกัน ตัวอย่างเช่น อาจอยากพรีโปรเซส
.pngเป็น.webp(lossless แบบหลายเธรด) หรือ.jpeg(lossy) แต่การเปลี่ยนไปเป็นฟอร์แมตที่ GPU ถอดรหัสได้ แม้จะช่วยลดต้นทุนฝั่ง CPU ระหว่างเทรน ก็อาจทำให้ต้นทุนสตอเรจและการส่งข้อมูลสูงขึ้นจนไม่คุ้มพูดให้แม่นยำกว่านั้นคือ ถ้างานฝั่ง CPU เป็นคอขวดของการเทรน ก็ควรปรับทั้งการพรีโปรเซสข้อมูลและสคริปต์เทรนให้เหมาะที่สุด ประเด็นที่พูดถึงตรงนี้คือช่องว่างระหว่าง “เร็วพอแล้ว” กับ “เร็วกว่า”: CPU เร็วไม่พอสำหรับการเทรน < CPU เร็วพอดีสำหรับการเทรน < CPU เร็วเกินกว่าที่การเทรนต้องการ
อีกปัญหาหนึ่งคือฮาร์ดแวร์ที่เกี่ยวกับ GPU ไดรเวอร์ และประสบการณ์ในการปฏิบัติการ ล้วนอยู่ฝั่ง PC กันหมด ถ้าจะไปรันบน ARM ก็แทบต้องเริ่มใหม่เกือบทั้งหมด และยังต้องมีงานเพิ่มอีกมากเพื่อให้เสถียร สุดท้ายก็เหมือนยอมจ่ายต้นทุนก้อนใหญ่เพื่อประหยัดค่าโปรเซสเซอร์เพียงเล็กน้อย
แม้จะไม่มีประสบการณ์ด้าน LLM/NLP แต่ในเวิร์กโหลดด้านภาพและเสียง บางครั้ง CPU ทั่วไป 4~8 คอร์ก็ยังทำให้ RTX 2/3/4xxx GPU ถูกใช้งานได้ไม่เต็มที่ได้ การที่ CPU หรือ I/O กลายเป็นคอขวดนั้นเกิดขึ้นได้ไม่ยาก
พวกเขาบอกว่ากำลังทำ “self-coding” อยู่ เลยสงสัยว่ามันใกล้เคียงกับโซลูชันแบบ no-code หรือ low-code หรือไม่
บนเว็บไซต์ก็มีบทความที่น่าสนใจอยู่พอสมควร: https://imbue.com/our-work/
โปรเจกต์พวกนั้นมีลักษณะเด่นคือสามารถแบ่งงานออกเป็นแพ็กเกจย่อยที่ค่อนข้างอิสระต่อกันได้ แต่ยังไม่แน่ใจว่าการเทรนโมเดลจะแบ่งแบบนั้นได้หรือไม่