คำแนะนำเกี่ยวกับ Flag ของ XLA

คำแนะนำนี้มีรายการที่คัดสรรมาแล้วของฟีเจอร์สำคัญของ XLA เพื่อช่วยผู้ใช้ ในการไปยังส่วนต่างๆ และใช้ความสามารถของ XLA ได้อย่างมีประสิทธิภาพ ส่วนต่อไปนี้จะอธิบายรายละเอียดเกี่ยวกับ Flag ที่อาจส่งผลต่อประสิทธิภาพรันไทม์และการใช้หน่วยความจำอย่างมาก หากเกิดปัญหา เช่น ข้อขัดข้อง หลังจากเปิดใช้ฟีเจอร์ทดลอง ขอแนะนำให้กลับไปใช้การตั้งค่าเริ่มต้นและสร้างปัญหาใน GitHub

การแจ้งเตือนด้านประสิทธิภาพ

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

ธง คำอธิบาย ค่าเริ่มต้น ค่าที่แนะนำ คุณค่าของผู้สมัคร
การส่งผ่านข้อมูล
1. xla_should_allow_loop_variant_parameter_in_chain
2. xla_should_add_loop_invariant_op_in_chain
3. xla_tpu_enable_ici_ag_pipelining
ควรใช้ Flag ทั้ง 3 นี้ร่วมกันเพื่อเปิดใช้การไปป์ไลน์แบบรวมของการดำเนินการ all-gather ของ ICI(Interchip-Interconnect) ซึ่งจะสร้างโอกาสในการดำเนินการที่ทับซ้อนกันมากขึ้น 1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled
2. xla_should_add_loop_invariant_op_in_chain=kDisabled
3. xla_tpu_enable_ici_ag_pipelining=false
1. xla_should_allow_loop_variant_parameter_in_chain=kEnabled
2. xla_should_add_loop_invariant_op_in_chain=kEnabled
3. xla_tpu_enable_ici_ag_pipelining=true
1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled/kEnabled/kAuto
2. xla_should_add_loop_invariant_op_in_chain=kDisabled/kEnabled/kAuto
3. xla_tpu_enable_ici_ag_pipelining=true/false
v5e/Async
xla_enable_async_all_gather
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_gather
ควรใช้ Flag ทั้ง 3 นี้ร่วมกันเพื่อเปิดใช้งานการดำเนินการแบบ All-Gather แบบไม่พร้อมกันใน v5e xla_enable_async_all_gather=kAuto
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true
xla_enable_async_all_gather=kAuto
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true
xla_enable_async_all_gather=kDisabled/kEnabled/kAuto
xla_tpu_enable_async_collective_fusion=true/false
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true/false
v5e/Async
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_reduce
ควรใช้ 2 แฟล็กนี้ร่วมกันเพื่อเปิดใช้งานการดำเนินการ All-Reduce แบบไม่พร้อมกันใน v5e xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=false
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=true
xla_tpu_enable_async_collective_fusion=true/false
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=true/false
Async
xla_tpu_enable_async_all_to_all
แฟล็กนี้ช่วยให้การสื่อสารแบบทั้งหมดต่อทั้งหมดแบบไม่พร้อมกัน xla_tpu_enable_async_all_to_all=false xla_tpu_enable_async_all_to_all=true xla_tpu_enable_async_all_to_all=true/false
ขึ้นอยู่กับเวลาในการตอบสนอง
xla_all_gather_latency_bound_threshold_in_bytes
โดยแฟล็กนี้มีไว้สำหรับการดำเนินการแบบรวบรวมทั้งหมดที่ขึ้นอยู่กับเวลาในการตอบสนอง (เช่น ขนาดเล็ก) การเปิดใช้ตัวเลือกนี้จะทริกเกอร์การเพิ่มประสิทธิภาพที่เฉพาะเจาะจง ซึ่งจะช่วยลดเวลาในการดำเนินการสำหรับการรวบรวมข้อมูลทั้งหมดที่ขึ้นอยู่กับเวลาในการตอบสนอง โดยปกติแล้วจะใช้ในเวิร์กโหลดการอนุมาน xla_all_gather_latency_bound_threshold_in_bytes=-1
(ซึ่งไม่ได้เปิดใช้)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
ขึ้นอยู่กับเวลาในการตอบสนอง
xla_all_reduce_latency_bound_threshold_in_bytes
โดยแฟล็กนี้มีไว้สำหรับการดำเนินการแบบรวบรวมทั้งหมดที่ขึ้นอยู่กับเวลาในการตอบสนอง (เช่น ขนาดเล็ก) การเปิดใช้การตั้งค่านี้จะทริกเกอร์การเพิ่มประสิทธิภาพที่เฉพาะเจาะจง ซึ่งจะช่วยลดเวลาในการดำเนินการสำหรับการลดทั้งหมดที่ขึ้นอยู่กับเวลาในการตอบสนอง โดยปกติแล้วจะใช้ในเวิร์กโหลดการอนุมาน xla_all_reduce_latency_bound_threshold_in_bytes=-1
(ซึ่งไม่ได้เปิดใช้)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
ขึ้นอยู่กับเวลาในการตอบสนอง
xla_collective_permute_latency_bound_threshold_in_bytes
โดยแฟล็กนี้มีไว้สำหรับการดำเนินการแบบรวบรวมทั้งหมดที่ขึ้นอยู่กับเวลาในการตอบสนอง (เช่น ขนาดเล็ก) การเปิดใช้ตัวเลือกนี้จะทริกเกอร์การเพิ่มประสิทธิภาพที่เฉพาะเจาะจง ซึ่งจะช่วยลดเวลาในการดำเนินการสำหรับการสับเปลี่ยนข้อมูลแบบกลุ่มที่ขึ้นอยู่กับเวลาในการตอบสนอง โดยปกติแล้วจะใช้ในเวิร์กโหลดการอนุมาน xla_collective_permute_latency_bound_threshold_in_bytes=-1
(ซึ่งไม่ได้เปิดใช้)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
ขึ้นอยู่กับเวลาในการตอบสนอง
xla_all_to_all_latency_bound_threshold_in_bytes
โดยแฟล็กนี้มีไว้สำหรับการดำเนินการแบบรวบรวมทั้งหมดที่ขึ้นอยู่กับเวลาในการตอบสนอง (เช่น ขนาดเล็ก) การเปิดใช้ตัวเลือกนี้จะทริกเกอร์การเพิ่มประสิทธิภาพที่เฉพาะเจาะจง ซึ่งจะช่วยลดเวลาในการดำเนินการสำหรับ All-to-All ที่มีเวลาในการตอบสนอง โดยปกติแล้วจะใช้ในเวิร์กโหลดการอนุมาน xla_all_to_all_latency_bound_threshold_in_bytes=-1
(ซึ่งไม่ได้เปิดใช้)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
xla_enable_async_collective_permute เขียนการดำเนินการ collective-permute ทั้งหมดใหม่เป็นรูปแบบอะซิงโครนัส เมื่อตั้งค่าเป็น auto XLA จะเปิดใช้การสื่อสารแบบกลุ่มแบบไม่พร้อมกันโดยอัตโนมัติตามการกำหนดค่าหรือเงื่อนไขอื่นๆ xla_enable_async_collective_permute=kAuto xla_enable_async_collective_permute=kAuto xla_enable_async_collective_permute=kAuto/kEnabled/kDisabled

