รูปแบบต้นทุน LHS


สรุป

หน้านี้อธิบายรายละเอียดของโมเดลต้นทุนที่ใช้โดยตัวจัดตารางเวลาการซ่อนเวลาในการตอบสนอง หากสนใจปรับแต่งโมเดล ให้ไปที่ส่วนการปรับแต่งโดยตรง

ตัวจัดตารางเวลาการซ่อนเวลาในการตอบสนอง (LHS) เป็นการส่งผ่านคอมไพเลอร์ที่จัดกำหนดการ DAG ของ HLO ในลักษณะที่ลดเวลาจริงให้เหลือน้อยที่สุด

การตัดสินใจของระบบจะอิงตามโมเดลต้นทุนแบบรวม ซึ่งใช้ตารางประสิทธิภาพและโมเดลวิเคราะห์ร่วมกัน โดยเฉพาะอย่างยิ่ง XLA จะฝังตารางประสิทธิภาพสำหรับ GEMM และการสื่อสารแบบกลุ่มที่เชื่อมต่อกันอย่างรวดเร็ว และใช้โมเดลต้นทุนการเชื่อมต่อเครือข่ายและการผสานรวมเชิงวิเคราะห์สำหรับกรณีอื่นๆ ส่วนที่เหลือของเอกสาร จะอธิบายการทำงานภายในของฟีเจอร์เหล่านี้ในระดับสูง


ตารางประสิทธิภาพ - ICI collectives

ตารางประสิทธิภาพประกอบด้วยคอมโพเนนต์หลัก 2 อย่าง ได้แก่ ตัวรวบรวมและตัวประมาณค่า

ผู้รวบรวม

ตัวรวบรวมเป็นเครื่องมือ C++ ที่มีหน้าที่สร้างตารางประสิทธิภาพ สำหรับการดำเนินการแบบกลุ่ม โดยจะวัดประสิทธิภาพของ HLO แต่ละรายการ (เช่น all-gather, all-reduce) ในพื้นที่พารามิเตอร์ที่กำหนดแบบคงที่

วิธีการทำงาน

เครื่องมือนี้จะทำการสแกนการดำเนินการแบบกลุ่ม ขนาดการโอน และ รูปแบบการโอนสำหรับคลัสเตอร์ที่กำหนด โดยจะใช้โครงสร้างพื้นฐานของโปรแกรมเรียกใช้ HLO แบบหลายโฮสต์ที่มีอยู่ และExecutionProfileข้อมูลเพื่อเรียกใช้ HLO ที่สร้างขึ้นและรวบรวม เมตริกประสิทธิภาพ

พารามิเตอร์การเก็บรวบรวมข้อมูล

ระบบจะรวบรวมตารางเวลาในการตอบสนองสำหรับผลิตภัณฑ์ที่ใช้ร่วมกันของพารามิเตอร์ต่อไปนี้

  • ประเภทการรวบรวม
    • all-reduce
    • all-gather
    • reduce-scatter
  • ขนาดการโอน:
    • มาตราส่วนลอการิทึมตั้งแต่ 1024B ถึง 2GiB (เช่น 1024B, 2048B, 4096B, ...)
  • รูปแบบการโอน
    • rail-aligned
    • non-rail-aligned

การสแกนนี้จะทำงานสำหรับคลัสเตอร์ภายในโหนดที่มีอุปกรณ์ 2, 4 และ 8 เครื่อง

เอาต์พุต

ผลลัพธ์ของการเรียกใช้คอลเล็กชันคือตารางเวลาในการตอบสนองในรูปแบบ .pbtxt (ประมาณ 116 KB ต่อแพลตฟอร์ม)

ตัวกำหนดอัตราการเปลี่ยนแปลง

ตัวประมาณค่าเป็นคอมโพเนนต์ของคอมไพเลอร์ที่ใช้ตารางประสิทธิภาพที่สร้างขึ้น เพื่อให้ค่าประมาณรันไทม์ในระหว่างการคอมไพล์

โครงสร้างข้อมูลภายใน

เมื่อเริ่มต้นใช้งาน Interpolator จะประมวลผลตารางประสิทธิภาพเป็นแผนที่ แผนที่นี้ใช้ทูเพิลของ (collective_type, transfer_scheme) เป็นคีย์

ค่าที่เชื่อมโยงกับแต่ละคีย์คือระนาบแบบยุคลิด 2 มิติ ระนาบนี้จะจัดทำดัชนีปริมาณงานของเครือข่าย (วัดโดย Collector) ตามแกน 2 แกน ดังนี้

  1. ขนาดการโอน
  2. จำนวนอุปกรณ์ที่เกี่ยวข้อง

การค้นหาและการประมาณ

เมื่อคอมไพเลอร์พบการดำเนินการแบบกลุ่ม ตัวแทรกจะดำเนินการตามขั้นตอนต่อไปนี้

  1. โดยจะระบุระนาบปริมาณงาน 2 มิติที่ถูกต้องโดยใช้ (collective_type, transfer_scheme) ของการดำเนินการเป็นคีย์ของแผนที่
  2. จากนั้นจะใช้การดึงข้อมูลค่าเฉลี่ยถ่วงน้ำหนัก (อิงตามระยะทางแบบยุคลิด) ภายในระนาบ 2 มิติ โดยใช้ (transfer_size, num_devices) ของการดำเนินการเป็นจุดค้นหา
  3. ผลลัพธ์ของการค้นหานี้คือค่าอัตราการส่งข้อมูลของเครือข่ายที่ไม่ซ้ำกันเพียงค่าเดียว

เหตุผล: อัตราการส่งข้อมูลและการประมาณ

ระบบออกแบบมาเพื่อจัดเก็บปริมาณงานของเครือข่ายแทนที่จะเป็นเวลาในการตอบสนองดิบ ตัวเลือกการออกแบบนี้ช่วยลดความซับซ้อนในการประมาณประสิทธิภาพสำหรับขนาดการโอนที่ไม่ได้ระบุไว้อย่างชัดเจนในตารางได้อย่างมาก

หากตารางเวลาในการตอบสนองบันทึกการอิ่มตัวของแบนด์วิดท์เครือข่ายที่ขนาดรวม 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 หมวดหมู่ ได้แก่

  1. พร็อพเพอร์ตี้เครือข่ายคงที่ (ผู้ใช้กำหนด):

    • ค่าใช้จ่ายในการเปิดตัวแบบรวม
    • ความเร็ว NIC
    • RTT (ระยะเวลารับส่งข้อมูล)

    โดยค่าเริ่มต้น XLA จะตรวจหาแพลตฟอร์มโดยอัตโนมัติและใช้ค่าสำหรับสถาปัตยกรรมที่พบบ่อยที่สุด ผู้ใช้กำหนดค่าพร็อพเพอร์ตี้เหล่านี้ได้ ดูรายละเอียดได้ที่ส่วนการปรับแต่ง

  2. ข้อมูลต่อกลุ่ม:

    • ประเภทกลุ่ม (เช่น 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"