สรุป
หน้านี้อธิบายรายละเอียดของโมเดลต้นทุนที่ใช้โดยตัวจัดตารางเวลาการซ่อนเวลาในการตอบสนอง หากสนใจปรับแต่งโมเดล ให้ไปที่ส่วนการปรับแต่งโดยตรง
ตัวจัดตารางเวลาการซ่อนเวลาในการตอบสนอง (LHS) เป็นการส่งผ่านคอมไพเลอร์ที่จัดกำหนดการ DAG ของ HLO ในลักษณะที่ลดเวลาจริงให้เหลือน้อยที่สุด
การตัดสินใจของระบบจะอิงตามโมเดลต้นทุนแบบรวม ซึ่งใช้ตารางประสิทธิภาพและโมเดลวิเคราะห์ร่วมกัน โดยเฉพาะอย่างยิ่ง XLA จะฝังตารางประสิทธิภาพสำหรับ GEMM และการสื่อสารแบบกลุ่มที่เชื่อมต่อกันอย่างรวดเร็ว และใช้โมเดลต้นทุนการเชื่อมต่อเครือข่ายและการผสานรวมเชิงวิเคราะห์สำหรับกรณีอื่นๆ ส่วนที่เหลือของเอกสาร จะอธิบายการทำงานภายในของฟีเจอร์เหล่านี้ในระดับสูง
ตารางประสิทธิภาพ - ICI collectives
ตารางประสิทธิภาพประกอบด้วยคอมโพเนนต์หลัก 2 อย่าง ได้แก่ ตัวรวบรวมและตัวประมาณค่า
ผู้รวบรวม
ตัวรวบรวมเป็นเครื่องมือ C++ ที่มีหน้าที่สร้างตารางประสิทธิภาพ
สำหรับการดำเนินการแบบกลุ่ม โดยจะวัดประสิทธิภาพของ HLO
แต่ละรายการ (เช่น all-gather, all-reduce) ในพื้นที่พารามิเตอร์ที่กำหนดแบบคงที่
วิธีการทำงาน
เครื่องมือนี้จะทำการสแกนการดำเนินการแบบกลุ่ม ขนาดการโอน และ
รูปแบบการโอนสำหรับคลัสเตอร์ที่กำหนด โดยจะใช้โครงสร้างพื้นฐานของโปรแกรมเรียกใช้ HLO แบบหลายโฮสต์ที่มีอยู่
และExecutionProfileข้อมูลเพื่อเรียกใช้ HLO ที่สร้างขึ้นและรวบรวม
เมตริกประสิทธิภาพ
พารามิเตอร์การเก็บรวบรวมข้อมูล
ระบบจะรวบรวมตารางเวลาในการตอบสนองสำหรับผลิตภัณฑ์ที่ใช้ร่วมกันของพารามิเตอร์ต่อไปนี้
- ประเภทการรวบรวม
all-reduceall-gatherreduce-scatter
- ขนาดการโอน:
- มาตราส่วนลอการิทึมตั้งแต่ 1024B ถึง 2GiB (เช่น 1024B, 2048B, 4096B, ...)
- รูปแบบการโอน
rail-alignednon-rail-aligned
การสแกนนี้จะทำงานสำหรับคลัสเตอร์ภายในโหนดที่มีอุปกรณ์ 2, 4 และ 8 เครื่อง
เอาต์พุต
ผลลัพธ์ของการเรียกใช้คอลเล็กชันคือตารางเวลาในการตอบสนองในรูปแบบ .pbtxt
(ประมาณ 116 KB ต่อแพลตฟอร์ม)
ตัวกำหนดอัตราการเปลี่ยนแปลง
ตัวประมาณค่าเป็นคอมโพเนนต์ของคอมไพเลอร์ที่ใช้ตารางประสิทธิภาพที่สร้างขึ้น เพื่อให้ค่าประมาณรันไทม์ในระหว่างการคอมไพล์
โครงสร้างข้อมูลภายใน
เมื่อเริ่มต้นใช้งาน Interpolator จะประมวลผลตารางประสิทธิภาพเป็นแผนที่
แผนที่นี้ใช้ทูเพิลของ (collective_type, transfer_scheme) เป็นคีย์
ค่าที่เชื่อมโยงกับแต่ละคีย์คือระนาบแบบยุคลิด 2 มิติ ระนาบนี้จะจัดทำดัชนีปริมาณงานของเครือข่าย (วัดโดย Collector) ตามแกน 2 แกน ดังนี้
- ขนาดการโอน
- จำนวนอุปกรณ์ที่เกี่ยวข้อง
การค้นหาและการประมาณ
เมื่อคอมไพเลอร์พบการดำเนินการแบบกลุ่ม ตัวแทรกจะดำเนินการตามขั้นตอนต่อไปนี้
- โดยจะระบุระนาบปริมาณงาน 2 มิติที่ถูกต้องโดยใช้
(collective_type, transfer_scheme)ของการดำเนินการเป็นคีย์ของแผนที่ - จากนั้นจะใช้การดึงข้อมูลค่าเฉลี่ยถ่วงน้ำหนัก (อิงตามระยะทางแบบยุคลิด) ภายในระนาบ 2 มิติ โดยใช้
(transfer_size, num_devices)ของการดำเนินการเป็นจุดค้นหา - ผลลัพธ์ของการค้นหานี้คือค่าอัตราการส่งข้อมูลของเครือข่ายที่ไม่ซ้ำกันเพียงค่าเดียว
เหตุผล: อัตราการส่งข้อมูลและการประมาณ
ระบบออกแบบมาเพื่อจัดเก็บปริมาณงานของเครือข่ายแทนที่จะเป็นเวลาในการตอบสนองดิบ ตัวเลือกการออกแบบนี้ช่วยลดความซับซ้อนในการประมาณประสิทธิภาพสำหรับขนาดการโอนที่ไม่ได้ระบุไว้อย่างชัดเจนในตารางได้อย่างมาก
หากตารางเวลาในการตอบสนองบันทึกการอิ่มตัวของแบนด์วิดท์เครือข่ายที่ขนาดรวม
S ระบบจะถือว่าอัตราการส่งข้อมูล T ณ จุดนั้นเป็นอัตราการส่งข้อมูลสูงสุด สำหรับกลุ่มใหม่ใดๆ ที่มีขนาด S' > S สามารถประมาณเวลาเรียกใช้ได้ดังนี้
\[\text{EstimatedTime}(S') = \frac{S'}{T_{\text{saturated} } }\]
ซึ่งจะช่วยให้โมเดลประมาณประสิทธิภาพของกลุ่มที่มีขนาดใดก็ได้ แม้แต่กลุ่มที่มีขนาดใหญ่กว่า 2 GiB ซึ่งเป็นขนาดสูงสุดที่ Collector วัดได้
- ประเมินอัตราการส่งข้อมูลสูงสุดต่ำเกินไป
- ดังนั้น ให้ประเมินรันไทม์สูงกว่าความเป็นจริงสำหรับการโอนขนาดใหญ่
โดยทั่วไปแล้ว ทีม XLA:GPU จะดูแลตารางประสิทธิภาพ แต่ในกรณีที่ผู้ใช้ตัดสินใจ ที่จะระบุตารางของตนเอง ผู้ใช้ที่สร้างตารางมีหน้าที่ รับผิดชอบในการตรวจสอบว่าตารางแสดงถึงประสิทธิภาพจริงและมีการวัดผลใน ภูมิภาคที่มีแบนด์วิดท์เต็มสำหรับฮาร์ดแวร์เป้าหมาย
ตารางประสิทธิภาพ - GEMM
ตารางเวลาในการตอบสนองของ GEMM ได้รับการสนับสนุนจากคอมโพเนนต์ 2 รายการ ได้แก่ ตัวรวบรวมและตัวประมาณค่า ซึ่งคล้ายกับระบบสำหรับ Collective
ผู้รวบรวม
Collector เป็นเครื่องมือ C++ ที่คำนวณตารางประสิทธิภาพสำหรับการคูณเมทริกซ์ทั่วไป (GEMM) โดยจะวัดประสิทธิภาพของการคูณเมทริกซ์ที่ระดับ Op ของ HLO dot
วิธีการทำงาน
เครื่องมือนี้จะทำการสแกนพื้นที่คงที่ของมิติข้อมูล GEMM (มิติข้อมูลแบบกลุ่ม แบบไม่ทำสัญญา 2 รายการ และแบบทำสัญญา 1 รายการ) และประเภทข้อมูล
- ประเภทข้อมูลเริ่มต้น:
LHS = bf16,f32,RHS = bf16,f32,OUT = bf16,f32 - โครงสร้างพื้นฐาน: ใช้โปรไฟล์เลอร์การดำเนินการ HLO ซ้ำ
พารามิเตอร์การรวบรวม
ระบบจะรวบรวมตารางเวลาในการตอบสนองสำหรับมิติข้อมูลต่อไปนี้ในผลิตภัณฑ์ต่างๆ
- batch:
{1, 2, 4} - ม. (ไม่ทำสัญญา):
{256, 512, ..., 4096} - n (ไม่ทำสัญญา):
{256, 512, ..., 4096} - k (การทำสัญญา):
{256, 512, ..., 4096}
เอาต์พุตและพื้นที่เก็บข้อมูล
การสแกนแบบเต็มจะสร้าง.pbtxtตารางเวลาในการตอบสนองที่พร้อมให้ตัวประมาณค่าใช้
ตัวกำหนดอัตราการเปลี่ยนแปลง
ตัวประมาณค่าคือคอมโพเนนต์ของคอมไพเลอร์ที่ใช้ตารางที่สร้างขึ้นเพื่อประมาณประสิทธิภาพ GEMM
เหตุผล: ความอิ่มตัวของ FLOPS
ตารางเวลาในการตอบสนองที่รวบรวมไว้ช่วยให้ตัวประมาณค่าสร้าง FLOPS ใหม่สำหรับ แต่ละรายการได้
\[\text{FLOPS} = \frac{2 \times b \times m \times n \times k}{\text{runtime} }\]
ข้อมูลเชิงลึกที่สำคัญคือ FLOPS อิ่มตัว ณ จุดหนึ่ง นั่นคือ ฮาร์ดแวร์จะไปถึงจุดสูงสุดของ FLOPS เมื่อเกินรูปร่างเมทริกซ์หนึ่งๆ ความอิ่มตัวนี้ ช่วยให้ใช้วิธีการประมาณค่าเดียวกันกับที่ใช้สำหรับกลุ่มได้
การค้นหาและการประมาณ
Interpolator จะสร้างพื้นที่แบบยุคลิด 4 มิติจากข้อมูลตาราง เพื่อประมาณประสิทธิภาพ ระบบจะทําการประมาณค่าเฉลี่ยถ่วงน้ำหนักภายในพื้นที่ 4 มิติ หากไม่มีตารางสำหรับข้อมูลบางประเภท ตามฮิวริสติกแล้ว ระบบจะแปลงมิติข้อมูลแต่ละรายการเป็นจำนวนไบต์
รูปแบบต้นทุนเชิงวิเคราะห์ - DCN
รูปแบบต้นทุนรวมของ S-Curve
โมเดลเส้นโค้ง S เป็นโมเดลการคาดการณ์เครือข่ายที่วิเคราะห์อย่างเต็มรูปแบบ
ภาพรวม
โมเดลนี้ออกแบบมาเพื่อประมาณประสิทธิภาพของการดำเนินการร่วมกันโดยอิงตามชุดคุณสมบัติเครือข่ายคงที่
อินพุตโมเดล
โมเดลต้องมีอินพุต 2 หมวดหมู่ ได้แก่
พร็อพเพอร์ตี้เครือข่ายคงที่ (ผู้ใช้กำหนด):
- ค่าใช้จ่ายในการเปิดตัวแบบรวม
- ความเร็ว NIC
- RTT (ระยะเวลารับส่งข้อมูล)
โดยค่าเริ่มต้น XLA จะตรวจหาแพลตฟอร์มโดยอัตโนมัติและใช้ค่าสำหรับสถาปัตยกรรมที่พบบ่อยที่สุด ผู้ใช้กำหนดค่าพร็อพเพอร์ตี้เหล่านี้ได้ ดูรายละเอียดได้ที่ส่วนการปรับแต่ง
ข้อมูลต่อกลุ่ม:
- ประเภทกลุ่ม (เช่น
AllGather,ReduceScatter) - ขนาดการโอน
- จำนวนโหนดที่เกี่ยวข้องกับการสื่อสาร
- ประเภทกลุ่ม (เช่น
การผสานรวม
โมเดล S-Curve ผสานรวมเข้ากับ XLA:GPU และใช้ใน Hopper และ
Blackwell
รูปแบบต้นทุนเชิงวิเคราะห์ - ฟิวชัน
สำหรับเคอร์เนลอื่นๆ เราจะใช้โมเดลต้นทุนด้านประสิทธิภาพของ GPU เพื่อประมาณ รันไทม์ที่เหมาะสม อ่านข้อมูลเพิ่มเติมได้ที่นี่
การจูนเครื่องยนต์
คุณปรับแต่งโมเดล S-Curve ได้โดยการออกแฟล็ก XLA ที่เหมาะสม การกำหนดค่าเริ่มต้น ควรเพียงพอในกรณีส่วนใหญ่ แต่การควบคุมโมเดลจะแสดงใน กรณีอื่นๆ
export NIC_SPEED_GBPS=... # NIC speed per GPU in Gigabytes
export GPUS_PER_NODE=... # Num of GPUs per cluster interconnected with fast network (e.g. NVLINK)
export XLA_FLAGS=--xla_gpu_analytical_latency_estimator_options="nic_speed_gbps=$NIC_SPEED_GBPS,gpus_per_node=$GPUS_PER_NODE"