การติดธงหน่วยความจำ

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

ธง คำอธิบาย ค่าเริ่มต้น ค่าที่แนะนำ คุณค่าของผู้สมัคร
ตัวจัดตารางเวลา
xla_latency_hiding_scheduler_rerun
การตั้งค่านี้จะปรับลักษณะการทำงานของตัวกำหนดเวลาที่ซ่อนเวลาในการตอบสนอง โดยจะทำงานด้วยการค่อยๆ ลดขีดจำกัดหน่วยความจำที่จัดสรรไว้สำหรับการจัดกำหนดการเมื่อมีการ "เรียกใช้ซ้ำ" กระบวนการแต่ละครั้ง xla_latency_hiding_scheduler_rerun=1 xla_latency_hiding_scheduler_rerun=5 0~10(it doesn’t make much sense beyond 10 reruns)
Fusion
xla_tpu_rwb_fusion
ฟีเจอร์นี้จะเปิดใช้การผสานประเภท reduce+broadcast และอาจลดการใช้หน่วยความจำ xla_tpu_rwb_fusion=true xla_tpu_rwb_fusion=false xla_tpu_rwb_fusion=true/false
ตัวจัดตารางเวลา
xla_memory_scheduler
แฟล็กนี้ระบุอัลกอริทึมที่ตัวจัดกำหนดการหน่วยความจำจะใช้เพื่อลดการใช้หน่วยความจำ การใช้อัลกอริทึมขั้นสูงมากขึ้นอาจทำให้ได้กำหนดการที่ใช้หน่วยความจำน้อยลง แต่จะใช้เวลาในการคอมไพล์นานขึ้น xla_memory_scheduler=kDefault xla_memory_scheduler=kBrkga xla_memory_scheduler=kDefault/kList/kDfs/kPostOrder/kBrkga
ตัวจัดตารางเวลา
xla_tpu_enable_latency_hiding_scheduler
ฟีเจอร์นี้เปิดใช้ตัวกำหนดเวลาที่ซ่อนเวลาในการตอบสนอง ซึ่งช่วยให้เราดำเนินการรวบรวมแบบอะซิงโครนัสแทนที่จะเป็นแบบซิงโครนัสได้ การปิดใช้จะลดการใช้หน่วยความจำ แต่จะทำให้ประสิทธิภาพที่ได้จากการดำเนินการแบบไม่พร้อมกันเหล่านี้ลดลง xla_tpu_enable_latency_hiding_scheduler=true xla_tpu_enable_latency_hiding_scheduler=false xla_tpu_enable_latency_hiding_scheduler=true/false
SPMD
xla_jf_spmd_threshold_for_windowed_einsum_mib
แฟล็กนี้กำหนดเกณฑ์ล่างของขนาดขั้นต่ำของจุดเพื่อทริกเกอร์ matmul แบบรวม การตั้งค่าให้มีค่าสูงขึ้นจะช่วยประหยัดหน่วยความจำ แต่จะเสียโอกาสในการดำเนินการ matmul แบบรวม xla_jf_spmd_threshold_for_windowed_einsum_mib=-1 10Mb~1Gb (i.e. 10*1024*1024 ~ 1024*1024*1024) [0, 9223372036854775807]

