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