แฟล็กอื่นๆ ที่ใช้กันโดยทั่วไป

ธง ประเภท หมายเหตุ
xla_dump_to สตริง (เส้นทางของไฟล์) โฟลเดอร์ที่จะวางไฟล์ HLO ก่อนการเพิ่มประสิทธิภาพและอาร์ติแฟกต์อื่นๆ (ดูเครื่องมือ XLA)

แฟล็ก XLA ของ TPU

ธง ประเภท หมายเหตุ
xla_tpu_enable_data_parallel_all_reduce_opt บูลีน (จริง/เท็จ) การเพิ่มประสิทธิภาพเพื่อเพิ่มโอกาสในการทับซ้อนสำหรับ DCN (การเชื่อมต่อเครือข่ายศูนย์ข้อมูล) ทั้งหมดที่ใช้สำหรับการแบ่งข้อมูลแบบขนาน
xla_tpu_data_parallel_opt_different_sized_ops บูลีน (จริง/เท็จ) เปิดใช้การไปป์ไลน์ของ Op แบบขนานข้อมูลในการวนซ้ำหลายครั้ง แม้ว่าขนาดเอาต์พุตจะไม่ตรงกับสิ่งที่บันทึกไว้ในตัวแปรที่ซ้อนกัน อาจเพิ่มแรงกดดันด้านหน่วยความจำ
xla_tpu_spmd_rng_bit_generator_unsafe บูลีน (จริง/เท็จ) ว่าจะเรียกใช้ HLO ของ RngBitGenerator ในลักษณะที่แบ่งพาร์ติชันหรือไม่ ซึ่งไม่ปลอดภัยหากคาดหวังผลลัพธ์ที่แน่นอนด้วยการแบ่งส่วนที่แตกต่างกันในส่วนต่างๆ ของการคำนวณ
xla_tpu_megacore_fusion_allow_ags บูลีน (จริง/เท็จ) อนุญาตให้ผสานรวม all-gather กับ Convolution/all-reduce
xla_tpu_enable_ag_backward_pipelining บูลีน (จริง/เท็จ) ไปป์ไลน์การรวบรวมทั้งหมด (ปัจจุบันคือการรวบรวมทั้งหมดขนาดใหญ่) ย้อนกลับผ่านลูปการสแกน

แฟล็ก XLA ของ GPU

ธง ประเภท หมายเหตุ
xla_gpu_enable_latency_hiding_scheduler บูลีน (จริง/เท็จ) โดยฟีเจอร์นี้ช่วยให้ตัวจัดตารางเวลาที่ซ่อนเวลาในการตอบสนองสามารถซ้อนทับการสื่อสารแบบอะซิงโครนัสกับการคำนวณได้อย่างมีประสิทธิภาพ ค่าเริ่มต้นคือ False
xla_gpu_enable_triton_gemm บูลีน (จริง/เท็จ) ใช้การคูณเมทริกซ์ที่อิงตาม Triton
xla_gpu_graph_level แจ้งว่าไม่เหมาะสม (0-3) แฟล็กเดิมสำหรับการตั้งค่าระดับกราฟ GPU ใช้ xla_gpu_enable_command_buffer ใน Use Case ใหม่ 0 = ปิด; 1 = จับภาพฟิวชันและ memcpys; 2 = จับภาพ gemms; 3 = จับภาพการบิด
xla_gpu_all_reduce_combine_threshold_bytes จำนวนเต็ม (ไบต์) โดยแฟล็กเหล่านี้จะปรับเวลาในการรวม AllGather / ReduceScatter / AllReduce ขนาดเล็กหลายรายการเป็น AllGather / ReduceScatter / AllReduce ขนาดใหญ่รายการเดียวเพื่อลดเวลาที่ใช้ในการสื่อสารข้ามอุปกรณ์ เช่น สำหรับเกณฑ์ AllGather / ReduceScatter ในเวิร์กโหลดที่อิงตาม Transformer ให้พิจารณาปรับเกณฑ์ให้สูงพอที่จะรวมน้ำหนักของเลเยอร์ Transformer อย่างน้อย 1 เลเยอร์เข้ากับ AllGather / ReduceScatter โดยค่าเริ่มต้น ระบบจะตั้งค่า combine_threshold_bytes เป็น 256
xla_gpu_all_gather_combine_threshold_bytes จำนวนเต็ม (ไบต์) ดู xla_gpu_all_reduce_combine_threshold_bytes ด้านบน
xla_gpu_reduce_scatter_combine_threshold_bytes จำนวนเต็ม (ไบต์) ดู xla_gpu_all_reduce_combine_threshold_bytes ด้านบน
xla_gpu_enable_pipelined_all_gather บูลีน (จริง/เท็จ) เปิดใช้การไปป์ไลน์ของคำสั่ง all-gather
xla_gpu_enable_pipelined_reduce_scatter บูลีน (จริง/เท็จ) เปิดใช้การไปป์ไลน์ของคำสั่ง reduce-scatter
xla_gpu_enable_pipelined_all_reduce บูลีน (จริง/เท็จ) เปิดใช้การไปป์ไลน์ของคำสั่ง all-reduce
xla_gpu_enable_while_loop_double_buffering บูลีน (จริง/เท็จ) เปิดใช้การบัฟเฟอร์ 2 ชั้นสำหรับลูป while
xla_gpu_enable_all_gather_combine_by_dim บูลีน (จริง/เท็จ) รวมการดำเนินการ all-gather กับมิติข้อมูลการรวบรวมเดียวกันหรือโดยไม่คำนึงถึงมิติข้อมูล
xla_gpu_enable_reduce_scatter_combine_by_dim บูลีน (จริง/เท็จ) รวมการดำเนินการ reduce-scatter ที่มีมิติข้อมูลเดียวกันหรือไม่มีมิติข้อมูล