ต่อไปนี้จะอธิบายความหมายของการดำเนินการที่กำหนดไว้ในอินเทอร์เฟซ
XlaBuilder
โดยปกติแล้ว การดำเนินการเหล่านี้จะแมปแบบหนึ่งต่อหนึ่งกับการดำเนินการที่กำหนดไว้ใน
อินเทอร์เฟซ RPC ใน
xla_data.proto
หมายเหตุเกี่ยวกับคำศัพท์: ประเภทข้อมูลทั่วไปที่ XLA จัดการคืออาร์เรย์ N มิติที่มีองค์ประกอบของประเภทที่สม่ำเสมอ (เช่น Float 32 บิต) ในเอกสารนี้ เราใช้ array เพื่อระบุอาร์เรย์ที่มีมิติข้อมูลโดยพลการ เพื่อความสะดวก กรณีพิเศษจะมีชื่อที่เฉพาะเจาะจงและคุ้นเคยมากขึ้น เช่น เวกเตอร์คืออาร์เรย์ 1 มิติ และเมทริกซ์คืออาร์เรย์ 2 มิติ
ดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างของ Op ในรูปร่างและเลย์เอาต์และ เลย์เอาต์แบบเรียงต่อกัน
หน้าท้อง
ดูเพิ่มเติม
XlaBuilder::Abs
ค่าสัมบูรณ์แบบองค์ประกอบ x -> |x|
Abs(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - abs
เพิ่ม
ดูเพิ่มเติม
XlaBuilder::Add
ดำเนินการบวกแบบทีละองค์ประกอบของ lhs และ rhs
Add(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ สำหรับ Add ดังนี้
Add(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - add
AddDependency
ดูเพิ่มเติม
HloInstruction::AddDependency
AddDependency อาจปรากฏในข้อมูลการทิ้ง HLO แต่ไม่ได้มีไว้ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
AfterAll
ดูเพิ่มเติม
XlaBuilder::AfterAll
AfterAll รับโทเค็นจำนวนตัวแปรและสร้างโทเค็นเดียว โทเค็น
เป็นประเภทดั้งเดิมที่สามารถเชื่อมโยงระหว่างการดำเนินการที่มีผลข้างเคียงเพื่อ
บังคับใช้การจัดลำดับ AfterAll สามารถใช้เป็นตัวเชื่อมโทเค็นสำหรับการเรียงลำดับ
การดำเนินการหลังจากชุดการดำเนินการ
AfterAll(tokens)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
tokens |
เวกเตอร์ของ XlaOp |
จำนวนโทเค็นที่เปลี่ยนแปลงได้ |
ดูข้อมูล StableHLO ได้ที่ StableHLO - after_all
AllGather
ดูเพิ่มเติม
XlaBuilder::AllGather
ดำเนินการต่อกันในสำเนา
AllGather(operand, all_gather_dimension, shard_count, replica_groups,
channel_id, layout, use_global_device_ids)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand
|
XlaOp
|
อาร์เรย์ที่จะต่อกันในรีพลิกา |
all_gather_dimension |
int64 |
มิติข้อมูลการต่อกัน |
shard_count
|
int64
|
ขนาดของกลุ่ม จำลองแต่ละกลุ่ม |
replica_groups
|
เวกเตอร์ของเวกเตอร์ของ
int64 |
กลุ่มที่ทำการต่อกัน |
channel_id
|
ไม่บังคับ
ChannelHandle |
รหัสช่องที่ไม่บังคับสำหรับการสื่อสารข้ามโมดูล |
layout
|
ไม่บังคับ Layout
|
สร้างรูปแบบเลย์เอาต์ ที่จะจับภาพ เลย์เอาต์ที่ตรงกันใน อาร์กิวเมนต์ |
use_global_device_ids
|
ไม่บังคับ bool
|
แสดงค่าจริงหากรหัสในการกำหนดค่า ReplicaGroup แสดงถึงรหัสส่วนกลาง |
replica_groupsคือรายการกลุ่มรีพลิคาระหว่างที่ทำการต่อกัน (ดึงรหัสรีพลิคาสำหรับรีพลิคาปัจจุบันได้โดยใช้ReplicaId) ลำดับของรีพลิคาในแต่ละกลุ่มจะกำหนด ลำดับที่อินพุตของรีพลิคาอยู่ในผลลัพธ์replica_groupsต้องว่างเปล่า (ในกรณีนี้ ตัวจำลองทั้งหมดจะอยู่ในกลุ่มเดียว เรียงจาก0ถึงN - 1) หรือมีจำนวนองค์ประกอบเท่ากับ จำนวนตัวจำลอง เช่นreplica_groups = {0, 2}, {1, 3}จะทำการ เชื่อมต่อระหว่างรีพลิกากับ0และ2รวมถึง1และ3shard_countคือขนาดของกลุ่มรีพลิกาทุกกลุ่ม เราต้องการข้อมูลนี้ในกรณีที่replica_groupsว่างเปล่าchannel_idใช้สำหรับการสื่อสารข้ามโมดูล โดยมีเพียงall-gatherการดำเนินการที่มีchannel_idเดียวกันเท่านั้นที่สื่อสารกันได้use_global_device_idsแสดงผลเป็นจริงหากรหัสในการกำหนดค่า ReplicaGroup แสดงรหัสส่วนกลางของ (replica_id * partition_count + partition_id) แทนรหัสจำลอง ซึ่งช่วยให้จัดกลุ่มอุปกรณ์ได้ยืดหยุ่นมากขึ้นหาก การลดทั้งหมดนี้เป็นทั้งแบบข้ามพาร์ติชันและข้ามรีพลิกา
รูปร่างเอาต์พุตคือรูปร่างอินพุตที่มีขนาดใหญ่ขึ้น all_gather_dimensionshard_count เท่า เช่น หากมีรีพลิกา 2 รายการและตัวถูกดำเนินการมีค่า [1.0, 2.5] และ [3.0, 5.25] ตามลำดับในรีพลิกาทั้ง 2 รายการ ค่าเอาต์พุตจาก Op นี้ที่ all_gather_dim เป็น 0 จะเป็น [1.0, 2.5, 3.0,5.25] ในรีพลิกาทั้ง 2 รายการ
API ของ AllGather จะแยกออกเป็นคำสั่ง HLO 2 รายการภายใน
(AllGatherStart และ AllGatherDone)
ดูเพิ่มเติม
HloInstruction::CreateAllGatherStart
AllGatherStart, AllGatherDone ทำหน้าที่เป็นองค์ประกอบพื้นฐานใน HLO การดำเนินการเหล่านี้อาจ
ปรากฏในข้อมูลการทิ้ง HLO แต่ไม่ได้มีไว้ให้ผู้ใช้
สร้างด้วยตนเอง
ดูข้อมูล StableHLO ได้ที่ StableHLO - all_gather
AllReduce
ดูเพิ่มเติม
XlaBuilder::AllReduce
ทำการคำนวณที่กำหนดเองในรีพลิกาทั้งหมด
AllReduce(operand, computation, replica_groups, channel_id,
shape_with_layout, use_global_device_ids)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand
|
XlaOp
|
อาร์เรย์หรือทูเพิลที่ไม่ว่างเปล่า ของอาร์เรย์ที่จะลดใน แบบจำลอง |
computation |
XlaComputation |
การคำนวณการลด |
replica_groups
|
ReplicaGroup เวกเตอร์
|
กลุ่มที่ใช้ในการ ลด |
channel_id
|
ไม่บังคับ
ChannelHandle |
รหัสช่องที่ไม่บังคับสำหรับการสื่อสารข้ามโมดูล |
shape_with_layout
|
ไม่บังคับ Shape
|
กำหนดเลย์เอาต์ของ ข้อมูลที่โอน |
use_global_device_ids
|
ไม่บังคับ bool
|
แสดงค่าจริงหากรหัสในการกำหนดค่า ReplicaGroup แสดงถึงรหัสส่วนกลาง |
- เมื่อ
operandเป็นทูเพิลของอาร์เรย์ ระบบจะดำเนินการ all-reduce กับแต่ละ องค์ประกอบของทูเพิล replica_groupsคือรายการกลุ่มรีพลิคาที่จะทำการลดค่า (สามารถดึงข้อมูลรหัสรีพลิคาสำหรับรีพลิคาปัจจุบันได้โดยใช้ReplicaId)replica_groupsต้องว่างเปล่า (ในกรณีที่รีพลิคาทั้งหมดอยู่ในกลุ่มเดียว) หรือมีจำนวนองค์ประกอบเท่ากับจำนวนรีพลิคา เช่นreplica_groups = {0, 2}, {1, 3}จะทำการลดระหว่างสำเนา0กับ2และ1กับ3channel_idใช้สำหรับการสื่อสารข้ามโมดูล โดยมีเพียงall-reduceการดำเนินการที่มีchannel_idเดียวกันเท่านั้นที่สื่อสารกันได้shape_with_layout: บังคับให้เลย์เอาต์ของ AllReduce เป็นเลย์เอาต์ที่กำหนด ใช้เพื่อรับประกันเลย์เอาต์เดียวกันสำหรับกลุ่มการดำเนินการ AllReduce ที่คอมไพล์แยกกันuse_global_device_idsแสดงผลเป็นจริงหากรหัสในการกำหนดค่า ReplicaGroup แสดงรหัสส่วนกลางของ (replica_id * partition_count + partition_id) แทนรหัสจำลอง ซึ่งช่วยให้จัดกลุ่มอุปกรณ์ได้ยืดหยุ่นมากขึ้นหาก การลดทั้งหมดนี้เป็นทั้งแบบข้ามพาร์ติชันและข้ามรีพลิกา
รูปร่างเอาต์พุตจะเหมือนกับรูปร่างอินพุต ตัวอย่างเช่น หากมีรีพลิกา 2 รายการและตัวถูกดำเนินการมีค่า [1.0, 2.5] และ [3.0, 5.25]
ตามลำดับในรีพลิกาทั้ง 2 รายการ ค่าเอาต์พุตจาก Op นี้และการคำนวณ
การบวกจะเป็น [4.0, 7.75] ในรีพลิกาทั้ง 2 รายการ หากอินพุตเป็น
ทูเพิล เอาต์พุตก็จะเป็นทูเพิลเช่นกัน
การคำนวณผลลัพธ์ของ AllReduce ต้องมีอินพุต 1 รายการจากแต่ละรีพลิก
ดังนั้นหากรีพลิกหนึ่งเรียกใช้โหนด AllReduce มากกว่ารีพลิกอื่น
รีพลิกแรกจะรอไปเรื่อยๆ เนื่องจากรีพลิกาทั้งหมดเรียกใช้โปรแกรมเดียวกัน จึงมีวิธีไม่มากนักที่จะทำให้เกิดเหตุการณ์ดังกล่าว แต่ก็เป็นไปได้เมื่อเงื่อนไขของลูป while ขึ้นอยู่กับข้อมูลจาก infeed และข้อมูลที่ infeed ทำให้ลูป while วนซ้ำหลายครั้งในรีพลิกาหนึ่งมากกว่าอีกรีพลิกาหนึ่ง
API ของ AllReduce จะแยกออกเป็นคำสั่ง HLO 2 รายการภายใน
(AllReduceStart และ AllReduceDone)
ดูเพิ่มเติม
HloInstruction::CreateAllReduceStart
AllReduceStart และ AllReduceDone ทำหน้าที่เป็นองค์ประกอบพื้นฐานใน HLO การดำเนินการเหล่านี้อาจ
ปรากฏในข้อมูลการทิ้ง HLO แต่ไม่ได้มีไว้ให้ผู้ใช้
สร้างด้วยตนเอง
CrossReplicaSum
ดูเพิ่มเติม
XlaBuilder::CrossReplicaSum
ดำเนินการ AllReduce ด้วยการคำนวณผลรวม
CrossReplicaSum(operand, replica_groups)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand
|
XlaOp | อาร์เรย์หรือทูเพิลที่ไม่ว่างของ อาร์เรย์ที่จะลดใน แบบจำลอง |
replica_groups
|
เวกเตอร์ของเวกเตอร์ของ
int64 |
กลุ่มที่ใช้ในการ ลด |
แสดงผลผลรวมของค่าตัวถูกดำเนินการภายในแต่ละกลุ่มย่อยของสำเนา สำเนาทั้งหมดจะป้อนข้อมูล 1 รายการไปยังผลรวม และสำเนาทั้งหมดจะได้รับผลรวมที่ได้ สำหรับแต่ละกลุ่มย่อย
AllToAll
ดูเพิ่มเติม
XlaBuilder::AllToAll
AllToAll เป็นการดำเนินการแบบกลุ่มที่ส่งข้อมูลจากทุกแกนไปยังทุกแกน โดยมี 2 ระยะ ดังนี้
- ระยะกระจาย ในแต่ละคอร์ ระบบจะแบ่งตัวถูกดำเนินการออกเป็น
split_countจำนวนบล็อกตามsplit_dimensionsและกระจายบล็อก ไปยังทุกคอร์ เช่น ระบบจะส่งบล็อกที่ i ไปยังคอร์ที่ i - ระยะรวบรวม แต่ละคอร์จะต่อบล็อกที่ได้รับตาม
concat_dimension
คุณกำหนดค่าแกนที่เข้าร่วมได้โดยทำดังนี้
replica_groups: ReplicaGroup แต่ละกลุ่มจะมีรายการรหัสของรีพลิก้า ที่เข้าร่วมในการคำนวณ (ดึงรหัสของรีพลิก้าปัจจุบันได้โดยใช้ReplicaId) AllToAll จะใช้ ภายในกลุ่มย่อยตามลำดับที่ระบุ เช่นreplica_groups = { {1,2,3}, {4,5,0} }หมายความว่าจะใช้ AllToAll ภายในสำเนา{1, 2, 3}และในเฟสการรวบรวม และบล็อกที่ได้รับจะต่อกันตามลำดับเดียวกันคือ 1, 2, 3 จากนั้นจะใช้ AllToAll อีกรายการภายในรีพลิกา 4, 5, 0 และลำดับการต่อกันคือ 4, 5, 0 หากreplica_groupsว่างเปล่า สำเนาทั้งหมดจะอยู่ในกลุ่มเดียวตามลำดับการต่อกันของลักษณะที่ปรากฏ
สิ่งที่ต้องมีก่อน
- ขนาดมิติข้อมูลของตัวถูกดำเนินการใน
split_dimensionหารด้วยsplit_countได้ลงตัว - รูปร่างของตัวถูกดำเนินการไม่ใช่ Tuple
AllToAll(operand, split_dimension, concat_dimension, split_count,
replica_groups, layout, channel_id)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์อินพุต n มิติ |
split_dimension
|
int64
|
ค่าในช่วง
[0,n) ที่ตั้งชื่อ
มิติข้อมูลซึ่ง
ตัวถูกดำเนินการจะแยกตาม |
concat_dimension
|
int64
|
ค่าในช่วง
[0,n) ที่ตั้งชื่อ
มิติข้อมูลซึ่ง
บล็อกที่แยก
จะต่อกัน |
split_count
|
int64
|
จำนวนคอร์ที่
เข้าร่วมใน
การดำเนินการนี้ หาก replica_groups ว่างเปล่า
ค่านี้ควรเป็นจำนวน
รีพลิก้า มิฉะนั้น
ค่านี้ควรเท่ากับ
จำนวนรีพลิก้าในแต่ละ
กลุ่ม |
replica_groups
|
ReplicaGroupเวกเตอร์
|
แต่ละกลุ่มจะมีรายการ รหัสของรีเพล็กซ์ |
layout |
ไม่บังคับ Layout |
เลย์เอาต์หน่วยความจำที่ผู้ใช้ระบุ |
channel_id
|
ไม่บังคับ ChannelHandle
|
ตัวระบุที่ไม่ซ้ำกันสำหรับคู่ส่ง/รับแต่ละคู่ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปร่างและเลย์เอาต์ได้ที่ xla::shapes
ดูข้อมูล StableHLO ได้ที่ StableHLO - all_to_all
AllToAll - ตัวอย่างที่ 1
XlaBuilder b("alltoall");
auto x = Parameter(&b, 0, ShapeUtil::MakeShape(F32, {4, 16}), "x");
AllToAll(
x,
/*split_dimension=*/ 1,
/*concat_dimension=*/ 0,
/*split_count=*/ 4);

ในตัวอย่างด้านบน มี 4 คอร์ที่เข้าร่วมใน Alltoall ในแต่ละ คอร์ ระบบจะแบ่งตัวถูกดำเนินการออกเป็น 4 ส่วนตามมิติข้อมูลที่ 1 ดังนั้นแต่ละส่วนจะมี รูปร่าง f32[4,4] โดยจะกระจาย 4 ส่วนไปยังคอร์ทั้งหมด จากนั้นแต่ละแกนจะ ต่อชิ้นส่วนที่ได้รับตามมิติข้อมูล 0 ตามลำดับแกน 0-4 ดังนั้น เอาต์พุตในแต่ละแกนจึงมีรูปร่างเป็น f32[16,4]
AllToAll - ตัวอย่างที่ 2 - StableHLO
ในตัวอย่างด้านบน มีรีพลิกา 2 รายการที่เข้าร่วมใน AllToAll ใน แต่ละสำเนา ตัวถูกดำเนินการมีรูปร่าง f32[2,4] ตัวถูกดำเนินการจะแบ่งออกเป็น 2 ส่วน ตามมิติข้อมูลที่ 1 ดังนั้นแต่ละส่วนจะมีรูปร่าง f32[2,2] จากนั้นจะมีการแลกเปลี่ยน 2 ส่วนนี้ ในสำเนาตามตำแหน่งในกลุ่มสำเนา แต่ละรีพลิกาจะรวบรวมส่วนที่เกี่ยวข้องจากทั้งตัวถูกดำเนินการและต่อกัน ตามมิติที่ 0 ดังนั้น เอาต์พุตในแต่ละรีพลิกะจะมีรูปร่าง f32[4,2]
RaggedAllToAll
ดูเพิ่มเติม
XlaBuilder::RaggedAllToAll
RaggedAllToAll ดำเนินการแบบกลุ่มแบบทั้งหมดต่อทั้งหมด โดยที่อินพุตและเอาต์พุตเป็นเทนเซอร์แบบไม่สม่ำเสมอ
RaggedAllToAll(input, input_offsets, send_sizes, output, output_offsets,
recv_sizes, replica_groups, channel_id)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
input |
XlaOp |
อาร์เรย์ N ของประเภท T |
input_offsets |
XlaOp |
อาร์เรย์ N ของประเภท T |
send_sizes |
XlaOp |
อาร์เรย์ N ของประเภท T |
output |
XlaOp |
อาร์เรย์ N ของประเภท T |
output_offsets |
XlaOp |
อาร์เรย์ N ของประเภท T |
recv_sizes |
XlaOp |
อาร์เรย์ N ของประเภท T |
replica_groups
|
ReplicaGroup เวกเตอร์
|
แต่ละกลุ่มจะมีรายการรหัสรีเพลส |
channel_id
|
ไม่บังคับ ChannelHandle
|
ตัวระบุที่ไม่ซ้ำกันสำหรับคู่ส่ง/รับแต่ละคู่ |
เทนเซอร์แบบไม่สม่ำเสมอจะกำหนดโดยชุดเทนเซอร์ 3 รายการ ได้แก่
data:dataเทนเซอร์ "ไม่สม่ำเสมอ" ตามมิติข้อมูลด้านนอกสุด ซึ่งแต่ละองค์ประกอบที่จัดทำดัชนีจะมีขนาดแตกต่างกันoffsets': เทนเซอร์offsetsจะจัดทำดัชนีมิติข้อมูลด้านนอกสุดของเทนเซอร์dataและแสดงออฟเซ็ตเริ่มต้นของแต่ละองค์ประกอบที่ไม่สม่ำเสมอของ เทนเซอร์datasizes: เทนเซอร์sizesแสดงขนาดขององค์ประกอบที่ไม่สม่ำเสมอแต่ละรายการของ เทนเซอร์dataโดยขนาดจะระบุในหน่วยขององค์ประกอบย่อย องค์ประกอบย่อยกำหนดเป็นคำต่อท้ายของรูปร่างเทนเซอร์ "data" ที่ได้จากการ นำมิติข้อมูล "ไม่สม่ำเสมอ" ที่อยู่นอกสุดออก- เทนเซอร์
offsetsและsizesต้องมีขนาดเท่ากัน
ตัวอย่างเทนเซอร์แบบไม่สม่ำเสมอ
data: [8,3] =
{ {a,b,c},{d,e,f},{g,h,i},{j,k,l},{m,n,o},{p,q,r},{s,t,u},{v,w,x} }
offsets: [3] = {0, 1, 4}
sizes: [3] = {1, 3, 4}
// Index 'data' at 'offsets'[0], 'sizes'[0]' // {a,b,c}
// Index 'data' at 'offsets'[1], 'sizes'[1]' // {d,e,f},{g,h,i},{j,k,l}
// Index 'data' at 'offsets'[2], 'sizes'[2]' // {m,n,o},{p,q,r},{s,t,u},{v,w,x}
output_offsets ต้องได้รับการแบ่งส่วนในลักษณะที่แต่ละรีพลิเคชันมีออฟเซ็ตใน
มุมมองเอาต์พุตรีพลิเคชันเป้าหมาย
สำหรับออฟเซ็ตเอาต์พุตที่ i เครื่องจำลองปัจจุบันจะส่ง
input[input_offsets[i]:input_offsets[i]+input_sizes[i]] อัปเดตไปยังเครื่องจำลองที่ i
ซึ่งจะเขียนไปยัง
output_i[output_offsets[i]:output_offsets[i]+send_sizes[i]] ในเครื่องจำลองที่ i
output
เช่น หากเรามีรีพลิกา 2 รายการ
replica 0:
input: [1, 2, 2]
output:[0, 0, 0, 0]
input_offsets: [0, 1]
send_sizes: [1, 2]
output_offsets: [0, 0]
recv_sizes: [1, 1]
replica 1:
input: [3, 4, 0]
output: [0, 0, 0, 0]
input_offsets: [0, 1]
send_sizes: [1, 1]
output_offsets: [1, 2]
recv_sizes: [2, 1]
// replica 0's result will be: [1, 3, 0, 0]
// replica 1's result will be: [2, 2, 4, 0]
HLO แบบ All-to-all ที่ไม่สม่ำเสมอกันมีอาร์กิวเมนต์ต่อไปนี้
input: เทนเซอร์ข้อมูลอินพุตแบบไม่สม่ำเสมอoutput: เทนเซอร์ข้อมูลเอาต์พุตแบบไม่สม่ำเสมอinput_offsets: เทนเซอร์ออฟเซ็ตอินพุตแบบไม่สม่ำเสมอsend_sizes: เทนเซอร์ขนาดการส่งแบบไม่สม่ำเสมอoutput_offsets: อาร์เรย์ของออฟเซ็ตแบบไม่สม่ำเสมอในเอาต์พุตของรีพลิกาเป้าหมายrecv_sizes: เทนเซอร์ขนาด recv ที่ไม่สม่ำเสมอ
เทนเซอร์ *_offsets และ *_sizes ทั้งหมดต้องมีรูปร่างเดียวกัน
รองรับ 2 รูปร่างสำหรับเทนเซอร์ *_offsets และ *_sizes ดังนี้
[num_devices]ซึ่งการส่งแบบไม่สม่ำเสมออาจส่งการอัปเดตไปยังอุปกรณ์ระยะไกลแต่ละเครื่องในกลุ่มรีเพล็กซ์ได้สูงสุด 1 รายการ เช่น
for (remote_device_id : replica_group) {
SEND input[input_offsets[remote_device_id]],
output[output_offsets[remote_device_id]],
send_sizes[remote_device_id] }
[num_devices, num_updates]ซึ่งการกระจายข้อมูลแบบไม่สม่ำเสมออาจส่งการอัปเดตได้สูงสุดnum_updatesไปยังอุปกรณ์ระยะไกลเดียวกัน (แต่ละรายการมีออฟเซ็ตต่างกัน) สำหรับอุปกรณ์ระยะไกลแต่ละเครื่องในกลุ่มรีเพล็ก
เช่น
for (remote_device_id : replica_group) {
for (update_idx : num_updates) {
SEND input[input_offsets[remote_device_id][update_idx]],
output[output_offsets[remote_device_id][update_idx]]],
send_sizes[remote_device_id][update_idx] } }
และ
ดูเพิ่มเติม
XlaBuilder::And
ดำเนินการ AND แบบทีละองค์ประกอบของเทนเซอร์ 2 ตัว ได้แก่ lhs และ rhs
And(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ สำหรับ
And(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - and
Async
ดู HloInstruction::CreateAsyncStart
HloInstruction::CreateAsyncUpdate
HloInstruction::CreateAsyncDone ด้วย
AsyncDone, AsyncStart และ AsyncUpdate เป็นคำสั่ง HLO ภายในที่ใช้
สำหรับการดำเนินการแบบไม่พร้อมกันและทำหน้าที่เป็นองค์ประกอบพื้นฐานใน HLO การดำเนินการเหล่านี้อาจปรากฏในข้อมูลที่ดัมพ์ของ HLO แต่ไม่ได้มีไว้ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
Atan2
ดูเพิ่มเติม
XlaBuilder::Atan2
ดำเนินการ atan2 แบบทีละองค์ประกอบใน lhs และ rhs
Atan2(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Atan2 มีตัวแปรทางเลือกที่รองรับการออกอากาศแบบหลายมิติ ดังนี้
Atan2(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - atan2
BatchNormGrad
ดูคำอธิบายโดยละเอียดของอัลกอริทึมได้ที่
XlaBuilder::BatchNormGrad
และเอกสารต้นฉบับเกี่ยวกับการปรับมาตรฐานแบบกลุ่ม
คำนวณการไล่ระดับของ Batch Norm
BatchNormGrad(operand, scale, batch_mean, batch_var, grad_output, epsilon,
feature_index)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp | อาร์เรย์ n มิติที่จะทำให้เป็นปกติ (x) |
scale |
XlaOp | อาร์เรย์ 1 มิติ (\(\gamma\)) |
batch_mean |
XlaOp | อาร์เรย์ 1 มิติ (\(\mu\)) |
batch_var |
XlaOp | อาร์เรย์ 1 มิติ (\(\sigma^2\)) |
grad_output |
XlaOp | การไล่ระดับสีที่ส่งไปยัง BatchNormTraining (\(\nabla y\)) |
epsilon |
float |
ค่า Epsilon (\(\epsilon\)) |
feature_index |
int64 |
ดัชนีเพื่อแสดงมิติข้อมูลใน operand |
สำหรับฟีเจอร์แต่ละรายการในมิติข้อมูลฟีเจอร์ (feature_index คือดัชนีสำหรับ
มิติข้อมูลฟีเจอร์ใน operand) การดำเนินการจะคำนวณการไล่ระดับสีโดยอิงตาม operand, offset และ scale ในมิติข้อมูลอื่นๆ ทั้งหมด feature_index ต้องเป็นดัชนีที่ถูกต้องสำหรับมิติข้อมูลฟีเจอร์ใน operand
การไล่ระดับสีทั้ง 3 แบบกำหนดโดยสูตรต่อไปนี้ (สมมติว่าอาร์เรย์ 4 มิติเป็น operand และมีดัชนีมิติข้อมูลฟีเจอร์ l, ขนาดกลุ่ม m และขนาดเชิงพื้นที่ w และ h)
\[ \begin{split} c_l&= \frac{1}{mwh}\sum_{i=1}^m\sum_{j=1}^w\sum_{k=1}^h \left( \nabla y_{ijkl} \frac{x_{ijkl} - \mu_l}{\sigma^2_l+\epsilon} \right) \\\\ d_l&= \frac{1}{mwh}\sum_{i=1}^m\sum_{j=1}^w\sum_{k=1}^h \nabla y_{ijkl} \\\\ \nabla x_{ijkl} &= \frac{\gamma_{l} }{\sqrt{\sigma^2_{l}+\epsilon} } \left( \nabla y_{ijkl} - d_l - c_l (x_{ijkl} - \mu_{l}) \right) \\\\ \nabla \gamma_l &= \sum_{i=1}^m\sum_{j=1}^w\sum_{k=1}^h \left( \nabla y_{ijkl} \frac{x_{ijkl} - \mu_l}{\sqrt{\sigma^2_{l}+\epsilon} } \right) \\\\\ \nabla \beta_l &= \sum_{i=1}^m\sum_{j=1}^w\sum_{k=1}^h \nabla y_{ijkl} \end{split} \]
อินพุต batch_mean และ batch_var แสดงค่าโมเมนต์ในมิติข้อมูลกลุ่ม
และมิติข้อมูลเชิงพื้นที่
ประเภทเอาต์พุตคือ Tuple ของแฮนเดิล 3 รายการ ดังนี้
| เอาต์พุต | ประเภท | ความหมาย |
|---|---|---|
grad_operand
|
XlaOp | การไล่ระดับสีเทียบกับ
อินพุต operand
(\(\nabla x\)) |
grad_scale
|
XlaOp | การไล่ระดับสีที่เกี่ยวข้องกับ
อินพุต **scale **
(\(\nabla\gamma\)) |
grad_offset
|
XlaOp | การไล่ระดับสีที่เกี่ยวข้องกับ
อินพุต
offset(\(\nabla\beta\)) |
ดูข้อมูล StableHLO ได้ที่ StableHLO - batch_norm_grad
BatchNormInference
ดูคำอธิบายโดยละเอียดของอัลกอริทึมได้ที่
XlaBuilder::BatchNormInference
และเอกสารต้นฉบับเกี่ยวกับการปรับมาตรฐานแบบกลุ่ม
ทำให้อาร์เรย์เป็นมาตรฐานในมิติข้อมูลแบบกลุ่มและเชิงพื้นที่
BatchNormInference(operand, scale, offset, mean, variance, epsilon,
feature_index)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp | อาร์เรย์ n มิติที่จะทำให้เป็นปกติ |
scale |
XlaOp | อาร์เรย์ 1 มิติ |
offset |
XlaOp | อาร์เรย์ 1 มิติ |
mean |
XlaOp | อาร์เรย์ 1 มิติ |
variance |
XlaOp | อาร์เรย์ 1 มิติ |
epsilon |
float |
ค่า Epsilon |
feature_index |
int64 |
ดัชนีเพื่อแสดงมิติข้อมูลใน operand |
สําหรับแต่ละฟีเจอร์ในมิติข้อมูลฟีเจอร์ (feature_index คือดัชนีของ
มิติข้อมูลฟีเจอร์ใน operand) การดําเนินการจะคํานวณค่าเฉลี่ยและความแปรปรวน
ในมิติข้อมูลอื่นๆ ทั้งหมด และใช้ค่าเฉลี่ยและความแปรปรวนเพื่อทําให้แต่ละ
องค์ประกอบใน operand เป็นปกติ feature_index ต้องเป็นดัชนีที่ถูกต้องสำหรับมิติข้อมูลฟีเจอร์ใน operand
BatchNormInference เทียบเท่ากับการเรียกใช้ BatchNormTraining โดยไม่ต้อง
คำนวณ mean และ variance สำหรับแต่ละกลุ่ม โดยจะใช้ข้อมูลนำเข้า mean และ
variance แทนเป็นค่าประมาณ วัตถุประสงค์ของ Op นี้คือการลดเวลาในการตอบสนองในการอนุมาน จึงได้ชื่อว่า BatchNormInference
เอาต์พุตคืออาร์เรย์แบบ n มิติที่ได้รับการทำให้เป็นมาตรฐานซึ่งมีรูปร่างเหมือนกับอินพุต
operand
ดูข้อมูล StableHLO ได้ที่ StableHLO - batch_norm_inference
BatchNormTraining
ดูเพิ่มเติม
XlaBuilder::BatchNormTraining
และthe original batch normalization paper
เพื่อดูคำอธิบายโดยละเอียดของอัลกอริทึม
ทำให้อาร์เรย์เป็นมาตรฐานในมิติข้อมูลแบบกลุ่มและเชิงพื้นที่
BatchNormTraining(operand, scale, offset, epsilon, feature_index)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ n มิติที่จะทำให้เป็นปกติ (x) |
scale |
XlaOp |
อาร์เรย์ 1 มิติ (\(\gamma\)) |
offset |
XlaOp |
อาร์เรย์ 1 มิติ (\(\beta\)) |
epsilon |
float |
ค่า Epsilon (\(\epsilon\)) |
feature_index |
int64 |
ดัชนีเพื่อแสดงมิติข้อมูลใน operand |
สําหรับแต่ละฟีเจอร์ในมิติข้อมูลฟีเจอร์ (feature_index คือดัชนีของ
มิติข้อมูลฟีเจอร์ใน operand) การดําเนินการจะคํานวณค่าเฉลี่ยและความแปรปรวน
ในมิติข้อมูลอื่นๆ ทั้งหมด และใช้ค่าเฉลี่ยและความแปรปรวนเพื่อทําให้แต่ละ
องค์ประกอบใน operand เป็นปกติ feature_index ต้องเป็นดัชนีที่ถูกต้องสำหรับมิติข้อมูลฟีเจอร์ใน operand
อัลกอริทึมมีดังนี้สำหรับแต่ละกลุ่มใน operand \(x\) ที่มีองค์ประกอบ m
ที่มี w และ h เป็นขนาดของมิติเชิงพื้นที่ (สมมติว่า operand
เป็นอาร์เรย์ 4 มิติ)
คำนวณค่าเฉลี่ยของกลุ่ม \(\mu_l\) สำหรับแต่ละฟีเจอร์
lในมิติข้อมูลฟีเจอร์ \(\mu_l=\frac{1}{mwh}\sum_{i=1}^m\sum_{j=1}^w\sum_{k=1}^h x_{ijkl}\)คำนวณความแปรปรวนของกลุ่ม \(\sigma^2_l\): $\sigma^2l=\frac{1}{mwh}\sum{i=1}^m\sum{j=1}^w\sum{k=1}^h (x_{ijkl} - \mu_l)^2$
ปรับให้เป็นมาตรฐาน ปรับขนาด และเลื่อน: \(y_{ijkl}=\frac{\gamma_l(x_{ijkl}-\mu_l)}{\sqrt[2]{\sigma^2_l+\epsilon} }+\beta_l\)
ระบบจะเพิ่มค่าเอปซิลอน ซึ่งมักจะเป็นจำนวนน้อย เพื่อหลีกเลี่ยงข้อผิดพลาดในการหารด้วย 0
ประเภทเอาต์พุตคือ Tuple ของ XlaOp 3 รายการ
| เอาต์พุต | ประเภท | ความหมาย |
|---|---|---|
output
|
XlaOp
|
อาร์เรย์ n มิติที่มีรูปร่างเหมือนกับอินพุต
operand (y) |
batch_mean |
XlaOp |
อาร์เรย์ 1 มิติ (\(\mu\)) |
batch_var |
XlaOp |
อาร์เรย์ 1 มิติ (\(\sigma^2\)) |
batch_mean และ batch_var คือโมเมนต์ที่คํานวณในมิติข้อมูลกลุ่มและมิติข้อมูลเชิงพื้นที่โดยใช้สูตรด้านบน
ดูข้อมูล StableHLO ได้ที่ StableHLO - batch_norm_training
Bitcast
ดูเพิ่มเติม
HloInstruction::CreateBitcast
Bitcast อาจปรากฏในข้อมูลการทิ้ง HLO แต่ไม่ได้มีไว้ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
BitcastConvertType
ดูเพิ่มเติม
XlaBuilder::BitcastConvertType
คล้ายกับ tf.bitcast ใน TensorFlow ซึ่งดำเนินการบิตแคสต์ระดับองค์ประกอบ
จากรูปร่างข้อมูลไปยังรูปร่างเป้าหมาย ขนาดอินพุตและเอาต์พุตต้องตรงกัน เช่น องค์ประกอบ s32 จะกลายเป็นองค์ประกอบ f32 ผ่านรูทีนบิตแคสต์ และองค์ประกอบ s32 หนึ่งรายการจะกลายเป็นองค์ประกอบ s8 สี่รายการ Bitcast ได้รับการติดตั้งใช้งานเป็นการแคสต์ระดับต่ำ ดังนั้นเครื่องที่มีการแทนค่าจุดลอยต่างกันจะให้ผลลัพธ์ที่แตกต่างกัน
BitcastConvertType(operand, new_element_type)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ของประเภท T ที่มีมิติข้อมูล D |
new_element_type |
PrimitiveType |
ประเภท U |
มิติข้อมูลของตัวถูกดำเนินการและรูปร่างเป้าหมายต้องตรงกัน ยกเว้น มิติข้อมูลสุดท้ายซึ่งจะเปลี่ยนตามอัตราส่วนของขนาดดั้งเดิมก่อนและ หลังการแปลง
ประเภทองค์ประกอบต้นทางและปลายทางต้องไม่ใช่ Tuple
ดูข้อมูล StableHLO ได้ที่ StableHLO - bitcast_convert
Bitcast-converting to primitive type of different width
BitcastConvert คำสั่ง HLO รองรับกรณีที่ขนาดของประเภทองค์ประกอบเอาต์พุต
T' ไม่เท่ากับขนาดขององค์ประกอบอินพุต T เนื่องจากการดำเนินการทั้งหมดเป็นแนวคิดการบิตแคสต์และไม่ได้เปลี่ยนไบต์พื้นฐาน
รูปร่างขององค์ประกอบเอาต์พุตจึงต้องเปลี่ยน สำหรับ B = sizeof(T), B' =
sizeof(T') มี 2 กรณีที่อาจเกิดขึ้น
ก่อนอื่น เมื่อ B > B' รูปร่างเอาต์พุตจะมีมิติข้อมูลใหม่ที่เล็กที่สุดซึ่งมีขนาดเป็น
B/B' เช่น
f16[10,2]{1,0} %output = f16[10,2]{1,0} bitcast-convert(f32[10]{0} %input)
กฎสำหรับสเกลาร์ที่มีผลจะยังคงเหมือนเดิม
f16[2]{0} %output = f16[2]{0} bitcast-convert(f32[] %input)
หรือสำหรับ B' > B คำสั่งกำหนดให้มิติข้อมูลเชิงตรรกะสุดท้าย
ของรูปร่างอินพุตต้องเท่ากับ B'/B และระบบจะทิ้งมิติข้อมูลนี้ระหว่าง
การแปลง
f32[10]{0} %output = f32[10]{0} bitcast-convert(f16[10,2]{1,0} %input)
โปรดทราบว่า Conversion ระหว่างบิตความกว้างที่แตกต่างกันไม่ใช่แบบทีละองค์ประกอบ
ประกาศ
ดูเพิ่มเติม
XlaBuilder::Broadcast
เพิ่มมิติข้อมูลลงในอาร์เรย์โดยการทำซ้ำข้อมูลในอาร์เรย์
Broadcast(operand, broadcast_sizes)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ที่จะทำซ้ำ |
broadcast_sizes |
ArraySlice<int64> |
ขนาดของมิติข้อมูลใหม่ |
ระบบจะแทรกมิติข้อมูลใหม่ทางด้านซ้าย กล่าวคือ หาก broadcast_sizes มีค่า {a0, ..., aN} และรูปร่างตัวถูกดำเนินการมีมิติข้อมูล {b0, ..., bM} รูปร่างของเอาต์พุตจะมีมิติข้อมูล {a0, ..., aN, b0, ..., bM}
ดัชนีมิติข้อมูลใหม่จะอยู่ในสำเนาของตัวถูกดำเนินการ กล่าวคือ
output[i0, ..., iN, j0, ..., jM] = operand[j0, ..., jM]
เช่น หาก operand เป็นสเกลาร์ f32 ที่มีค่า 2.0f และ
broadcast_sizes เป็น {2, 3} ผลลัพธ์จะเป็นอาร์เรย์ที่มีรูปร่าง
f32[2, 3] และค่าทั้งหมดในผลลัพธ์จะเป็น 2.0f
ดูข้อมูล StableHLO ได้ที่ StableHLO - broadcast
BroadcastInDim
ดูเพิ่มเติม
XlaBuilder::BroadcastInDim
ขยายขนาดและจำนวนมิติข้อมูลของอาร์เรย์โดยการทำซ้ำข้อมูล ในอาร์เรย์
BroadcastInDim(operand, out_dim_size, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ที่จะทำซ้ำ |
out_dim_size
|
ArraySlice<int64>
|
ขนาดของมิติข้อมูล ของรูปร่างเป้าหมาย |
broadcast_dimensions
|
ArraySlice<int64>
|
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
คล้ายกับการออกอากาศ แต่ช่วยให้เพิ่มมิติข้อมูลได้ทุกที่และขยาย มิติข้อมูลที่มีอยู่ด้วยขนาด 1
ระบบจะออกอากาศ operand ไปยังรูปร่างที่อธิบายโดย out_dim_size
broadcast_dimensions จะแมปมิติข้อมูลของ operand กับมิติข้อมูลของ
รูปร่างเป้าหมาย กล่าวคือ มิติข้อมูลที่ i ของตัวถูกดำเนินการจะแมปกับมิติข้อมูลที่
broadcast_dimension[i] ของรูปร่างเอาต์พุต มิติข้อมูลของ
operand ต้องมีขนาด 1 หรือมีขนาดเท่ากับมิติข้อมูลในเอาต์พุต
รูปร่างที่แมป ส่วนมิติข้อมูลที่เหลือจะเติมด้วยมิติข้อมูลที่มี
ขนาด 1 จากนั้นการออกอากาศที่มีมิติที่ลดทอนจะออกอากาศตามมิติที่ลดทอนเหล่านี้
เพื่อให้ได้รูปร่างเอาต์พุต ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
โทร
ดูเพิ่มเติม
XlaBuilder::Call
เรียกใช้การคำนวณด้วยอาร์กิวเมนต์ที่ระบุ
Call(computation, operands...)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
computation
|
XlaComputation
|
การคำนวณประเภท T_0, T_1, ...,
T_{N-1} -> S ที่มีพารามิเตอร์ N ประเภท
โดยพลการ |
operands |
ลำดับของ N XlaOps |
อาร์กิวเมนต์ N ประเภทใดก็ได้ |
Arity และประเภทของ operands ต้องตรงกับพารามิเตอร์ของ
computation คุณไม่จำเป็นต้องมี operands
CompositeCall
ดูเพิ่มเติม
XlaBuilder::CompositeCall
แคปซูลการดำเนินการที่ประกอบด้วยการดำเนินการ StableHLO อื่นๆ โดยรับอินพุตและ composite_attributes และสร้างผลลัพธ์ ความหมายของ ตัวดำเนินการจะได้รับการติดตั้งใช้งานโดยแอตทริบิวต์การแยกส่วน สามารถแทนที่การดำเนินการแบบคอมโพสิตด้วยการแยกย่อยโดยไม่เปลี่ยนความหมายของโปรแกรม ในกรณีที่การแทรกการแยกย่อยไม่ได้ให้ความหมายของ Op เดียวกัน ให้ใช้ custom_call
ฟิลด์เวอร์ชัน (ค่าเริ่มต้นคือ 0) ใช้เพื่อระบุเมื่อมีการเปลี่ยนแปลงความหมายของคอมโพสิต
การดำเนินการนี้จะใช้เป็น kCall ที่มีแอตทริบิวต์ is_composite=true ฟิลด์
decomposition จะระบุโดยแอตทริบิวต์ computation แอตทริบิวต์ส่วนหน้า
จะจัดเก็บแอตทริบิวต์ที่เหลือซึ่งมีคำนำหน้าเป็น composite.
ตัวอย่างการดำเนินการ CompositeCall
f32[] call(f32[] %cst), to_apply=%computation, is_composite=true,
frontend_attributes = {
composite.name="foo.bar",
composite.attributes={n = 1 : i32, tensor = dense<1> : tensor<i32>},
composite.version="1"
}
CompositeCall(computation, operands..., name, attributes, version)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
computation
|
XlaComputation
|
การคำนวณประเภท T_0, T_1, ...,
T_{N-1} -> S ที่มีพารามิเตอร์ N ประเภท
โดยพลการ |
operands |
ลำดับของ N XlaOps |
จำนวนค่าที่เปลี่ยนแปลงได้ |
name |
string |
ชื่อของคอมโพสิต |
attributes
|
ไม่บังคับ string
|
พจนานุกรมของแอตทริบิวต์ที่แปลงเป็นสตริง (ไม่บังคับ) |
version
|
ไม่บังคับ int64
|
หมายเลขเป็นเวอร์ชันที่อัปเดตเป็น ความหมายของ Op แบบผสม |
decomposition ของการดำเนินการไม่ใช่ฟิลด์ที่เรียกว่า แต่จะปรากฏเป็นแอตทริบิวต์ to_apply
ซึ่งชี้ไปยังฟังก์ชันที่มีการใช้งานระดับล่างกว่า
นั่นคือ to_apply=%funcname
ดูข้อมูลเพิ่มเติมเกี่ยวกับการรวมและการแยกย่อยได้ที่ข้อกำหนด StableHLO
Cbrt
ดูเพิ่มเติม
XlaBuilder::Cbrt
การดำเนินการรากที่สามแบบทีละองค์ประกอบ x -> cbrt(x)
Cbrt(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Cbrt ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Cbrt(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - cbrt
เพดาน
ดูเพิ่มเติม
XlaBuilder::Ceil
ฟังก์ชันเพดานแบบองค์ประกอบต่อองค์ประกอบ x -> ⌈x⌉
Ceil(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - ceil
Cholesky
ดูเพิ่มเติม
XlaBuilder::Cholesky
คำนวณ การแยกตัวประกอบ Cholesky ของเมทริกซ์บวกแน่นอนแบบสมมาตร (Hermitian)
Cholesky(a, lower)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
a
|
XlaOp
|
อาร์เรย์ของประเภทเชิงซ้อนหรือประเภททศนิยมที่มีมิติ > 2 |
lower |
bool |
ว่าจะใช้สามเหลี่ยมด้านบนหรือด้านล่างของ a |
หาก lower เป็น true จะคำนวณเมทริกซ์สามเหลี่ยมล่าง l โดยที่ $a = l .
l^T$. If lower is false, computes upper-triangular matrices u such that
\(a = u^T . u\).
ระบบจะอ่านข้อมูลอินพุตจากสามเหลี่ยมล่าง/บนของ a เท่านั้น โดยขึ้นอยู่กับค่าของ lower ระบบจะไม่สนใจค่าจากสามเหลี่ยมอีกรูป ข้อมูลเอาต์พุตจะ
แสดงในสามเหลี่ยมเดียวกัน ส่วนค่าในสามเหลี่ยมอีกด้านหนึ่งจะ
ขึ้นอยู่กับการติดตั้งใช้งานและอาจเป็นค่าใดก็ได้
หาก a มีมิติข้อมูลมากกว่า 2 รายการ ระบบจะถือว่า a เป็นกลุ่มเมทริกซ์
โดยที่มิติข้อมูลทั้งหมด ยกเว้นมิติข้อมูล 2 รายการย่อย เป็นมิติข้อมูลกลุ่ม
หาก a ไม่ใช่เมทริกซ์สมมาตร (Hermitian) ที่เป็นบวกแน่นอน ผลลัพธ์จะขึ้นอยู่กับการใช้งาน
ดูข้อมูล StableHLO ได้ที่ StableHLO - cholesky
เครื่องมือบีบอัด
ดูเพิ่มเติม
XlaBuilder::Clamp
จำกัดตัวถูกดำเนินการให้อยู่ในช่วงระหว่างค่าต่ำสุดและสูงสุด
Clamp(min, operand, max)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
min |
XlaOp |
อาร์เรย์ของประเภท T |
operand |
XlaOp |
อาร์เรย์ของประเภท T |
max |
XlaOp |
อาร์เรย์ของประเภท T |
เมื่อระบุตัวถูกดำเนินการ ค่าต่ำสุด และค่าสูงสุด ฟังก์ชันจะแสดงผลตัวถูกดำเนินการหากอยู่ในช่วงระหว่างค่าต่ำสุดและค่าสูงสุด หรือแสดงผลค่าต่ำสุดหากตัวถูกดำเนินการต่ำกว่าช่วงนี้ หรือแสดงผลค่าสูงสุดหากตัวถูกดำเนินการสูงกว่าช่วงนี้ นั่นคือ clamp(a, x, b) = min(max(a, x), b)
อาร์เรย์ทั้ง 3 ต้องมีรูปร่างเหมือนกัน หรือในรูปแบบที่จำกัดของการออกอากาศ min และ/หรือ max อาจเป็นสเกลาร์ของประเภท T
ตัวอย่างที่มีสเกลาร์ min และ max
let operand: s32[3] = {-1, 5, 9};
let min: s32 = 0;
let max: s32 = 6;
==>
Clamp(min, operand, max) = s32[3]{0, 5, 6};
ดูข้อมูล StableHLO ได้ที่ StableHLO - clamp
ยุบ
ดูเพิ่มเติม
XlaBuilder::Collapse
และtf.reshape
ยุบมิติข้อมูลของอาร์เรย์เป็นมิติข้อมูลเดียว
Collapse(operand, dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ของประเภท T |
dimensions |
int64 เวกเตอร์ |
ชุดย่อยของมิติข้อมูลของ T ที่เรียงตามลำดับและต่อเนื่องกัน |
Collapse จะแทนที่เซ็ตย่อยของมิติข้อมูลของตัวถูกดำเนินการด้วยมิติข้อมูลเดียว
อาร์กิวเมนต์อินพุตคืออาร์เรย์ที่กำหนดเองของประเภท T และเวกเตอร์ค่าคงที่ที่คอมไพล์ในเวลาเรียกใช้ของดัชนีมิติข้อมูล ดัชนีมิติข้อมูลต้องเป็น
ชุดย่อยต่อเนื่องของมิติข้อมูลของ T
ตามลำดับ (หมายเลขมิติข้อมูลจากต่ำไปสูง) ดังนั้น {0, 1, 2}, {0, 1} หรือ {1, 2} จึงเป็นชุดมิติข้อมูลที่ถูกต้องทั้งหมด แต่ {1, 0} หรือ {0, 2} ไม่ถูกต้อง ระบบจะแทนที่ด้วยมิติข้อมูลใหม่รายการเดียวใน
ตำแหน่งเดียวกันในลําดับมิติข้อมูลกับมิติข้อมูลที่แทนที่ โดยมี
ขนาดมิติข้อมูลใหม่เท่ากับผลคูณของขนาดมิติข้อมูลเดิม หมายเลขมิติข้อมูลที่ต่ำที่สุดใน dimensions คือมิติข้อมูลที่มีการเปลี่ยนแปลงช้าที่สุด (สำคัญที่สุด)
ในลูปที่ซ้อนกันซึ่งยุบมิติข้อมูลเหล่านี้ และหมายเลขมิติข้อมูลที่สูงที่สุด
คือมิติข้อมูลที่มีการเปลี่ยนแปลงเร็วที่สุด (เล็กที่สุด) ดูตัวดำเนินการ tf.reshape หากต้องการ
การจัดลำดับการยุบข้อมูลทั่วไปเพิ่มเติม
ตัวอย่างเช่น สมมติว่า v เป็นอาร์เรย์ที่มี 24 องค์ประกอบ
let v = f32[4x2x3] { { {10, 11, 12}, {15, 16, 17} },
{ {20, 21, 22}, {25, 26, 27} },
{ {30, 31, 32}, {35, 36, 37} },
{ {40, 41, 42}, {45, 46, 47} } };
// Collapse to a single dimension, leaving one dimension.
let v012 = Collapse(v, {0,1,2});
then v012 == f32[24] {10, 11, 12, 15, 16, 17,
20, 21, 22, 25, 26, 27,
30, 31, 32, 35, 36, 37,
40, 41, 42, 45, 46, 47};
// Collapse the two lower dimensions, leaving two dimensions.
let v01 = Collapse(v, {0,1});
then v01 == f32[4x6] { {10, 11, 12, 15, 16, 17},
{20, 21, 22, 25, 26, 27},
{30, 31, 32, 35, 36, 37},
{40, 41, 42, 45, 46, 47} };
// Collapse the two higher dimensions, leaving two dimensions.
let v12 = Collapse(v, {1,2});
then v12 == f32[8x3] { {10, 11, 12},
{15, 16, 17},
{20, 21, 22},
{25, 26, 27},
{30, 31, 32},
{35, 36, 37},
{40, 41, 42},
{45, 46, 47} };
Clz
ดูเพิ่มเติม
XlaBuilder::Clz
นับเลข 0 นำหน้าแบบทีละองค์ประกอบ
Clz(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
CollectiveBroadcast
ดูเพิ่มเติม
XlaBuilder::CollectiveBroadcast
กระจายข้อมูลไปยังรีพลิกาทั้งหมด ระบบจะส่งข้อมูลจากรหัสสำเนาแรกในแต่ละกลุ่มไปยังรหัสอื่นๆ ในกลุ่มเดียวกัน หากรหัสรีพลิกาไม่ได้อยู่ในกลุ่มรีพลิกาใดๆ เอาต์พุตในรีพลิกานั้นจะเป็นเทนเซอร์ที่ประกอบด้วย 0 ใน shape
CollectiveBroadcast(operand, replica_groups, channel_id)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
replica_groups
|
ReplicaGroupเวกเตอร์
|
แต่ละกลุ่มจะมีรายการ รหัสรีเพลส |
channel_id
|
ไม่บังคับ ChannelHandle
|
ตัวระบุที่ไม่ซ้ำกันสำหรับคู่ส่ง/รับแต่ละคู่ |
ดูข้อมูล StableHLO ได้ที่ StableHLO - collective_broadcast
CollectivePermute
ดูเพิ่มเติม
XlaBuilder::CollectivePermute
CollectivePermute เป็นการดำเนินการแบบกลุ่มที่ส่งและรับข้อมูลในรีพลิกา
CollectivePermute(operand, source_target_pairs, channel_id, inplace)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์อินพุต n มิติ |
source_target_pairs
|
<int64, int64> เวกเตอร์
|
รายการคู่ (source_replica_id, target_replica_id) สำหรับแต่ละคู่ ระบบจะส่ง ตัวถูกดำเนินการจาก สำเนาต้นทางไปยัง สำเนาเป้าหมาย |
channel_id
|
ไม่บังคับ ChannelHandle
|
รหัสช่องที่ไม่บังคับสำหรับการสื่อสาร ข้ามโมดูล |
inplace
|
ไม่บังคับ bool
|
ระบุว่าควรดำเนินการสับเปลี่ยนที่ตำแหน่งเดิมหรือไม่ |
โปรดทราบว่าsource_target_pairs มีข้อจำกัดต่อไปนี้
- คู่ใดๆ 2 คู่ไม่ควรมีรหัสรีเพลสเป้าหมายเดียวกัน และไม่ควรมีรหัสรีเพลสต้นทางเดียวกัน
- หากรหัสรีพลิกาไม่ใช่เป้าหมายในคู่ใดๆ เอาต์พุตในรีพลิกานั้น จะเป็นเทนเซอร์ที่ประกอบด้วย 0 ที่มีรูปร่างเหมือนกับอินพุต
API ของการดำเนินการ CollectivePermute จะแยกออกเป็นคำสั่ง HLO 2 รายการภายใน (CollectivePermuteStart และ CollectivePermuteDone)
ดูเพิ่มเติม
HloInstruction::CreateCollectivePermuteStart
CollectivePermuteStart และ CollectivePermuteDone ทำหน้าที่เป็นองค์ประกอบพื้นฐานใน HLO
การดำเนินการเหล่านี้อาจปรากฏในข้อมูลการทิ้ง HLO แต่ไม่ได้มีไว้ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
ดูข้อมูล StableHLO ได้ที่ StableHLO - collective_permute
เปรียบเทียบ
ดูเพิ่มเติม
XlaBuilder::Compare
ดำเนินการเปรียบเทียบแบบทีละองค์ประกอบของ lhs และ rhs ของรายการต่อไปนี้
Eq
ดูเพิ่มเติม
XlaBuilder::Eq
ทำการเปรียบเทียบเท่ากับแบบทีละองค์ประกอบของ lhs และ rhs
\(lhs = rhs\)
Eq(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ สำหรับ Eq ดังนี้
Eq(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
รองรับยอดสั่งซื้อทั้งหมดที่มากกว่าจำนวนทศนิยมสำหรับ Eq โดยการบังคับใช้สิ่งต่อไปนี้
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
EqTotalOrder(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - เปรียบเทียบ
Ne
ดูเพิ่มเติม
XlaBuilder::Ne
ดำเนินการเปรียบเทียบไม่เท่ากับแบบทีละองค์ประกอบของ lhs และ rhs
\(lhs != rhs\)
Ne(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
สำหรับ Ne จะมีตัวเลือกอื่นที่รองรับการออกอากาศแบบหลายมิติ
Ne(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
รองรับยอดสั่งซื้อทั้งหมดที่มากกว่าจำนวนจุดลอยตัวสำหรับ Ne โดย บังคับใช้ดังนี้
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
NeTotalOrder(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - เปรียบเทียบ
Ge
ดูเพิ่มเติม
XlaBuilder::Ge
ดำเนินการเปรียบเทียบgreater-or-equal-thanแบบทีละองค์ประกอบของ lhs และ rhs
\(lhs >= rhs\)
Ge(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
สำหรับ Ge จะมีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ
Ge(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
รองรับคำสั่งซื้อทั้งหมดที่มากกว่าตัวเลขทศนิยมสำหรับ Gt โดยการบังคับใช้สิ่งต่อไปนี้
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
GtTotalOrder(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - เปรียบเทียบ
Gt
ดูเพิ่มเติม
XlaBuilder::Gt
เปรียบเทียบ lhs กับ rhs แบบทีละองค์ประกอบโดยใช้ตัวดำเนินการมากกว่า
\(lhs > rhs\)
Gt(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Gt มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ
Gt(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - เปรียบเทียบ
Le
ดูเพิ่มเติม
XlaBuilder::Le
ทำการเปรียบเทียบless-or-equal-thanแบบทีละองค์ประกอบของ lhs และ rhs
\(lhs <= rhs\)
Le(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Le มีเวอร์ชันอื่นที่รองรับการออกอากาศแบบหลายมิติ
Le(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
รองรับคำสั่งซื้อทั้งหมดที่มากกว่าจำนวนจุดทศนิยมสำหรับ Le โดยการบังคับใช้สิ่งต่อไปนี้
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
LeTotalOrder(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - เปรียบเทียบ
Lt
ดูเพิ่มเติม
XlaBuilder::Lt
ดำเนินการเปรียบเทียบแบบองค์ประกอบต่อองค์ประกอบของ lhs และ rhs โดยใช้ฟังก์ชันน้อยกว่า
\(lhs < rhs\)
Lt(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ สำหรับ Lt ดังนี้
Lt(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
รองรับคำสั่งซื้อทั้งหมดที่มากกว่าตัวเลขทศนิยมสำหรับ Lt โดยการบังคับใช้สิ่งต่อไปนี้
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
LtTotalOrder(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - เปรียบเทียบ
ซับซ้อน
ดูเพิ่มเติม
XlaBuilder::Complex
ทำการแปลงค่าแบบทีละองค์ประกอบเป็นค่าเชิงซ้อนจากคู่ค่าจริงและค่าจินตภาพ lhs และ rhs
Complex(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Complex มีตัวเลือกอื่นที่รองรับการออกอากาศแบบหลายมิติ
Complex(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - complex
ConcatInDim (เชื่อมต่อ)
ดูเพิ่มเติม
XlaBuilder::ConcatInDim
Concatenate จะสร้างอาร์เรย์จากตัวถูกดำเนินการที่เป็นอาร์เรย์หลายรายการ อาร์เรย์มีจำนวนมิติข้อมูลเท่ากับตัวถูกดำเนินการของอาร์เรย์อินพุตแต่ละตัว (ซึ่งต้องมีจำนวนมิติข้อมูลเท่ากัน) และมีอาร์กิวเมนต์ตามลำดับที่ระบุ
Concatenate(operands..., dimension)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operands
|
ลำดับของ N XlaOp
|
อาร์เรย์ N ประเภท T ที่มีมิติข้อมูล [L0, L1, ...]. ต้องมี N >= 1 |
dimension
|
int64
|
ค่าในช่วง [0, N) ที่
ตั้งชื่อมิติข้อมูลที่จะต่อกัน
ระหว่าง operands |
มิติข้อมูลทั้งหมดต้องเหมือนกัน ยกเว้น dimension เนื่องจาก XLA ไม่รองรับอาร์เรย์ "ไม่สม่ำเสมอ" นอกจากนี้ โปรดทราบว่าคุณจะต่อค่า 0 มิติไม่ได้ (เนื่องจากตั้งชื่อมิติข้อมูลที่ใช้ต่อไม่ได้)
ตัวอย่าง 1 มิติ
Concat({ {2, 3}, {4, 5}, {6, 7} }, 0)
//Output: {2, 3, 4, 5, 6, 7}
ตัวอย่าง 2 มิติ
let a = { {1, 2},
{3, 4},
{5, 6} };
let b = { {7, 8} };
Concat({a, b}, 0)
//Output: { {1, 2},
// {3, 4},
// {5, 6},
// {7, 8} }
แผนภาพ

ดูข้อมูล StableHLO ได้ที่ StableHLO - concatenate
มีเงื่อนไข
ดูเพิ่มเติม
XlaBuilder::Conditional
Conditional(predicate, true_operand, true_computation, false_operand,
false_computation)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
predicate |
XlaOp |
สเกลาร์ของประเภท PRED |
true_operand |
XlaOp |
อาร์กิวเมนต์ของประเภท \(T_0\) |
true_computation |
XlaComputation |
XlaComputation ของประเภท \(T_0 \to S\) |
false_operand |
XlaOp |
อาร์กิวเมนต์ของประเภท \(T_1\) |
false_computation |
XlaComputation |
XlaComputation ของประเภท \(T_1 \to S\) |
เรียกใช้ true_computation หาก predicate เป็น true, false_computation หาก predicate เป็น false และแสดงผลลัพธ์
true_computation ต้องรับอาร์กิวเมนต์เดียวประเภท \(T_0\) และจะ
เรียกใช้ด้วย true_operand ซึ่งต้องเป็นประเภทเดียวกัน false_computation ต้องรับอาร์กิวเมนต์เดียวประเภท \(T_1\) และจะเรียกใช้ด้วย false_operand ซึ่งต้องเป็นประเภทเดียวกัน ประเภทของ
ค่าที่แสดงผลของ true_computation และ false_computation ต้องเหมือนกัน
โปรดทราบว่าระบบจะเรียกใช้ true_computation หรือ false_computation เพียงอย่างเดียว
โดยขึ้นอยู่กับค่าของ predicate
Conditional(branch_index, branch_computations, branch_operands)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
branch_index |
XlaOp |
สเกลาร์ของประเภท S32 |
branch_computations |
ลำดับของ N XlaComputation |
XlaComputations ของประเภท \(T_0 \to S , T_1 \to S , ..., T_{N-1} \to S\) |
branch_operands |
ลำดับของ N XlaOp |
อาร์กิวเมนต์ของประเภท \(T_0 , T_1 , ..., T_{N-1}\) |
เรียกใช้ branch_computations[branch_index] และแสดงผลลัพธ์ หาก
branch_index เป็น S32 ซึ่งมีค่าน้อยกว่า 0 หรือมากกว่าหรือเท่ากับ N ระบบจะเรียกใช้ branch_computations[N-1]
เป็นกิ่งก้านเริ่มต้น
branch_computations[b] แต่ละรายการต้องรับอาร์กิวเมนต์เดียวของประเภท \(T_b\) และ
จะเรียกใช้ด้วย branch_operands[b] ซึ่งต้องเป็นประเภทเดียวกัน
ประเภทของค่าที่แสดงผลของแต่ละ branch_computations[b] ต้องเหมือนกัน
โปรดทราบว่าระบบจะเรียกใช้เพียง 1 รายการใน branch_computations โดยขึ้นอยู่กับค่าของ branch_index
ดูข้อมูล StableHLO ได้ที่ StableHLO - if
ค่าคงที่
ดูเพิ่มเติม
XlaBuilder::ConstantLiteral
สร้าง output จากค่าคงที่ literal
Constant(literal)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
literal |
LiteralSlice |
มุมมองคงที่ของ Literal ที่มีอยู่ |
ดูข้อมูล StableHLO ได้ที่ StableHLO - constant
ConvertElementType
ดูเพิ่มเติม
XlaBuilder::ConvertElementType
ConvertElementType จะดำเนินการแปลงทีละองค์ประกอบจากรูปร่างข้อมูลไปยังรูปร่างเป้าหมาย
เช่นเดียวกับ static_cast ใน C++
มิติข้อมูลต้องตรงกัน และ Conversion เป็นแบบทีละองค์ประกอบ เช่น s32
องค์ประกอบจะกลายเป็น f32 องค์ประกอบผ่านกิจวัตรการแปลงจาก s32 เป็น f32
ConvertElementType(operand, new_element_type)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ของประเภท T ที่มีมิติข้อมูล D |
new_element_type |
PrimitiveType |
ประเภท U |
มิติข้อมูลของตัวถูกดำเนินการและรูปร่างเป้าหมายต้องตรงกัน ประเภทองค์ประกอบต้นทางและปลายทางต้องไม่ใช่ Tuple
Conversion เช่น T=s32 เป็น U=f32 จะเรียกใช้การแปลง int เป็น float
ตามปกติ เช่น การปัดเศษเป็นจำนวนคู่ที่ใกล้ที่สุด
let a: s32[3] = {0, 1, 2};
let b: f32[3] = convert(a, f32);
then b == f32[3]{0.0, 1.0, 2.0}
ดูข้อมูล StableHLO ได้ที่StableHLO - convert
Conv (Convolution)
ดูเพิ่มเติม
XlaBuilder::Conv
คำนวณการสังวัตนาการประเภทที่ใช้ในโครงข่ายประสาทเทียม ในที่นี้ เราอาจมองว่าการสังวัตนาการ คือหน้าต่าง n มิติที่เคลื่อนที่ผ่านพื้นที่ฐาน n มิติ และมีการคำนวณสำหรับตำแหน่งที่เป็นไปได้ทั้งหมดของหน้าต่าง
Conv จัดคิวคำสั่งการแปลงเป็นภาพลงในการคำนวณ ซึ่งใช้
หมายเลขมิติข้อมูลการแปลงเป็นภาพเริ่มต้นโดยไม่มีการขยาย
โดยจะระบุการเพิ่มแพดดิ้งในรูปแบบย่อเป็น SAME หรือ VALID การเพิ่มแพดดิ้ง SAME
จะเพิ่มค่า 0 ให้กับอินพุต (lhs) เพื่อให้เอาต์พุตมีรูปร่างเหมือนกับอินพุต
เมื่อไม่พิจารณาการก้าวกระโดด VALID padding หมายถึง
ไม่มีการเพิ่มระยะห่างจากขอบ
Conv(lhs, rhs, window_strides, padding, feature_group_count,
batch_group_count, precision_config, preferred_element_type)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
lhs
|
XlaOp
|
อาร์เรย์ (n+2) มิติของ อินพุต |
rhs
|
XlaOp
|
อาร์เรย์ (n+2) มิติของ น้ำหนักเคอร์เนล |
window_strides |
ArraySlice<int64> |
อาร์เรย์ n มิติของระยะก้าวกระโดดของเคอร์เนล |
padding |
Padding |
enum ของการเว้นวรรค |
feature_group_count
|
int64 | จำนวนกลุ่มฟีเจอร์ |
batch_group_count |
int64 | จำนวนกลุ่มแบทช์ |
precision_config
|
ไม่บังคับ
PrecisionConfig |
enum สำหรับระดับความแม่นยำ |
preferred_element_type
|
ไม่บังคับ
PrimitiveType |
enum ของประเภทองค์ประกอบสเกลาร์ |
Conv มีการควบคุมในระดับต่างๆ ดังนี้
ให้ n เป็นจำนวนมิติเชิงพื้นที่ อาร์กิวเมนต์ lhs คืออาร์เรย์ (n+2) มิติที่อธิบายพื้นที่ฐาน ซึ่งเรียกว่าอินพุต
แม้ว่าแน่นอนว่า rhs ก็เป็นอินพุตด้วย ในโครงข่ายประสาทเทียม สิ่งเหล่านี้คือ
การเปิดใช้งานอินพุต มิติข้อมูล n+2 ตามลำดับมีดังนี้
batch: พิกัดแต่ละรายการในมิติข้อมูลนี้แสดงอินพุตอิสระ ซึ่งใช้ดำเนินการ Convolutionz/depth/features: ตำแหน่ง (y,x) แต่ละตำแหน่งในพื้นที่ฐานมีเวกเตอร์ ที่เชื่อมโยงอยู่ ซึ่งจะอยู่ในมิติข้อมูลนี้spatial_dims: อธิบายnมิติเชิงพื้นที่ที่กำหนดพื้นที่ฐาน ซึ่งหน้าต่างเคลื่อนที่ผ่าน
อาร์กิวเมนต์ rhs คืออาร์เรย์ (n+2) มิติที่อธิบายตัวกรอง/เคอร์เนล/หน้าต่าง
การแปลง มิติข้อมูลเรียงตามลำดับต่อไปนี้
output-z: มิติข้อมูลzของเอาต์พุตinput-z: ขนาดของมิติข้อมูลนี้คูณด้วยfeature_group_countควร เท่ากับขนาดของมิติข้อมูลzใน lhsspatial_dims: อธิบายnมิติเชิงพื้นที่ที่กำหนดหน้าต่าง n-d ซึ่งเคลื่อนที่ไปทั่วพื้นที่ฐาน
อาร์กิวเมนต์ window_strides จะระบุระยะก้าวกระโดดของหน้าต่างการแปลง
ในมิติเชิงพื้นที่ ตัวอย่างเช่น หากระยะก้าวย่างในมิติเชิงพื้นที่แรกคือ 3 ระบบจะวางหน้าต่างได้เฉพาะที่พิกัดซึ่งดัชนีเชิงพื้นที่แรกหารด้วย 3 ลงตัว
อาร์กิวเมนต์ padding ระบุจำนวนการเพิ่ม 0 ที่จะใช้กับ
พื้นที่ฐาน จำนวนการเพิ่มขอบอาจเป็นค่าลบได้ โดยค่าสัมบูรณ์ของการเพิ่มขอบที่เป็นค่าลบจะระบุจำนวนองค์ประกอบที่จะนำออกจากมิติข้อมูลที่ระบุก่อนทำการ Convolution padding[0] ระบุระยะขอบสำหรับมิติข้อมูล y และ padding[1] ระบุระยะขอบสำหรับมิติข้อมูล x แต่ละคู่มีระยะเว้นต่ำเป็นองค์ประกอบแรกและระยะเว้นสูงเป็นองค์ประกอบที่สอง ระบบจะใช้การเว้นวรรคต่ำในทิศทางของดัชนีที่ต่ำกว่า ส่วนการเว้นวรรคสูงจะใช้ในทิศทางของดัชนีที่สูงกว่า เช่น หาก
padding[1] เป็น (2,3) จะมีการเพิ่ม 0 จำนวน 2 ตัวทางด้านซ้ายและ
0 จำนวน 3 ตัวทางด้านขวาในมิติเชิงพื้นที่ที่ 2 การใช้การเพิ่มระยะห่างจากขอบ
เทียบเท่ากับการแทรกค่าศูนย์เดียวกันเหล่านั้นลงในอินพุต (lhs) ก่อน
ทำการสังวัตนาการ
อาร์กิวเมนต์ lhs_dilation และ rhs_dilation จะระบุปัจจัยการขยายที่จะใช้กับ lhs และ rhs ตามลำดับในแต่ละมิติเชิงพื้นที่ หาก
dilation factor ในมิติเชิงพื้นที่คือ d จะมีการวางรู d-1 โดยนัย
ระหว่างแต่ละรายการในมิตินั้น ซึ่งจะเพิ่มขนาดของ
อาร์เรย์ โดยจะเติมค่าที่ไม่มีการดำเนินการลงในช่องว่าง ซึ่งสำหรับการ Convolution จะหมายถึง
ค่า 0
การขยาย rhs เรียกอีกอย่างว่าการสังวัตน์แบบ Atrous ดูรายละเอียดเพิ่มเติมได้ที่
tf.nn.atrous_conv2d การขยายของ lhs เรียกอีกอย่างว่า
การแปลงผกผัน ดูรายละเอียดเพิ่มเติมได้ที่ tf.nn.conv2d_transpose
อาร์กิวเมนต์ feature_group_count (ค่าเริ่มต้นคือ 1) ใช้ได้กับการ
Convolution แบบจัดกลุ่ม feature_group_count ต้องเป็นตัวหารของทั้งมิติข้อมูลอินพุตและ
มิติข้อมูลฟีเจอร์เอาต์พุต หาก feature_group_count มากกว่า 1 แสดงว่ามิติข้อมูลฟีเจอร์อินพุตและเอาต์พุต รวมถึงมิติข้อมูลฟีเจอร์เอาต์พุต rhs
จะแบ่งออกเป็นหลายกลุ่ม feature_group_count
อย่างเท่าๆ กัน โดยแต่ละกลุ่มประกอบด้วยลำดับย่อยของฟีเจอร์ที่ต่อเนื่องกัน มิติข้อมูลฟีเจอร์อินพุตของ rhs ต้องเท่ากับมิติข้อมูลฟีเจอร์อินพุตของ lhs หารด้วย feature_group_count (ดังนั้นจึงมีขนาดเท่ากับกลุ่มฟีเจอร์อินพุตอยู่แล้ว) กลุ่มที่ i จะใช้ร่วมกันเพื่อคำนวณ
feature_group_countสำหรับการผสานหลายรายการแยกกัน ผลลัพธ์ของการ
Convolutions เหล่านี้จะต่อกันในมิติข้อมูลฟีเจอร์เอาต์พุต
สำหรับการผันแปรแบบแยกความลึก ระบบจะตั้งค่าอาร์กิวเมนต์ feature_group_count เป็นมิติข้อมูลฟีเจอร์อินพุต และจะเปลี่ยนรูปร่างตัวกรองจาก
[filter_height, filter_width, in_channels, channel_multiplier] เป็น
[filter_height, filter_width, 1, in_channels * channel_multiplier] ดูรายละเอียดเพิ่มเติมได้ที่ tf.nn.depthwise_conv2d
อาร์กิวเมนต์ batch_group_count (ค่าเริ่มต้นคือ 1) สามารถใช้กับตัวกรองที่จัดกลุ่ม
ระหว่างการส่งผ่านข้อมูลย้อนกลับ batch_group_count ต้องเป็นตัวหารของขนาดมิติข้อมูลกลุ่ม lhs (อินพุต) หาก batch_group_count มากกว่า 1 แสดงว่ามิติข้อมูลกลุ่มเอาต์พุตควรมีขนาด input batch
/ batch_group_count batch_group_count ต้องเป็นตัวหารของขนาดฟีเจอร์เอาต์พุต
รูปร่างเอาต์พุตมีมิติข้อมูลต่อไปนี้ตามลำดับ
batch: ขนาดของมิติข้อมูลนี้คูณด้วยbatch_group_countควรเท่ากับขนาดของมิติข้อมูลbatchใน lhsz: มีขนาดเท่ากับoutput-zในเคอร์เนล (rhs)spatial_dims: ค่า 1 ค่าสำหรับตําแหน่งที่ถูกต้องแต่ละตําแหน่งของหน้าต่าง Convolutional
รูปภาพด้านบนแสดงวิธีการทำงานของช่อง batch_group_count กล่าวคือ เราจะแบ่งกลุ่มแบตช์ lhs แต่ละรายการออกเป็น batch_group_count กลุ่ม และทำเช่นเดียวกันกับฟีเจอร์เอาต์พุต จากนั้นเราจะทำการสังวัตนาการแบบเป็นคู่สำหรับแต่ละกลุ่มเหล่านี้ และ
ต่อเอาต์พุตตามมิติข้อมูลฟีเจอร์เอาต์พุต ความหมายเชิงปฏิบัติการ
ของมิติข้อมูลอื่นๆ ทั้งหมด (ฟีเจอร์และเชิงพื้นที่) จะยังคงเหมือนเดิม
การวางหน้าต่าง Convolution ที่ถูกต้องจะกำหนดโดย Strides และขนาดของพื้นที่ฐานหลังจากการเพิ่ม Padding
หากต้องการอธิบายว่า Convolution ทำอะไร ให้พิจารณา Convolution แบบ 2 มิติ แล้วเลือกพิกัด batch, z, y, x ที่คงที่ในเอาต์พุต จากนั้น (y,x) คือ
ตำแหน่งของมุมหน้าต่างภายในพื้นที่ฐาน (เช่น มุมซ้ายบน
ขึ้นอยู่กับวิธีตีความมิติเชิงพื้นที่) ตอนนี้เรามีหน้าต่าง 2 มิติ
ที่ได้จากพื้นที่ฐาน ซึ่งแต่ละจุด 2 มิติเชื่อมโยงกับเวกเตอร์ 1 มิติ
เราจึงได้กล่อง 3 มิติ จากเคอร์เนลแบบ Convolutional เนื่องจากเราแก้ไขพิกัดเอาต์พุต z เราจึงมีกล่อง 3 มิติด้วย กล่องทั้ง 2 มีขนาดเท่ากัน ดังนั้นเราจึงนำผลคูณแบบทีละองค์ประกอบระหว่างกล่องทั้ง 2 มาบวกกันได้ (คล้ายกับผลคูณแบบดอท) ซึ่งเป็นค่าเอาต์พุต
โปรดทราบว่าหาก output-z เป็น เช่น 5 จากนั้นแต่ละตำแหน่งของหน้าต่างจะสร้างค่า 5 ค่าในเอาต์พุตลงในzมิติข้อมูลของเอาต์พุต ค่าเหล่านี้แตกต่างกัน
ในส่วนของเคอร์เนล Convolutional ที่ใช้ โดยมีกล่อง 3 มิติแยกต่างหากของ
ค่าที่ใช้สำหรับพิกัด output-z แต่ละค่า ดังนั้น คุณอาจคิดว่าเป็นการทำ Convolution แยกกัน 5 ครั้งโดยใช้ฟิลเตอร์ที่แตกต่างกันสำหรับแต่ละครั้ง
ต่อไปนี้คือโค้ดจำลองสำหรับการสังวัตนาการ 2 มิติที่มีการเพิ่ม Padding และ Striding
for (b, oz, oy, ox) { // output coordinates
value = 0;
for (iz, ky, kx) { // kernel coordinates and input z
iy = oy*stride_y + ky - pad_low_y;
ix = ox*stride_x + kx - pad_low_x;
if ((iy, ix) inside the base area considered without padding) {
value += input(b, iz, iy, ix) * kernel(oz, iz, ky, kx);
}
}
output(b, oz, oy, ox) = value;
}
precision_config ใช้เพื่อระบุการกำหนดค่าความแม่นยำ ระดับ
จะกำหนดว่าฮาร์ดแวร์ควรพยายามสร้างคำสั่งโค้ดเครื่องเพิ่มเติม
เพื่อจำลอง dtype ได้แม่นยำยิ่งขึ้นเมื่อจำเป็นหรือไม่ (เช่น
จำลอง f32 ใน TPU ที่รองรับเฉพาะ bf16 matmuls) ค่าอาจเป็น DEFAULT, HIGH, HIGHEST รายละเอียดเพิ่มเติม
ในส่วน MXU
preferred_element_type เป็นองค์ประกอบสเกลาร์ของเอาต์พุตที่มีความแม่นยำสูง/ต่ำกว่า
ประเภทที่ใช้สำหรับการสะสม preferred_element_type ขอแนะนำ
ประเภทการสะสมสำหรับการดำเนินการที่ระบุ แต่ไม่รับประกัน ซึ่งจะช่วยให้แบ็กเอนด์ฮาร์ดแวร์บางรายการสะสมในประเภทอื่นแทนและ
แปลงเป็นประเภทเอาต์พุตที่ต้องการได้
ดูข้อมูล StableHLO ได้ที่ StableHLO - การสังวัตนาการ
ConvWithGeneralPadding
ดูเพิ่มเติม
XlaBuilder::ConvWithGeneralPadding
ConvWithGeneralPadding(lhs, rhs, window_strides, padding,
feature_group_count, batch_group_count, precision_config,
preferred_element_type)
เช่นเดียวกับ Conv ที่มีการกำหนดค่าการเพิ่มพื้นที่อย่างชัดเจน
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
lhs
|
XlaOp
|
อาร์เรย์ (n+2) มิติของ อินพุต |
rhs
|
XlaOp
|
อาร์เรย์ (n+2) มิติของ น้ำหนักเคอร์เนล |
window_strides |
ArraySlice<int64> |
อาร์เรย์ n มิติของระยะก้าวกระโดดของเคอร์เนล |
padding
|
ArraySlice<
pair<int64,int64>> |
อาร์เรย์ n มิติของ (ต่ำ, สูง) การเพิ่มพื้นที่ |
feature_group_count
|
int64 | จำนวนกลุ่มฟีเจอร์ |
batch_group_count |
int64 | จำนวนกลุ่มแบทช์ |
precision_config
|
ไม่บังคับ
PrecisionConfig |
enum สำหรับระดับความแม่นยำ |
preferred_element_type
|
ไม่บังคับ
PrimitiveType |
enum ของประเภทองค์ประกอบสเกลาร์ |
ConvWithGeneralDimensions
ดูเพิ่มเติม
XlaBuilder::ConvWithGeneralDimensions
ConvWithGeneralDimensions(lhs, rhs, window_strides, padding,
dimension_numbers, feature_group_count, batch_group_count, precision_config,
preferred_element_type)
เช่นเดียวกับ Conv ที่ระบุหมายเลขมิติข้อมูลอย่างชัดเจน
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
lhs
|
XlaOp
|
อาร์เรย์อินพุต (n+2) มิติ |
rhs
|
XlaOp
|
อาร์เรย์ (n+2) มิติของ น้ำหนักเคอร์เนล |
window_strides
|
ArraySlice<int64>
|
อาร์เรย์ n-d ของ kernel strides |
padding |
Padding |
enum ของการเว้นวรรค |
dimension_numbers
|
ConvolutionDimensionNumbers
|
จำนวน มิติข้อมูล |
feature_group_count
|
int64 | จำนวน กลุ่มฟีเจอร์ |
batch_group_count
|
int64 | จำนวน กลุ่มแบทช์ |
precision_config
|
ไม่บังคับ PrecisionConfig
|
enum สำหรับระดับความแม่นยำ |
preferred_element_type
|
ไม่บังคับ PrimitiveType
|
enum ของประเภทองค์ประกอบสเกลาร์ |
ConvGeneral
ดูเพิ่มเติม
XlaBuilder::ConvGeneral
ConvGeneral(lhs, rhs, window_strides, padding, dimension_numbers,
feature_group_count, batch_group_count, precision_config,
preferred_element_type)
เช่นเดียวกับ Conv ที่มีการกำหนดหมายเลขมิติข้อมูลและการกำหนดค่าระยะห่างจากขอบอย่างชัดเจน
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
lhs
|
XlaOp
|
อาร์เรย์อินพุต (n+2) มิติ |
rhs
|
XlaOp
|
อาร์เรย์ (n+2) มิติของ น้ำหนักเคอร์เนล |
window_strides
|
ArraySlice<int64>
|
อาร์เรย์ n-d ของ kernel strides |
padding
|
ArraySlice<
pair<int64,int64>>
|
อาร์เรย์ n มิติของ (ต่ำ, สูง) การเว้นวรรค |
dimension_numbers
|
ConvolutionDimensionNumbers
|
จำนวน มิติข้อมูล |
feature_group_count
|
int64 | จำนวน กลุ่มฟีเจอร์ |
batch_group_count
|
int64 | จำนวน กลุ่มแบทช์ |
precision_config
|
ไม่บังคับ PrecisionConfig
|
enum สำหรับระดับความแม่นยำ |
preferred_element_type
|
ไม่บังคับ PrimitiveType
|
enum ของประเภทองค์ประกอบสเกลาร์ |
ConvGeneralDilated
ดูเพิ่มเติม
XlaBuilder::ConvGeneralDilated
ConvGeneralDilated(lhs, rhs, window_strides, padding, lhs_dilation,
rhs_dilation, dimension_numbers, feature_group_count, batch_group_count,
precision_config, preferred_element_type, window_reversal)
เช่นเดียวกับ Conv ซึ่งมีการกำหนดค่าการเพิ่มระยะขอบ ค่าการขยาย และหมายเลขมิติข้อมูลอย่างชัดเจน
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
lhs
|
XlaOp
|
อาร์เรย์อินพุต (n+2) มิติ |
rhs
|
XlaOp
|
อาร์เรย์ (n+2) มิติของ น้ำหนักเคอร์เนล |
window_strides
|
ArraySlice<int64>
|
อาร์เรย์ n-d ของ kernel strides |
padding
|
ArraySlice<
pair<int64,int64>>
|
อาร์เรย์ n มิติของ (ต่ำ, สูง) การเว้นวรรค |
lhs_dilation
|
ArraySlice<int64>
|
อาร์เรย์ของแฟกเตอร์การขยาย lhs แบบ n มิติ |
rhs_dilation
|
ArraySlice<int64>
|
อาร์เรย์แฟกเตอร์การขยาย rhs แบบ n-d |
dimension_numbers
|
ConvolutionDimensionNumbers
|
จำนวน มิติข้อมูล |
feature_group_count
|
int64 | จำนวน กลุ่มฟีเจอร์ |
batch_group_count
|
int64 | จำนวน กลุ่มแบทช์ |
precision_config
|
ไม่บังคับ PrecisionConfig
|
enum สำหรับระดับความแม่นยำ |
preferred_element_type
|
ไม่บังคับ PrimitiveType
|
enum ของประเภทองค์ประกอบสเกลาร์ |
window_reversal
|
ไม่บังคับ vector<bool>
|
Flag ที่ใช้เพื่อ ย้อนกลับอย่างมีเหตุผล มิติข้อมูลก่อน ใช้ การแปลง |
คัดลอก
ดูเพิ่มเติม
HloInstruction::CreateCopyStart
Copy จะแยกย่อยภายในเป็นคำสั่ง HLO 2 รายการ ได้แก่ CopyStart และ
CopyDone Copy รวมถึง CopyStart และ CopyDone ทำหน้าที่เป็นองค์ประกอบพื้นฐานใน
HLO การดำเนินการเหล่านี้อาจปรากฏในการดัมพ์ HLO แต่ไม่ได้มีไว้ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
Cos
ดูXlaBuilder::Cosด้วย
โคไซน์แบบองค์ประกอบต่อองค์ประกอบ x -> cos(x)
Cos(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Cos ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Cos(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - โคไซน์
Cosh
ดูเพิ่มเติม
XlaBuilder::Cosh
ไฮเพอร์โบลิกโคไซน์แบบองค์ประกอบต่อองค์ประกอบ x -> cosh(x)
Cosh(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Cosh ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Cosh(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
CustomCall
ดูเพิ่มเติม
XlaBuilder::CustomCall
เรียกใช้ฟังก์ชันที่ผู้ใช้ระบุภายในการคำนวณ
เอกสารประกอบเกี่ยวกับ CustomCall มีอยู่ใน รายละเอียดสำหรับนักพัฒนาซอฟต์แวร์ - XLA Custom Calls
ดูข้อมูล StableHLO ได้ที่ StableHLO - custom_call
Div
ดูเพิ่มเติม
XlaBuilder::Div
ทำการหารแบบทีละองค์ประกอบของตัวตั้ง lhs และตัวหาร rhs
Div(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการทางด้านซ้าย: อาร์เรย์ประเภท T |
การล้นของการหารจำนวนเต็ม (การหาร/เศษที่ลงชื่อ/ไม่ได้ลงชื่อด้วย 0 หรือการหาร/เศษที่ลงชื่อของ INT_SMIN ด้วย -1) จะสร้างค่าที่กำหนดการใช้งาน
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Div มีตัวเลือกอื่นที่รองรับการออกอากาศแบบหลายมิติ
Div(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - divide
โดเมน
ดูเพิ่มเติม
HloInstruction::CreateDomain
Domain อาจปรากฏในข้อมูลการทิ้ง HLO แต่ไม่ได้มีไว้ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
จุด
ดูเพิ่มเติม
XlaBuilder::Dot
Dot(lhs, rhs, precision_config, preferred_element_type)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
lhs |
XlaOp |
อาร์เรย์ของประเภท T |
rhs |
XlaOp |
อาร์เรย์ของประเภท T |
precision_config
|
ไม่บังคับ
PrecisionConfig |
enum สำหรับระดับความแม่นยำ |
preferred_element_type
|
ไม่บังคับ
PrimitiveType |
enum ของประเภทองค์ประกอบสเกลาร์ |
ความหมายที่แน่นอนของการดำเนินการนี้ขึ้นอยู่กับอันดับของตัวถูกดำเนินการ
| อินพุต | เอาต์พุต | ความหมาย |
|---|---|---|
เวกเตอร์ [คำนาม] dot เวกเตอร์ [คำนาม] |
สเกลาร์ | ผลคูณสเกลาร์ของเวกเตอร์ |
เมทริกซ์ [m x k] dot เวกเตอร์
[k] |
เวกเตอร์ [m] | การคูณเมทริกซ์กับเวกเตอร์ |
เมทริกซ์ [m x k] dot เมทริกซ์
[k x n] |
เมทริกซ์ [m x n] | การคูณเมทริกซ์กับเมทริกซ์ |
การดำเนินการจะหาผลรวมของผลิตภัณฑ์ในมิติที่ 2 ของ lhs (หรือมิติแรกหากมี 1 มิติ) และมิติแรกของ rhs ซึ่งเป็นมิติข้อมูลที่ "ทำสัญญา" มิติข้อมูลที่ทำสัญญาของ lhs และ rhs ต้องมีขนาดเท่ากัน
ในทางปฏิบัติ ฟังก์ชันนี้สามารถใช้เพื่อดำเนินการดอทโปรดักต์ระหว่าง
เวกเตอร์ การคูณเวกเตอร์/เมทริกซ์ หรือการคูณเมทริกซ์/เมทริกซ์
precision_config ใช้เพื่อระบุการกำหนดค่าความแม่นยำ ระดับ
จะกำหนดว่าฮาร์ดแวร์ควรพยายามสร้างคำสั่งโค้ดเครื่องเพิ่มเติม
เพื่อจำลอง dtype ได้แม่นยำยิ่งขึ้นเมื่อจำเป็นหรือไม่ (เช่น
จำลอง f32 ใน TPU ที่รองรับเฉพาะ bf16 matmuls) ค่าอาจเป็น DEFAULT, HIGH, HIGHEST รายละเอียดเพิ่มเติม
ในส่วน MXU
preferred_element_type เป็นองค์ประกอบสเกลาร์ของเอาต์พุตที่มีความแม่นยำสูง/ต่ำกว่า
ประเภทที่ใช้สำหรับการสะสม preferred_element_type ขอแนะนำ
ประเภทการสะสมสำหรับการดำเนินการที่ระบุ แต่ไม่รับประกัน ซึ่งจะช่วยให้แบ็กเอนด์ฮาร์ดแวร์บางรายการสะสมในประเภทอื่นแทนและ
แปลงเป็นประเภทเอาต์พุตที่ต้องการได้
ดูข้อมูล StableHLO ได้ที่ StableHLO - dot
DotGeneral
ดูเพิ่มเติม
XlaBuilder::DotGeneral
DotGeneral(lhs, rhs, dimension_numbers, precision_config,
preferred_element_type)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
lhs |
XlaOp |
อาร์เรย์ของประเภท T |
rhs |
XlaOp |
อาร์เรย์ของประเภท T |
dimension_numbers
|
DotDimensionNumbers
|
การทำสัญญาและหมายเลข มิติข้อมูลแบบเป็นชุด |
precision_config
|
ไม่บังคับ
PrecisionConfig |
enum สำหรับระดับความแม่นยำ |
preferred_element_type
|
ไม่บังคับ
PrimitiveType |
enum ของประเภทองค์ประกอบสเกลาร์ |
คล้ายกับ Dot แต่ช่วยให้ระบุหมายเลขมิติข้อมูลแบบย่อและแบบกลุ่มได้สำหรับทั้ง lhs และ rhs
| ฟิลด์ DotDimensionNumbers | ประเภท | ความหมาย |
|---|---|---|
lhs_contracting_dimensions
|
repeated int64 | lhs หมายเลขมิติข้อมูล
การทำสัญญา |
rhs_contracting_dimensions
|
repeated int64 | rhs หมายเลขมิติข้อมูล
การทำสัญญา |
lhs_batch_dimensions
|
repeated int64 | lhs หมายเลข
มิติข้อมูลกลุ่ม |
rhs_batch_dimensions
|
repeated int64 | rhs หมายเลข
มิติข้อมูลกลุ่ม |
DotGeneral จะดำเนินการหาผลรวมของผลิตภัณฑ์ในมิติข้อมูลการทำสัญญาที่ระบุใน
dimension_numbers
หมายเลขมิติข้อมูลการทำสัญญาที่เชื่อมโยงจาก lhs และ rhs ไม่จำเป็นต้อง
เหมือนกัน แต่ต้องมีขนาดมิติข้อมูลเดียวกัน
ตัวอย่างที่มีหมายเลขมิติข้อมูลการทำสัญญา
lhs = { {1.0, 2.0, 3.0},
{4.0, 5.0, 6.0} }
rhs = { {1.0, 1.0, 1.0},
{2.0, 2.0, 2.0} }
DotDimensionNumbers dnums;
dnums.add_lhs_contracting_dimensions(1);
dnums.add_rhs_contracting_dimensions(1);
DotGeneral(lhs, rhs, dnums) -> { { 6.0, 12.0},
{15.0, 30.0} }
หมายเลขมิติข้อมูลกลุ่มที่เชื่อมโยงจาก lhs และ rhs ต้องมีขนาดมิติข้อมูลเดียวกัน
ตัวอย่างที่มีหมายเลขมิติข้อมูลกลุ่ม (ขนาดกลุ่ม 2, เมทริกซ์ 2x2)
lhs = { { {1.0, 2.0},
{3.0, 4.0} },
{ {5.0, 6.0},
{7.0, 8.0} } }
rhs = { { {1.0, 0.0},
{0.0, 1.0} },
{ {1.0, 0.0},
{0.0, 1.0} } }
DotDimensionNumbers dnums;
dnums.add_lhs_contracting_dimensions(2);
dnums.add_rhs_contracting_dimensions(1);
dnums.add_lhs_batch_dimensions(0);
dnums.add_rhs_batch_dimensions(0);
DotGeneral(lhs, rhs, dnums) -> {
{ {1.0, 2.0},
{3.0, 4.0} },
{ {5.0, 6.0},
{7.0, 8.0} } }
| อินพุต | เอาต์พุต | ความหมาย |
|---|---|---|
[b0, m, k] dot [b0, k, n] |
[b0, m, n] | batch matmul |
[b0, b1, m, k] dot [b0, b1, k, n] |
[b0, b1, m, n] | batch matmul |
ดังนั้นหมายเลขมิติข้อมูลที่ได้จะเริ่มต้นด้วยมิติข้อมูลกลุ่ม
จากนั้นเป็นมิติข้อมูลlhsที่ไม่ใช่สัญญา/ไม่ใช่กลุ่ม และสุดท้ายคือมิติข้อมูลrhs
ที่ไม่ใช่สัญญา/ไม่ใช่กลุ่ม
precision_config ใช้เพื่อระบุการกำหนดค่าความแม่นยำ ระดับ
จะกำหนดว่าฮาร์ดแวร์ควรพยายามสร้างคำสั่งโค้ดเครื่องเพิ่มเติม
เพื่อจำลอง dtype ได้แม่นยำยิ่งขึ้นเมื่อจำเป็นหรือไม่ (เช่น
จำลอง f32 ใน TPU ที่รองรับเฉพาะ bf16 matmuls) ค่าอาจเป็น DEFAULT, HIGH, HIGHEST ดูรายละเอียดเพิ่มเติม
ได้ในส่วน MXU
preferred_element_type เป็นองค์ประกอบสเกลาร์ของเอาต์พุตที่มีความแม่นยำสูง/ต่ำกว่า
ประเภทที่ใช้สำหรับการสะสม preferred_element_type ขอแนะนำ
ประเภทการสะสมสำหรับการดำเนินการที่ระบุ แต่ไม่รับประกัน ซึ่งจะช่วยให้แบ็กเอนด์ฮาร์ดแวร์บางรายการสะสมในประเภทอื่นแทนและ
แปลงเป็นประเภทเอาต์พุตที่ต้องการได้
ดูข้อมูล StableHLO ได้ที่ StableHLO - dot_general
ScaledDot
ดูเพิ่มเติม
XlaBuilder::ScaledDot
ScaledDot(lhs, lhs_scale, rhs, rhs_scale, dimension_number,
precision_config,preferred_element_type)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
lhs |
XlaOp |
อาร์เรย์ของประเภท T |
rhs |
XlaOp |
อาร์เรย์ของประเภท T |
lhs_scale |
XlaOp |
อาร์เรย์ของประเภท T |
rhs_scale |
XlaOp |
อาร์เรย์ของประเภท T |
dimension_number
|
ScatterDimensionNumbers
|
หมายเลขมิติข้อมูลสําหรับ การดำเนินการกระจาย |
precision_config
|
PrecisionConfig
|
enum สำหรับระดับความแม่นยำ |
preferred_element_type
|
ไม่บังคับ PrimitiveType
|
enum ของประเภทองค์ประกอบสเกลาร์ |
คล้ายกับ DotGeneral
สร้างการดำเนินการ dot ที่ปรับขนาดโดยมีตัวถูกดำเนินการเป็น "lhs", "lhs_scale", "rhs" และ "rhs_scale" โดยมีมิติข้อมูลการทำสัญญาและมิติข้อมูลกลุ่มที่ระบุใน "dimension_numbers"
RaggedDot
ดูเพิ่มเติม
XlaBuilder::RaggedDot
ดูรายละเอียดการคำนวณของ RaggedDot ได้ที่
StableHLO - chlo.ragged_dot
DynamicReshape
ดูเพิ่มเติม
XlaBuilder::DynamicReshape
การดำเนินการนี้จะเหมือนกับ reshape ในเชิงฟังก์ชัน แต่จะระบุรูปร่างผลลัพธ์แบบไดนามิกผ่าน output_shape
DynamicReshape(operand, dim_sizes, new_size_bounds, dims_are_dynamic)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ N มิติของประเภท T |
dim_sizes |
เวกเตอร์ของ XlaOP |
ขนาดเวกเตอร์ N มิติ |
new_size_bounds |
เวกเตอร์ของ int63 |
เวกเตอร์ขอบเขต N มิติ |
dims_are_dynamic |
เวกเตอร์ของ bool |
มิติข้อมูลแบบไดนามิก N มิติ |
ดูข้อมูล StableHLO ได้ที่ StableHLO - dynamic_reshape
DynamicSlice
ดูเพิ่มเติม
XlaBuilder::DynamicSlice
DynamicSlice จะดึงข้อมูลอาร์เรย์ย่อยจากอาร์เรย์อินพุตที่ dynamic
start_indices ระบบจะส่งขนาดของชิ้นในแต่ละมิติข้อมูลใน
size_indices ซึ่งระบุจุดสิ้นสุดของช่วงชิ้นแบบไม่รวมในแต่ละมิติข้อมูล: [start, start + size) รูปร่างของ start_indices ต้องเป็น
แบบ 1 มิติ โดยมีขนาดมิติเท่ากับจำนวนมิติของ
operand
DynamicSlice(operand, start_indices, slice_sizes)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ N มิติของประเภท T |
start_indices
|
ลำดับของ N XlaOp
|
รายการจำนวนเต็มสเกลาร์ N ซึ่งมีดัชนีเริ่มต้นของ สไลซ์สำหรับแต่ละมิติข้อมูล ค่าต้องมากกว่าหรือเท่ากับ 0 |
size_indices
|
ArraySlice<int64>
|
รายการจำนวนเต็ม N ที่มี ขนาดชิ้นสำหรับแต่ละมิติข้อมูล แต่ละค่าต้องมากกว่า 0 อย่างเคร่งครัด และ start + size ต้องน้อยกว่าหรือเท่ากับขนาดของมิติข้อมูลเพื่อหลีกเลี่ยงการวนรอบขนาดมิติข้อมูล |
ดัชนีสไลซ์ที่มีผลจะคำนวณโดยใช้การแปลงต่อไปนี้
สำหรับดัชนีแต่ละรายการ i ใน [1, N) ก่อนที่จะทำการสไลซ์
start_indices[i] = clamp(start_indices[i], 0, operand.dimension_size[i] - slice_sizes[i])
ซึ่งช่วยให้มั่นใจได้ว่า Slice ที่ดึงออกมาจะอยู่ในขอบเขตของอาร์เรย์ตัวถูกดำเนินการเสมอ หากชิ้นอยู่ในขอบเขตก่อนที่จะใช้การเปลี่ยนรูป การเปลี่ยนรูปจะไม่มีผล
ตัวอย่าง 1 มิติ
let a = {0.0, 1.0, 2.0, 3.0, 4.0};
let s = {2};
DynamicSlice(a, s, {2});
// Result: {2.0, 3.0}
ตัวอย่าง 2 มิติ
let b =
{ {0.0, 1.0, 2.0},
{3.0, 4.0, 5.0},
{6.0, 7.0, 8.0},
{9.0, 10.0, 11.0} }
let s = {2, 1}
DynamicSlice(b, s, {2, 2});
//Result:
// { { 7.0, 8.0},
// {10.0, 11.0} }
ดูข้อมูล StableHLO ได้ที่ StableHLO - dynamic_slice
DynamicUpdateSlice
ดูเพิ่มเติม
XlaBuilder::DynamicUpdateSlice
DynamicUpdateSlice จะสร้างผลลัพธ์ซึ่งเป็นค่าของอาร์เรย์อินพุต
operand โดยจะเขียนทับสไลซ์ update ที่ start_indices
รูปร่างของ update จะกำหนดรูปร่างของอาร์เรย์ย่อยของผลลัพธ์ที่จะอัปเดต
รูปร่างของ start_indices ต้องเป็นแบบ 1 มิติ โดยมีขนาดมิติเท่ากับ
จำนวนมิติของ operand
DynamicUpdateSlice(operand, update, start_indices)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ N มิติของประเภท T |
update
|
XlaOp
|
อาร์เรย์ N มิติของประเภท T ที่มีการอัปเดต Slice มิติข้อมูลแต่ละรายการของรูปร่างการอัปเดตต้องมากกว่า 0 อย่างเคร่งครัด และ start + update ต้องน้อยกว่าหรือเท่ากับขนาดตัวถูกดำเนินการสำหรับแต่ละมิติข้อมูลเพื่อหลีกเลี่ยงการสร้างดัชนีการอัปเดตที่อยู่นอกขอบเขต |
start_indices
|
ลำดับของ N XlaOp
|
รายการจำนวนเต็มสเกลาร์ N ซึ่งมีดัชนีเริ่มต้นของ สไลซ์สำหรับแต่ละมิติข้อมูล ค่าต้องมากกว่าหรือเท่ากับ 0 |
ดัชนีสไลซ์ที่มีผลจะคำนวณโดยใช้การแปลงต่อไปนี้
สำหรับดัชนีแต่ละรายการ i ใน [1, N) ก่อนที่จะทำการสไลซ์
start_indices[i] = clamp(start_indices[i], 0, operand.dimension_size[i] - update.dimension_size[i])
ซึ่งจะช่วยให้มั่นใจว่า Slice ที่อัปเดตแล้วจะอยู่ในขอบเขตของอาร์เรย์ตัวถูกดำเนินการเสมอ หากชิ้นอยู่ในขอบเขตก่อนที่จะใช้การเปลี่ยนรูป การเปลี่ยนรูปจะไม่มีผล
ตัวอย่าง 1 มิติ
let a = {0.0, 1.0, 2.0, 3.0, 4.0}
let u = {5.0, 6.0}
let s = {2}
DynamicUpdateSlice(a, u, s)
// Result: {0.0, 1.0, 5.0, 6.0, 4.0}
ตัวอย่าง 2 มิติ
let b =
{ {0.0, 1.0, 2.0},
{3.0, 4.0, 5.0},
{6.0, 7.0, 8.0},
{9.0, 10.0, 11.0} }
let u =
{ {12.0, 13.0},
{14.0, 15.0},
{16.0, 17.0} }
let s = {1, 1}
DynamicUpdateSlice(b, u, s)
// Result:
// { {0.0, 1.0, 2.0},
// {3.0, 12.0, 13.0},
// {6.0, 14.0, 15.0},
// {9.0, 16.0, 17.0} }
ดูข้อมูล StableHLO ได้ที่ StableHLO - dynamic_update_slice
Erf
ดูเพิ่มเติม
XlaBuilder::Erf
ฟังก์ชันข้อผิดพลาดแบบทีละองค์ประกอบ x -> erf(x) โดยที่
\(\text{erf}(x) = \frac{2}{\sqrt{\pi} }\int_0^x e^{-t^2} \, dt\)
Erf(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Erf ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Erf(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
วันหมดอายุ
ดูเพิ่มเติม
XlaBuilder::Exp
เลขชี้กำลังธรรมชาติขององค์ประกอบ x -> e^x
Exp(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Exp ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Exp(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - exponential
Expm1
ดูเพิ่มเติม
XlaBuilder::Expm1
เลขชี้กำลังธรรมชาติแบบทีละองค์ประกอบลบด้วย 1 x -> e^x - 1
Expm1(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Expm1 ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Expm1(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - exponential_minus_one
Fft
ดูเพิ่มเติม
XlaBuilder::Fft
การดำเนินการ FFT ของ XLA จะใช้การแปลงฟูริเยร์ไปข้างหน้าและย้อนกลับสำหรับอินพุต/เอาต์พุตจริงและเชิงซ้อน รองรับ FFT แบบหลายมิติบนแกนสูงสุด 3 แกน
Fft(operand, ftt_type, fft_length)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand
|
XlaOp
|
อาร์เรย์ที่เราจะแปลงฟูริเยร์ |
fft_type |
FftType |
โปรดดูตารางด้านล่าง |
fft_length
|
ArraySlice<int64>
|
ความยาวของโดเมนเวลา
ของแกนที่จะ
แปลง โดยเฉพาะอย่างยิ่งสำหรับ IRFFT เพื่อปรับขนาดแกนในสุด เนื่องจาก RFFT(fft_length=[16]) มีรูปร่างเอาต์พุตเหมือนกับ RFFT(fft_length=[17]) |
FftType |
ความหมาย |
|---|---|
FFT |
FFT จากจำนวนเชิงซ้อนไปเป็นจำนวนเชิงซ้อน รูปร่างไม่มีการเปลี่ยนแปลง |
IFFT |
FFT แบบผกผันจากจำนวนเชิงซ้อนเป็นจำนวนเชิงซ้อน รูปร่างไม่มีการเปลี่ยนแปลง |
RFFT
|
FFT จากจำนวนจริงไปเป็นจำนวนเชิงซ้อน รูปร่างของแกนในสุดจะลดลงเหลือ fft_length[-1] // 2 + 1 หาก fft_length[-1] เป็นค่าที่ไม่ใช่ศูนย์ โดยละเว้นส่วนสังยุคที่กลับด้านของสัญญาณที่แปลงแล้วซึ่งอยู่นอกเหนือความถี่ไนควิสต์ |
IRFFT
|
FFT จากจำนวนเชิงซ้อนเป็นจำนวนจริงแบบผกผัน (กล่าวคือ รับจำนวนเชิงซ้อนและแสดงผลจำนวนจริง)
รูปร่างของแกนในสุดจะขยายเป็น fft_length[-1] หาก fft_length[-1] เป็นค่าที่ไม่ใช่ศูนย์ ซึ่งจะอนุมานส่วนของสัญญาณที่แปลงแล้วที่อยู่นอกเหนือความถี่ไนควิสต์จากสังยุคผกผันของรายการ 1 ถึง fft_length[-1] // 2 + 1 |
ดูข้อมูล StableHLO ได้ที่ StableHLO - fft
FFT แบบหลายมิติ
เมื่อระบุ fft_length มากกว่า 1 รายการ การดำเนินการนี้จะเทียบเท่ากับการใช้
การดำเนินการ FFT แบบเรียงซ้อนกับแต่ละแกนด้านในสุด โปรดทราบว่าสำหรับกรณีจริง -> เชิงซ้อนและเชิงซ้อน -> จริง การแปลงแกนในสุดจะดำเนินการก่อน (RFFT; สุดท้ายสำหรับ IRFFT) ซึ่งเป็นเหตุผลที่แกนในสุดเป็นแกนที่มีการเปลี่ยนแปลงขนาด จากนั้นการแปลงแกนอื่นๆ จะเป็น
complex->complex
รายละเอียดการใช้งาน
FFT ของ CPU ขับเคลื่อนโดย TensorFFT ของ Eigen FFT ของ GPU ใช้ cuFFT
ชั้น
ดูเพิ่มเติม
XlaBuilder::Floor
ฟังก์ชัน Floor แบบองค์ประกอบต่อองค์ประกอบ x -> ⌊x⌋
Floor(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - floor
ฟิวชั่น
ดูเพิ่มเติม
HloInstruction::CreateFusion
Fusion operation แสดงถึงคำสั่ง HLO และทำหน้าที่เป็น Primitive ใน HLO
Op นี้อาจปรากฏในข้อมูลการทิ้ง HLO แต่ไม่ได้มีไว้ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
รวบรวม
การดำเนินการรวบรวม XLA จะรวมชิ้นหลายๆ ชิ้น (แต่ละชิ้นอาจมีออฟเซ็ตเวลาเรียกใช้ที่แตกต่างกัน) ของอาร์เรย์อินพุตเข้าด้วยกัน
ดูข้อมูล StableHLO ได้ที่ StableHLO - gather
ความหมายทั่วไป
ดูเพิ่มเติม
XlaBuilder::Gather
ดูคำอธิบายที่เข้าใจง่ายขึ้นได้ที่ส่วน "คำอธิบายอย่างไม่เป็นทางการ" ด้านล่าง
gather(operand, start_indices, dimension_numbers, slice_sizes,
indices_are_sorted)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand
|
XlaOp
|
อาร์เรย์ที่เรากำลังรวบรวม จาก |
start_indices
|
XlaOp
|
อาร์เรย์ที่มี ดัชนีเริ่มต้นของ ชิ้นที่เราเก็บรวบรวม |
dimension_numbers
|
GatherDimensionNumbers
|
มิติข้อมูลใน
start_indices ที่
"มี" ดัชนี
เริ่มต้น ดูคำอธิบายโดยละเอียดได้ที่ด้านล่าง |
slice_sizes
|
ArraySlice<int64>
|
slice_sizes[i] คือขอบเขตของชิ้นส่วนในมิติข้อมูล i |
indices_are_sorted
|
bool
|
ผู้โทรรับประกันว่าดัชนีจะเรียงตามลำดับหรือไม่ |
เพื่อความสะดวก เราจะติดป้ายกำกับมิติข้อมูลในอาร์เรย์เอาต์พุตที่ไม่ได้อยู่ใน offset_dims
เป็น batch_dims
เอาต์พุตคืออาร์เรย์ที่มีมิติข้อมูล batch_dims.size + offset_dims.size
operand.rank ต้องเท่ากับผลรวมของ offset_dims.size และ collapsed_slice_dims.size นอกจากนี้ slice_sizes.size ต้องเท่ากับ
operand.rank
หาก index_vector_dim เท่ากับ start_indices.rank เราจะถือว่า start_indices มีมิติข้อมูลต่อท้าย 1 โดยปริยาย (กล่าวคือ หาก start_indices มีรูปร่าง [6,7] และ index_vector_dim เป็น 2 เราจะถือว่ารูปร่างของ start_indices เป็น [6,7,1] โดยปริยาย)
ขอบเขตของอาร์เรย์เอาต์พุตตามมิติข้อมูล i จะคำนวณดังนี้
หาก
iอยู่ในbatch_dims(เช่น เท่ากับbatch_dims[k]สำหรับบางk) เราจะเลือกขอบเขตมิติข้อมูลที่สอดคล้องกันจากstart_indices.shapeโดยข้ามindex_vector_dim(เช่น เลือกstart_indices.shape.dims[k] หากk<index_vector_dimและstart_indices.shape.dims[k+1] ในกรณีอื่นๆ)หาก
iอยู่ในoffset_dims(เช่น เท่ากับoffset_dims[k] สำหรับkบางรายการ) เราจะเลือกขอบเขตที่สอดคล้องกันจากslice_sizesหลังจาก พิจารณาcollapsed_slice_dimsแล้ว (เช่น เราจะเลือกadjusted_slice_sizes[k] โดยที่adjusted_slice_sizesคือslice_sizesที่มีการนำขอบเขตที่ดัชนีcollapsed_slice_dimsออก)
ในรูปแบบทางการ ดัชนีตัวถูกดำเนินการ In ที่สอดคล้องกับดัชนีเอาต์พุตที่กำหนด Out จะคำนวณได้ดังนี้
กำหนดให้
G= {Out[k] สำหรับkในbatch_dims} ใช้Gเพื่อแบ่งเวกเตอร์Sออกเป็นส่วนๆ โดยที่S[i] =start_indices[Combine(G,i)] โดยที่ Combine(A, b) จะแทรก b ที่ตำแหน่งindex_vector_dimลงใน A โปรดทราบว่า มีการกำหนดไว้อย่างชัดเจนแม้ว่าGจะว่างเปล่าก็ตาม กล่าวคือ หากGว่างเปล่าSจะเท่ากับstart_indicesสร้างดัชนีเริ่มต้น
Sinในoperandโดยใช้Sโดย กระจายSโดยใช้start_index_mapโดยมีรายละเอียดดังนี้Sin[start_index_map[k]] =S[k] ifk<start_index_map.size.Sin[_] =0มิฉะนั้น
สร้างดัชนี
Oinลงในoperandโดยกระจายดัชนี ที่มิติข้อมูลออฟเซ็ตในOutตามชุดcollapsed_slice_dimsโดยมีรายละเอียดดังนี้Oin[remapped_offset_dims(k)] =Out[offset_dims[k]] ifk<offset_dims.size(remapped_offset_dimsis defined below).Oin[_] =0มิฉะนั้น
InคือOin+Sinโดยที่ + คือการบวกแบบทีละองค์ประกอบ
remapped_offset_dims เป็นฟังก์ชันโมโนโทนิกที่มีโดเมน [0,
offset_dims.size) และช่วง [0, operand.rank) \ collapsed_slice_dims ดังนั้น
หาก offset_dims.size คือ 4, operand.rank คือ 6 และ
collapsed_slice_dims คือ {0, 2} ดังนั้น remapped_offset_dims คือ {0→1,
1→3, 2→4, 3→5}
หากตั้งค่า indices_are_sorted เป็น "จริง" XLA จะถือว่าผู้ใช้ได้จัดเรียง start_indices
แล้ว (เรียงจากน้อยไปมาก หลังจากกระจายค่าตาม
start_index_map) หากไม่เป็นเช่นนั้น ความหมายจะเป็น
การใช้งานที่กำหนด
คำอธิบายและตัวอย่างอย่างไม่เป็นทางการ
กล่าวอย่างไม่เป็นทางการคือ ดัชนี Out ทุกรายการในอาร์เรย์เอาต์พุตจะสอดคล้องกับองค์ประกอบ E
ในอาร์เรย์ตัวถูกดำเนินการ โดยคำนวณดังนี้
เราใช้มิติข้อมูลกลุ่มใน
Outเพื่อค้นหาดัชนีเริ่มต้นจากstart_indicesเราใช้
start_index_mapเพื่อแมปดัชนีเริ่มต้น (ซึ่งอาจมีขนาดน้อยกว่า operand.rank) กับดัชนีเริ่มต้น "เต็ม" ในoperandเราจะแบ่งส่วนแบบไดนามิกโดยใช้ขนาด
slice_sizesโดยใช้ดัชนีเริ่มต้นแบบเต็มเราปรับรูปร่างสไลซ์โดยการยุบ
collapsed_slice_dimsมิติข้อมูล เนื่องจากมิติข้อมูลสไลซ์ที่ยุบทั้งหมดต้องมีขอบเขตเป็น 1 การเปลี่ยนรูปร่างนี้จึง ถูกต้องเสมอเราใช้มิติข้อมูลออฟเซ็ตใน
Outเพื่อจัดทำดัชนีในชิ้นนี้เพื่อรับองค์ประกอบอินพุตEที่สอดคล้องกับดัชนีเอาต์พุตOut
index_vector_dim ตั้งค่าเป็น start_indices.rank - 1 ในตัวอย่างทั้งหมด
ที่ตามมา ค่าที่น่าสนใจมากขึ้นสำหรับ index_vector_dim do not change the
operation fundamentally แต่ทำให้การแสดงภาพยุ่งยากมากขึ้น
หากต้องการดูว่าองค์ประกอบทั้งหมดข้างต้นทำงานร่วมกันอย่างไร ลองดูตัวอย่างที่รวบรวมชิ้นส่วน 5 ชิ้นที่มีรูปร่าง [8,6] จากอาร์เรย์ [16,11] [16,11] อาร์เรย์สามารถแสดงตำแหน่งของสไลซ์เป็นเวกเตอร์ดัชนีที่มีรูปร่าง S64[2] ดังนั้นชุดตำแหน่ง 5 ตำแหน่งจึงแสดงเป็นอาร์เรย์ S64[5,2] ได้
จากนั้นลักษณะการทำงานของการดำเนินการรวบรวมจะแสดงเป็นการเปลี่ยนดัชนี
ที่ใช้ [G,O0,O1] ซึ่งเป็นดัชนีใน
รูปร่างเอาต์พุต และแมปกับองค์ประกอบในอาร์เรย์อินพุตในลักษณะต่อไปนี้
ก่อนอื่นเราจะเลือกเวกเตอร์ (X,Y) จากอาร์เรย์ดัชนีรวบรวมโดยใช้ G
จากนั้น องค์ประกอบในอาร์เรย์เอาต์พุตที่ดัชนี
[G,O0,O1] จะเป็นองค์ประกอบในอาร์เรย์อินพุต
ที่ดัชนี [X+O0,Y+O1]
slice_sizes คือ [8,6] ซึ่งกำหนดช่วงของ O0 และ O1 และสิ่งนี้จะกำหนดขอบเขตของสไลซ์
การดำเนินการรวบรวมนี้ทำหน้าที่เป็น Slice แบบไดนามิกของกลุ่มที่มี G เป็นมิติข้อมูลกลุ่ม
ดัชนีการรวบรวมอาจเป็นแบบหลายมิติ เช่น เวอร์ชันทั่วไปของตัวอย่างด้านบนที่ใช้อาร์เรย์ "รวบรวมดัชนี" ที่มีรูปร่าง [4,5,2]
จะแปลดัชนีดังนี้
อีกครั้งที่นี่จะทำหน้าที่เป็นกลุ่มสไลซ์แบบไดนามิก G0 และ
G1 เป็นมิติข้อมูลกลุ่ม ขนาดของชิ้นยังคงเป็น [8,6]
การดำเนินการรวบรวมใน XLA จะสรุปความหมายที่ไม่เป็นทางการที่ระบุไว้ข้างต้นในลักษณะต่อไปนี้
เราสามารถกำหนดค่ามิติข้อมูลใดในรูปร่างเอาต์พุตเป็นมิติข้อมูลออฟเซ็ต ได้ (มิติข้อมูลที่มี
O0,O1ใน ตัวอย่างสุดท้าย) มิติข้อมูลกลุ่มเอาต์พุต (มิติข้อมูลที่มีG0,G1ในตัวอย่างล่าสุด) จะกำหนดให้เป็นมิติข้อมูลเอาต์พุตที่ไม่ใช่มิติข้อมูลออฟเซ็ตจำนวนมิติข้อมูลออฟเซ็ตเอาต์พุตที่แสดงอย่างชัดเจนในรูปร่างเอาต์พุต อาจน้อยกว่าจำนวนมิติข้อมูลอินพุต มิติข้อมูลที่ "ขาดหายไป" เหล่านี้ ซึ่งแสดงอย่างชัดเจนเป็น
collapsed_slice_dimsต้องมี ขนาดชิ้นเป็น1เนื่องจากมีขนาดสไลซ์เป็น1ดัชนีที่ถูกต้องเพียงอย่างเดียว สำหรับดัชนีเหล่านั้นคือ0และการละดัชนีเหล่านั้นไม่ทำให้เกิดความคลุมเครือชิ้นที่ดึงมาจากอาร์เรย์ "รวบรวมดัชนี" ((
X,Y) ในตัวอย่างสุดท้าย ) อาจมีองค์ประกอบน้อยกว่าจำนวนมิติข้อมูลของอาร์เรย์อินพุต และการแมปที่ชัดเจนจะกำหนดวิธีขยายดัชนีเพื่อให้มีจำนวนมิติข้อมูลเท่ากับอินพุต
ตัวอย่างสุดท้าย เราใช้ (2) และ (3) เพื่อใช้ tf.gather_nd ดังนี้
G0 และ G1 ใช้เพื่อแบ่งดัชนีเริ่มต้นออกจากอาร์เรย์ดัชนีรวบรวมตามปกติ ยกเว้นดัชนีเริ่มต้นจะมีองค์ประกอบเพียงรายการเดียวคือ X ในทำนองเดียวกัน จะมีดัชนีออฟเซ็ตเอาต์พุตเพียงรายการเดียวที่มีค่า
O0 อย่างไรก็ตาม ก่อนที่จะใช้เป็นดัชนีในอาร์เรย์อินพุต
ระบบจะขยายดัชนีเหล่านี้ตาม "การแมปดัชนี Gather" (start_index_map ใน
คำอธิบายอย่างเป็นทางการ) และ "การแมปออฟเซ็ต" (remapped_offset_dims ใน
คำอธิบายอย่างเป็นทางการ) เป็น [X,0] และ [0,O0] ตามลำดับ
รวมเป็น [X,O0] กล่าวอีกนัยหนึ่งคือ ดัชนีเอาต์พุต
[G0,G1,O0] จะแมปกับดัชนีอินพุต
[GatherIndices[G0,G1,0],O0]
ซึ่งจะให้ความหมายสำหรับ tf.gather_nd
slice_sizes สำหรับเคสนี้คือ [1,11] โดยสัญชาตญาณแล้ว หมายความว่าดัชนี X ทุกตัวในอาร์เรย์ดัชนีการรวบรวมจะเลือกทั้งแถว และผลลัพธ์คือการ
ต่อกันของแถวทั้งหมดนี้
GetDimensionSize
ดูเพิ่มเติม
XlaBuilder::GetDimensionSize
แสดงผลขนาดของมิติข้อมูลที่ระบุของตัวถูกดำเนินการ ตัวถูกดำเนินการต้องมีรูปร่างเป็นอาร์เรย์
GetDimensionSize(operand, dimension)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์อินพุต n มิติ |
dimension
|
int64
|
ค่าในช่วง [0, n) ที่ระบุ
มิติข้อมูล |
ดูข้อมูล StableHLO ได้ที่ StableHLO - get_dimension_size
GetTupleElement
ดูเพิ่มเติม
XlaBuilder::GetTupleElement
ดัชนีลงในทูเพิลที่มีค่าคงที่ในเวลาคอมไพล์
ค่าต้องเป็นค่าคงที่ในเวลาคอมไพล์เพื่อให้การอนุมานรูปร่างกำหนดประเภทของค่าผลลัพธ์ได้
ซึ่งคล้ายกับ std::get<int N>(t) ใน C++ โดยในเชิงแนวคิดแล้ว
let v: f32[10] = f32[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
let s: s32 = 5;
let t: (f32[10], s32) = tuple(v, s);
let element_1: s32 = gettupleelement(t, 1); // Inferred shape matches s32.
ดู tf.tuple เพิ่มเติม
GetTupleElement(tuple_data, index)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
tuple_data |
XlaOP |
ทูเพิล |
index |
int64 |
ดัชนีของรูปร่าง Tuple |
ดูข้อมูล StableHLO ได้ที่ StableHLO - get_tuple_element
Imag
ดูเพิ่มเติม
XlaBuilder::Imag
ส่วนจินตภาพของรูปร่างเชิงซ้อน (หรือจริง) แบบทีละองค์ประกอบ x -> imag(x) หาก
ตัวถูกดำเนินการเป็นประเภททศนิยม จะแสดงผล 0
Imag(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - imag
ในฟีด
ดูเพิ่มเติม
XlaBuilder::Infeed
Infeed(shape, config)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
shape
|
Shape
|
รูปร่างของข้อมูลที่อ่านจากอินเทอร์เฟซ Infeed ต้องตั้งค่าฟิลด์เลย์เอาต์ของรูปร่างให้ตรงกับเลย์เอาต์ของข้อมูลที่ส่งไปยังอุปกรณ์ มิฉะนั้นลักษณะการทำงานของรูปร่างจะไม่ได้กำหนดไว้ |
config |
ไม่บังคับ string |
การกำหนดค่าของ Op |
อ่านรายการข้อมูลรายการเดียวจากอินเทอร์เฟซการสตรีมในฟีดโดยนัยของ
อุปกรณ์ โดยตีความข้อมูลเป็นรูปร่างและเลย์เอาต์ที่กำหนด และส่งคืน
XlaOpของข้อมูล อนุญาตให้มีการดำเนินการ Infeed หลายรายการในการคำนวณ
แต่ต้องมีการเรียงลำดับการดำเนินการ Infeed ทั้งหมด ตัวอย่างเช่น 2
Infeed ในโค้ดด้านล่างมีลำดับรวมเนื่องจากมีการขึ้นต่อกัน
ระหว่างลูป while
result1 = while (condition, init = init_value) {
Infeed(shape)
}
result2 = while (condition, init = result1) {
Infeed(shape)
}
ไม่รองรับรูปร่างของทูเพิลที่ซ้อนกัน สำหรับรูปร่างของทูเพิลที่ว่างเปล่า การดำเนินการ Infeed จะไม่มีผลและดำเนินการต่อโดยไม่อ่านข้อมูลใดๆ จาก Infeed ของอุปกรณ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - ในฟีด
Iota
ดูเพิ่มเติม
XlaBuilder::Iota
Iota(shape, iota_dimension)
สร้างค่าคงที่แบบอักษรบนอุปกรณ์แทนการโอนข้อมูลที่อาจมีขนาดใหญ่ไปยังโฮสต์
สร้างอาร์เรย์ที่มีรูปร่างที่ระบุและมีค่าเริ่มต้นที่
0 และเพิ่มขึ้นทีละ 1 ตามมิติข้อมูลที่ระบุ สำหรับประเภททศนิยม
อาร์เรย์ที่สร้างขึ้นจะเทียบเท่ากับ ConvertElementType(Iota(...)) โดยที่ Iota เป็นประเภทจำนวนเต็มและการแปลงเป็นประเภททศนิยม
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
shape |
Shape |
รูปร่างของอาร์เรย์ที่สร้างโดย Iota() |
iota_dimension |
int64 |
มิติข้อมูลที่จะเพิ่มตาม |
เช่น Iota(s32[4, 8], 0) จะแสดงผล
[[0, 0, 0, 0, 0, 0, 0, 0 ],
[1, 1, 1, 1, 1, 1, 1, 1 ],
[2, 2, 2, 2, 2, 2, 2, 2 ],
[3, 3, 3, 3, 3, 3, 3, 3 ]]
ส่งคืนสินค้า Iota(s32[4, 8], 1)
[[0, 1, 2, 3, 4, 5, 6, 7 ],
[0, 1, 2, 3, 4, 5, 6, 7 ],
[0, 1, 2, 3, 4, 5, 6, 7 ],
[0, 1, 2, 3, 4, 5, 6, 7 ]]
ดูข้อมูล StableHLO ได้ที่ StableHLO - iota
IsFinite
ดูเพิ่มเติม
XlaBuilder::IsFinite
ทดสอบว่าองค์ประกอบแต่ละรายการของ operand เป็นค่าจำกัดหรือไม่ กล่าวคือ ไม่ใช่ค่าอนันต์บวกหรือลบ และไม่ใช่ NaN แสดงผลอาร์เรย์ของค่า PRED ที่มี
รูปร่างเดียวกับอินพุต โดยแต่ละองค์ประกอบจะเป็น true ก็ต่อเมื่อ
องค์ประกอบอินพุตที่สอดคล้องกันเป็นค่าจำกัด
IsFinite(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - is_finite
บันทึก
ดูเพิ่มเติม
XlaBuilder::Log
ลอการิทึมธรรมชาติแบบองค์ประกอบต่อองค์ประกอบ x -> ln(x)
Log(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ ฟังก์ชันบันทึกยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Log(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - log
Log1p
ดูเพิ่มเติม
XlaBuilder::Log1p
ลอการิทึมธรรมชาติที่เลื่อนทีละองค์ประกอบ x -> ln(1+x)
Log1p(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Log1p ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Log1p(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - log_plus_one
Logistic
ดูเพิ่มเติม
XlaBuilder::Logistic
การคำนวณฟังก์ชันโลจิสติกแบบทีละองค์ประกอบ x -> logistic(x)
Logistic(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ ฟังก์ชัน LOG ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Logistic(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - logistic
แผนที่
ดูเพิ่มเติม
XlaBuilder::Map
Map(operands..., computation, dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operands |
ลำดับของ N XlaOps |
อาร์เรย์ N รายการของประเภท T0..T{N-1} |
computation
|
XlaComputation
|
การคำนวณประเภท T_0, T_1,
.., T_{N + M -1} -> S โดยมีพารามิเตอร์ N
ประเภท T และ M
ประเภทใดก็ได้ |
dimensions |
int64 อาร์เรย์ |
อาร์เรย์ของมิติข้อมูลแผนที่ |
static_operands
|
ลำดับของ N XlaOps
|
การดำเนินการแบบคงที่สำหรับ การดำเนินการของแผนที่ |
ใช้ฟังก์ชันสเกลาร์กับอาร์เรย์ operands ที่ระบุ ซึ่งจะสร้างอาร์เรย์ที่มีมิติข้อมูลเดียวกัน โดยแต่ละองค์ประกอบคือผลลัพธ์ของฟังก์ชันที่แมปซึ่งใช้กับองค์ประกอบที่สอดคล้องกันในอาร์เรย์อินพุต
ฟังก์ชันที่แมปคือการคำนวณโดยพลการที่มีข้อจำกัดว่าต้องมีอินพุต N รายการประเภทสเกลาร์ T และเอาต์พุตรายการเดียวที่มีประเภท S เอาต์พุตมี
มิติข้อมูลเดียวกับตัวถูกดำเนินการ ยกเว้นว่าประเภทองค์ประกอบ T จะถูกแทนที่
ด้วย S
เช่น Map(op1, op2, op3, computation, par1) จะแมป elem_out <-
computation(elem1, elem2, elem3, par1) ที่ดัชนี (หลายมิติ) แต่ละรายการใน
อาร์เรย์อินพุตเพื่อสร้างอาร์เรย์เอาต์พุต
ดูข้อมูล StableHLO ได้ที่ StableHLO - map
สูงสุด
ดูเพิ่มเติม
XlaBuilder::Max
ดำเนินการหาค่าสูงสุดแบบทีละองค์ประกอบในเทนเซอร์ lhs และ rhs
Max(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Max มีตัวเลือกอื่นที่รองรับการออกอากาศแบบหลายมิติ ดังนี้
Max(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - maximum
ต่ำสุด
ดูเพิ่มเติม
XlaBuilder::Min
ดำเนินการ min แบบทีละองค์ประกอบใน lhs และ rhs
Min(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
มีตัวเลือกอื่นที่รองรับการออกอากาศแบบหลายมิติ สำหรับ Min ดังนี้
Min(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - ขั้นต่ำ
Mul
ดูเพิ่มเติม
XlaBuilder::Mul
ดำเนินการคูณแบบทีละองค์ประกอบของ lhs และ rhs
Mul(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Mul มีตัวเลือกอื่นที่รองรับการออกอากาศแบบหลายมิติ ดังนี้
Mul(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - multiply
Neg
ดูเพิ่มเติม
XlaBuilder::Neg
การนิเสธแบบทีละองค์ประกอบ x -> -x
Neg(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - negate
ไม่ใช่
ดูเพิ่มเติม
XlaBuilder::Not
ตัวดำเนินการนิเสธเชิงตรรกะแบบทีละองค์ประกอบ x -> !(x)
Not(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - not
OptimizationBarrier
ดูเพิ่มเติม
XlaBuilder::OptimizationBarrier
บล็อกการเพิ่มประสิทธิภาพไม่ให้ย้ายการคำนวณข้ามขอบเขต
OptimizationBarrier(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ตรวจสอบว่ามีการประเมินอินพุตทั้งหมดก่อนตัวดำเนินการที่ขึ้นอยู่กับเอาต์พุตของ Barrier
ดูข้อมูล StableHLO ได้ที่ StableHLO - optimization_barrier
หรือ
ดูเพิ่มเติม
XlaBuilder::Or
ดำเนินการ OR แบบทีละองค์ประกอบของ lhs และ rhs
Or(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Or มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ สำหรับ Or
Or(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - หรือ
ฟีดขาออก
ดูเพิ่มเติม
XlaBuilder::Outfeed
เขียนอินพุตไปยังเอาต์ฟีด
Outfeed(operand, shape_with_layout, outfeed_config)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ของประเภท T |
shape_with_layout |
Shape |
กำหนดเลย์เอาต์ของข้อมูลที่โอน |
outfeed_config |
string |
ค่าคงที่ของการกำหนดค่าสำหรับคำสั่ง Outfeed |
shape_with_layout สื่อถึงรูปร่างที่วางไว้ซึ่งเราต้องการแสดง
ดูข้อมูล StableHLO ได้ที่ StableHLO - outfeed
แผ่นรอง
ดูเพิ่มเติม
XlaBuilder::Pad
Pad(operand, padding_value, padding_config)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ของประเภท T |
padding_value
|
XlaOp
|
สเกลาร์ประเภท T เพื่อเติมใน
การเพิ่มแพดดิ้ง |
padding_config
|
PaddingConfig
|
จำนวนการเว้นขอบทั้ง 2 ด้าน (ต่ำ สูง) และระหว่างองค์ประกอบของแต่ละ มิติ |
ขยายอาร์เรย์ operand ที่ระบุโดยการเพิ่มระยะขอบรอบอาร์เรย์และระหว่างองค์ประกอบของอาร์เรย์ด้วย padding_value ที่ระบุ padding_config
ระบุจำนวนการเว้นขอบและการเว้นภายในสำหรับแต่ละ
มิติข้อมูล
PaddingConfig เป็นฟิลด์ที่ซ้ำของ PaddingConfigDimension ซึ่งมีฟิลด์ 3 รายการสำหรับแต่ละมิติข้อมูล ได้แก่ edge_padding_low, edge_padding_high และ interior_padding
edge_padding_low และ edge_padding_high ระบุจำนวนการเพิ่ม Padding
ที่ด้านล่าง (ถัดจากดัชนี 0) และด้านบน (ถัดจากดัชนีสูงสุด) ของ
แต่ละมิติ ตามลำดับ จำนวนการเว้นขอบอาจเป็นค่าลบได้ โดย
ค่าสัมบูรณ์ของการเว้นขอบที่เป็นค่าลบจะระบุจำนวนองค์ประกอบที่จะนำออกจาก
มิติข้อมูลที่ระบุ
interior_padding ระบุจำนวนระยะห่างจากเส้นขอบที่เพิ่มระหว่างองค์ประกอบ 2 รายการในแต่ละมิติข้อมูล โดยต้องไม่ใช่ค่าลบ การเว้นวรรคภายในจะเกิดขึ้น
ตามตรรกะก่อนการเว้นวรรคขอบ ดังนั้นในกรณีของการเว้นวรรคขอบที่เป็นค่าลบ ระบบจะนำองค์ประกอบ
ออกจากตัวถูกดำเนินการที่มีการเว้นวรรคภายใน
การดำเนินการนี้จะไม่มีผลหากคู่การป้อนขอบทั้งหมดเป็น (0, 0) และค่าการป้อนภายในทั้งหมดเป็น 0 รูปภาพด้านล่างแสดงตัวอย่างค่าedge_paddingและinterior_paddingต่างๆ สำหรับอาร์เรย์ 2 มิติ

ดูข้อมูล StableHLO ได้ที่ StableHLO - pad
พารามิเตอร์
ดูเพิ่มเติม
XlaBuilder::Parameter
Parameter แสดงถึงอินพุตอาร์กิวเมนต์ในการคำนวณ
PartitionID
ดูเพิ่มเติม
XlaBuilder::BuildPartitionId
สร้าง partition_id ของกระบวนการปัจจุบัน
PartitionID(shape)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
shape |
Shape |
รูปร่างของข้อมูล |
PartitionID อาจปรากฏในข้อมูลการทิ้ง HLO แต่ไม่ได้มีไว้ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
ดูข้อมูล StableHLO ได้ที่ StableHLO - partition_id
PopulationCount
ดูเพิ่มเติม
XlaBuilder::PopulationCount
คำนวณจำนวนบิตที่ตั้งค่าในแต่ละองค์ประกอบของ operand
PopulationCount(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - popcnt
Pow
ดูเพิ่มเติม
XlaBuilder::Pow
ดำเนินการยกกำลังแบบทีละองค์ประกอบของ lhs ด้วย rhs
Pow(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Pow มีตัวเลือกอื่นที่รองรับการออกอากาศแบบหลายมิติ
Pow(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - power
จริง
ดูเพิ่มเติม
XlaBuilder::Real
ส่วนจริงของรูปร่างเชิงซ้อน (หรือจริง) แบบทีละองค์ประกอบ x -> real(x) หากตัวถูกดำเนินการเป็นประเภททศนิยม Real จะแสดงผลค่าเดียวกัน
Real(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - real
Recv
ดูเพิ่มเติม
XlaBuilder::Recv
Recv, RecvWithTokens และ RecvToHost เป็นการดำเนินการที่ทำหน้าที่เป็น
องค์ประกอบพื้นฐานของการสื่อสารใน HLO โดยปกติแล้วการดำเนินการเหล่านี้จะปรากฏในการดัมพ์ HLO เป็นส่วนหนึ่ง
ของการรับ/ส่งข้อมูลระดับต่ำหรือการโอนข้ามอุปกรณ์ แต่ไม่ได้มีไว้
ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
Recv(shape, handle)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
shape |
Shape |
รูปร่างของข้อมูลที่จะรับ |
handle |
ChannelHandle |
ตัวระบุที่ไม่ซ้ำกันสำหรับคู่การส่ง/รับแต่ละคู่ |
รับข้อมูลที่มีรูปร่างที่กำหนดจากคำสั่ง Send ในการคำนวณอื่น
ที่ใช้แฮนเดิลช่องเดียวกัน แสดงผล XlaOp สำหรับข้อมูลที่ได้รับ
ดูข้อมูล StableHLO ได้ที่ StableHLO - recv
RecvDone
ดูเพิ่มเติม
HloInstruction::CreateRecv และ HloInstruction::CreateRecvDone
เช่นเดียวกับ Send, API ไคลเอ็นต์ของการดำเนินการ Recv แสดงถึง
การสื่อสารแบบซิงโครนัส อย่างไรก็ตาม คำสั่งจะแยกย่อยภายใน
เป็นคำสั่ง HLO 2 รายการ (Recv และ RecvDone) เพื่อเปิดใช้การโอนข้อมูลแบบอะซิงโครนัส
Recv(const Shape& shape, int64 channel_id)
จัดสรรทรัพยากรที่จำเป็นเพื่อรับข้อมูลจากคำสั่ง Send
ที่มี channel_id เดียวกัน แสดงบริบทสำหรับทรัพยากรที่จัดสรร ซึ่งRecvDone คำสั่งต่อไปนี้ใช้เพื่อรอให้การโอนข้อมูลเสร็จสมบูรณ์ บริบทคือทูเพิลของ {บัฟเฟอร์รับ (รูปร่าง), ตัวระบุคำขอ (U32)} และใช้ได้เฉพาะคำสั่ง RecvDone เท่านั้น
เมื่อได้รับบริบทที่สร้างขึ้นจากคำสั่ง Recv ฟังก์ชันนี้จะรอให้การโอนข้อมูลเสร็จสมบูรณ์และส่งคืนข้อมูลที่ได้รับ
ลด (Reduce)
ดูเพิ่มเติม
XlaBuilder::Reduce
ใช้ฟังก์ชันการลดกับอาร์เรย์อย่างน้อย 1 รายการแบบขนาน
Reduce(operands..., init_values..., computation, dimensions_to_reduce)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operands
|
ลำดับของ N XlaOp
|
อาร์เรย์ N ของประเภท T_0,...,
T_{N-1} |
init_values
|
ลำดับของ N XlaOp
|
สเกลาร์ N ประเภท
T_0,..., T_{N-1} |
computation
|
XlaComputation
|
การคำนวณประเภท
T_0,..., T_{N-1}, T_0,
...,T_{N-1} ->
Collate(T_0,...,
T_{N-1}) |
dimensions_to_reduce
|
int64 อาร์เรย์
|
อาร์เรย์ของมิติข้อมูลที่ไม่ได้เรียงลำดับ ที่จะลด |
สถานที่:
- N ต้องมากกว่าหรือเท่ากับ 1
- การคำนวณต้องเป็นแบบเชื่อมโยง "โดยประมาณ" (ดูด้านล่าง)
- อาร์เรย์อินพุตทั้งหมดต้องมีมิติข้อมูลเดียวกัน
- ค่าเริ่มต้นทั้งหมดต้องสร้างเอกลักษณ์ภายใต้
computation - หาก
N = 1Collate(T)จะเป็นT - หาก
N > 1,Collate(T_0, ..., T_{N-1})เป็นทูเพิลขององค์ประกอบNประเภทT
การดำเนินการนี้จะลดมิติข้อมูลอย่างน้อย 1 รายการของอาร์เรย์อินพุตแต่ละรายการให้เป็นสเกลาร์
จำนวนมิติข้อมูลของอาร์เรย์ที่แสดงผลแต่ละรายการคือ
number_of_dimensions(operand) - len(dimensions) เอาต์พุตของ Op คือ
Collate(Q_0, ..., Q_N) โดยที่ Q_i เป็นอาร์เรย์ประเภท T_i ซึ่งมี
มิติข้อมูลตามที่อธิบายไว้ด้านล่าง
อนุญาตให้แบ็กเอนด์ต่างๆ เชื่อมโยงการคำนวณการลดอีกครั้งได้ ซึ่งอาจทำให้เกิดความแตกต่างของตัวเลข เนื่องจากฟังก์ชันการลดบางอย่าง เช่น การบวก ไม่ใช่การเชื่อมโยงสำหรับจำนวนทศนิยม อย่างไรก็ตาม หากช่วงของข้อมูลถูกจำกัด การบวกเลขทศนิยมจะใกล้เคียงกับการเชื่อมโยงมากพอสำหรับการใช้งานจริงส่วนใหญ่
ดูข้อมูล StableHLO ได้ที่ StableHLO - reduce
ตัวอย่าง
เมื่อลดตามมิติเดียวในอาร์เรย์ 1 มิติเดียวที่มีค่า [10, 11,
12, 13] โดยมีฟังก์ชันการลด f (ซึ่งก็คือ computation) ระบบจะคำนวณได้ดังนี้
f(10, f(11, f(12, f(init_value, 13)))
แต่ก็ยังมีอีกหลายกรณีที่เป็นไปได้ เช่น
f(init_value, f(f(10, f(init_value, 11)), f(f(init_value, 12), f(init_value, 13))))
ต่อไปนี้คือตัวอย่างรหัสเทียมคร่าวๆ ของวิธี การใช้การลด โดยใช้การบวกเป็นค่าเริ่มต้น ของการคำนวณการลดเป็น 0
result_shape <- remove all dims in dimensions from operand_shape
# Iterate over all elements in result_shape. The number of r's here is equal
# to the number of dimensions of the result.
for r0 in range(result_shape[0]), r1 in range(result_shape[1]), ...:
# Initialize this result element
result[r0, r1...] <- 0
# Iterate over all the reduction dimensions
for d0 in range(dimensions[0]), d1 in range(dimensions[1]), ...:
# Increment the result element with the value of the operand's element.
# The index of the operand's element is constructed from all ri's and di's
# in the right order (by construction ri's and di's together index over the
# whole operand shape).
result[r0, r1...] += operand[ri... di]
ต่อไปนี้เป็นตัวอย่างการลดอาร์เรย์ 2 มิติ (เมทริกซ์) รูปร่างมี 2 มิติ มิติที่ 0 มีขนาด 2 และมิติที่ 1 มีขนาด 3 ดังนี้

ผลลัพธ์ของการลดมิติข้อมูล 0 หรือ 1 ด้วยฟังก์ชัน "add"

โปรดทราบว่าผลลัพธ์ของการลดทั้ง 2 แบบคืออาร์เรย์ 1 มิติ แผนภาพแสดงรายการหนึ่งเป็นคอลัมน์ และอีกรายการเป็นแถวเพื่อความสะดวกในการมองเห็น
หากต้องการดูตัวอย่างที่ซับซ้อนมากขึ้น นี่คืออาร์เรย์ 3 มิติ มีจำนวนมิติข้อมูล 3 มิติ มิติข้อมูล 0 มีขนาด 4 มิติข้อมูล 1 มีขนาด 2 และมิติข้อมูล 2 มีขนาด 3 เพื่อความ ง่าย ค่า 1 ถึง 6 จะทำซ้ำในมิติข้อมูล 0

เช่นเดียวกับตัวอย่าง 2 มิติ เราสามารถลดมิติข้อมูลเพียงมิติเดียวได้ เช่น หากลด มิติข้อมูล 0 เราจะได้อาร์เรย์ 2 มิติที่ค่าทั้งหมดใน มิติข้อมูล 0 ถูกพับเป็นสเกลาร์
| 4 8 12 |
| 16 20 24 |
หากลดมิติข้อมูลที่ 2 เราจะได้อาร์เรย์ 2 มิติซึ่งค่าทั้งหมด ในมิติข้อมูลที่ 2 จะรวมกันเป็นสเกลาร์
| 6 15 |
| 6 15 |
| 6 15 |
| 6 15 |
โปรดทราบว่าลำดับสัมพัทธ์ระหว่างมิติข้อมูลที่เหลือในอินพุตจะยังคงอยู่ในเอาต์พุต แต่ระบบอาจกำหนดหมายเลขใหม่ให้กับมิติข้อมูลบางรายการ (เนื่องจากจำนวนมิติข้อมูลเปลี่ยนแปลง)
นอกจากนี้ เรายังลดมิติข้อมูลหลายรายการได้ด้วย การเพิ่มมิติข้อมูลที่ลดลง 0 และ 1 จะสร้างอาร์เรย์ 1 มิติ [20, 28, 36]
การลดอาร์เรย์ 3 มิติในทุกมิติจะทำให้เกิดสเกลาร์ 84
Variadic Reduce
เมื่อใช้ N > 1 ฟังก์ชัน Reduce จะมีความซับซ้อนมากขึ้นเล็กน้อย เนื่องจากจะ
ใช้กับอินพุตทั้งหมดพร้อมกัน ระบบจะส่งตัวถูกดำเนินการไปยัง
การคำนวณตามลำดับต่อไปนี้
- การเรียกใช้ค่าที่ลดลงสำหรับตัวถูกดำเนินการแรก
- ...
- ค่าที่ลดลงของตัวถูกดำเนินการที่ N
- ค่าอินพุตสำหรับตัวถูกดำเนินการแรก
- ...
- ค่าอินพุตสำหรับตัวถูกดำเนินการที่ N
ตัวอย่างเช่น ลองพิจารณาฟังก์ชันการลดต่อไปนี้ ซึ่งใช้เพื่อคำนวณค่าสูงสุดและ argmax ของอาร์เรย์ 1 มิติแบบขนานได้
f: (Float, Int, Float, Int) -> Float, Int
f(max, argmax, value, index):
if value >= max:
return (value, index)
else:
return (max, argmax)
สำหรับอาร์เรย์อินพุต 1 มิติ V = Float[N], K = Int[N] และค่าเริ่มต้น
I_V = Float, I_K = Int ผลลัพธ์ f_(N-1) ของการลดในมิติข้อมูลอินพุต
เพียงมิติเดียวจะเทียบเท่ากับการใช้แบบเรียกซ้ำต่อไปนี้
f_0 = f(I_V, I_K, V_0, K_0)
f_1 = f(f_0.first, f_0.second, V_1, K_1)
...
f_(N-1) = f(f_(N-2).first, f_(N-2).second, V_(N-1), K_(N-1))
การใช้การลดนี้กับอาร์เรย์ของค่าและอาร์เรย์ของดัชนีตามลำดับ (เช่น iota) จะวนซ้ำพร้อมกันในอาร์เรย์ และแสดงผลทูเพิล ที่มีค่าสูงสุดและดัชนีที่ตรงกัน
ReducePrecision
ดูเพิ่มเติม
XlaBuilder::ReducePrecision
จำลองผลของการแปลงค่าทศนิยมเป็นรูปแบบที่มีความแม่นยำต่ำกว่า (เช่น IEEE-FP16) และแปลงกลับเป็นรูปแบบเดิม คุณระบุจำนวนบิตของเลขชี้กำลังและแมนทิสซาในรูปแบบที่มีความแม่นยำต่ำกว่าได้ตามต้องการ แม้ว่าการใช้งานฮาร์ดแวร์บางอย่างอาจไม่รองรับขนาดบิตทั้งหมดก็ตาม
ReducePrecision(operand, exponent_bits, mantissa_bits)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ของประเภทจุดลอยตัว T |
exponent_bits |
int32 |
จำนวนบิตเลขชี้กำลังในรูปแบบความแม่นยำต่ำ |
mantissa_bits |
int32 |
จำนวนบิตของแมนทิสซาในรูปแบบความแม่นยำต่ำ |
ผลลัพธ์คืออาร์เรย์ประเภท T ระบบจะปัดเศษค่าอินพุตให้เป็นค่าที่ใกล้เคียงที่สุด
ซึ่งแสดงได้ด้วยจำนวนบิตของแมนทิสซาที่กำหนด (ใช้ความหมายของ "ปัดเศษคู่"
) และค่าใดๆ ที่เกินช่วงที่ระบุโดยจำนวนบิตของ
เลขชี้กำลังจะถูกจำกัดให้เป็นอนันต์บวกหรือลบ NaNจะยังคงอยู่
แม้ว่าอาจมีการแปลงเป็นค่า NaNที่แน่นอน
รูปแบบที่มีความแม่นยำต่ำกว่าต้องมีบิตเลขชี้กำลังอย่างน้อย 1 บิต (เพื่อแยกค่าศูนย์ออกจากค่าอนันต์ เนื่องจากทั้ง 2 ค่ามีแมนทิสซาเป็นศูนย์) และต้องมีจำนวนบิตแมนทิสซาที่ไม่เป็นลบ จำนวนบิตของเลขชี้กำลังหรือ
แมนทิสซาอาจเกินค่าที่สอดคล้องกับประเภท T จากนั้นส่วนที่สอดคล้องกันของ Conversion จะไม่มีการดำเนินการใดๆ
ดูข้อมูล StableHLO ได้ที่ StableHLO - reduce_precision
ReduceScatter
ดูเพิ่มเติม
XlaBuilder::ReduceScatter
ReduceScatter เป็นการดำเนินการแบบรวมที่ทำ AllReduce และ
จากนั้นกระจายผลลัพธ์โดยการแบ่งออกเป็นshard_count บล็อกตาม
scatter_dimension และรีพลิกากลุ่ม i จะได้รับ ith
ชาร์ด
ReduceScatter(operand, computation, scatter_dimension, shard_count,
replica_groups, channel_id, layout, use_global_device_ids)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand
|
XlaOp
|
อาร์เรย์หรือทูเพิลที่ไม่ว่างเปล่า ของอาร์เรย์ที่จะลดใน แบบจำลอง |
computation |
XlaComputation |
การคำนวณการลด |
scatter_dimension |
int64 |
มิติข้อมูลที่จะกระจาย |
shard_count
|
int64
|
จำนวนบล็อกที่จะแยก
scatter_dimension |
replica_groups
|
ReplicaGroup เวกเตอร์
|
กลุ่มที่ใช้ในการ ลด |
channel_id
|
ไม่บังคับ
ChannelHandle |
รหัสช่องที่ไม่บังคับสำหรับการสื่อสารข้ามโมดูล |
layout
|
ไม่บังคับ Layout
|
เลย์เอาต์หน่วยความจำที่ผู้ใช้ระบุ |
use_global_device_ids |
ไม่บังคับ bool |
ฟีเจอร์ที่ผู้ใช้ระบุ |
- เมื่อ
operandเป็นทูเพิลของอาร์เรย์ ระบบจะดำเนินการรีดิวซ์สแคตเตอร์กับแต่ละ องค์ประกอบของทูเพิล replica_groupsคือรายการกลุ่มจำลองที่จะดำเนินการลด (ดึงข้อมูลรหัสจำลองสำหรับจำลองปัจจุบันได้โดยใช้ReplicaId) ลำดับของจำลองในแต่ละกลุ่มจะกำหนด ลำดับที่จะกระจายผลลัพธ์การลดทั้งหมดreplica_groupsต้องว่างเปล่า (ในกรณีนี้แบบจำลองทั้งหมดจะอยู่ในกลุ่มเดียว) หรือมีจำนวนองค์ประกอบเท่ากับจำนวนแบบจำลอง เมื่อมีกลุ่มรีพลิกามากกว่า 1 กลุ่ม กลุ่มรีพลิกาทั้งหมดจะต้องมีขนาดเท่ากัน เช่นreplica_groups = {0, 2}, {1, 3}จะทำการลดระหว่างรีพลิกา0กับ2และ1กับ3แล้วกระจายผลลัพธ์shard_countคือขนาดของกลุ่มรีพลิกาทุกกลุ่ม เราต้องการข้อมูลนี้ในกรณีที่replica_groupsว่างเปล่า หากreplica_groupsไม่ว่างshard_countจะต้องเท่ากับขนาดของกลุ่มรีพลิเคชันแต่ละกลุ่มchannel_idใช้สำหรับการสื่อสารข้ามโมดูล โดยมีเพียงreduce-scatterการดำเนินการที่มีchannel_idเดียวกันเท่านั้นที่สื่อสารกันได้layoutดูข้อมูลเพิ่มเติมเกี่ยวกับเลย์เอาต์ได้ที่ xla::shapesuse_global_device_idsคือแฟล็กที่ผู้ใช้ระบุ เมื่อfalse(ค่าเริ่มต้น) ตัวเลขในreplica_groupsจะเป็นReplicaIdเมื่อtrueตัวเลขในreplica_groupsแสดงถึงรหัสส่วนกลางของ (ReplicaID*partition_count+partition_id) เช่น- โดยมี 2 สำเนาและ 4 พาร์ติชัน
- replica_groups={ {0,1,4,5},{2,3,6,7} } and use_global_device_ids=true
- group[0] = (0,0), (0,1), (1,0), (1,1)
- group[1] = (0,2), (0,3), (1,2), (1,3)
- โดยแต่ละคู่คือ (replica_id, partition_id)
รูปร่างเอาต์พุตคือรูปร่างอินพุตที่มีขนาดเล็กลง scatter_dimension
shard_count เท่า เช่น หากมี 2 สำเนาและตัวถูกดำเนินการมีค่า [1.0, 2.25] และ [3.0, 5.25] ตามลำดับใน 2 สำเนา ค่าเอาต์พุตจาก Op นี้ที่ scatter_dim คือ 0 จะเป็น [4.0] สำหรับสำเนาแรกและ [7.5] สำหรับสำเนาที่สอง
ดูข้อมูล StableHLO ได้ที่ StableHLO - reduce_scatter
ReduceScatter - ตัวอย่างที่ 1 - StableHLO
ในตัวอย่างข้างต้น มีรีพลิกา 2 รายการที่เข้าร่วมใน ReduceScatter ในแต่ละรีพลิกา โอเปอแรนด์มีรูปร่าง f32[2,4] การลดทั้งหมด (ผลรวม) จะดำเนินการในรีพลิกาทั้งหมด ซึ่งจะสร้างค่าที่ลดลงของรูปร่าง f32[2,4] ในแต่ละรีพลิกา จากนั้นระบบจะแบ่งค่าที่ลดลงนี้ออกเป็น 2 ส่วนตามมิติข้อมูล 1 เพื่อให้แต่ละส่วนมีรูปร่าง f32[2,2] แต่ละรีพลิกาในกลุ่มกระบวนการจะได้รับ ส่วนที่สอดคล้องกับตำแหน่งของรีพลิกาในกลุ่ม ด้วยเหตุนี้ เอาต์พุตใน แต่ละรีพลิก้าจึงมีรูปร่าง f32[2,2]
ReduceWindow
ดูเพิ่มเติม
XlaBuilder::ReduceWindow
ใช้ฟังก์ชันการลดกับองค์ประกอบทั้งหมดในแต่ละหน้าต่างของลำดับอาร์เรย์หลายมิติ N รายการ โดยสร้างอาร์เรย์หลายมิติ N รายการเดียวหรือเป็นทูเพิลเป็นเอาต์พุต อาร์เรย์เอาต์พุตแต่ละรายการมีจำนวนองค์ประกอบเท่ากับ
จำนวนตำแหน่งที่ถูกต้องของหน้าต่าง เลเยอร์การรวมอาจแสดงเป็น
ReduceWindow computation ที่ใช้จะส่งผ่านไปยัง init_values ทางด้านซ้ายมือเสมอ ซึ่งคล้ายกับ Reduce
ReduceWindow(operands..., init_values..., computation, window_dimensions,
window_strides, padding)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operands
|
N XlaOps
|
ลำดับของอาร์เรย์หลายมิติของประเภท T_0,..., T_{N-1} แต่ละรายการแสดงพื้นที่ฐานที่วางหน้าต่าง |
init_values
|
N XlaOps
|
ค่าเริ่มต้น N ค่าสำหรับการ ลดค่า โดยมีค่าเริ่มต้น 1 ค่าสำหรับตัวถูกดำเนินการแต่ละตัวใน N ตัว ดูรายละเอียดได้ที่ลด |
computation
|
XlaComputation
|
ฟังก์ชันลดประเภท T_0,
..., T_{N-1}, T_0, ..., T_{N-1}
-> Collate(T_0, ..., T_{N-1})
ที่จะใช้กับองค์ประกอบในแต่ละ
หน้าต่างของตัวถูกดำเนินการ
อินพุตทั้งหมด |
window_dimensions
|
ArraySlice<int64>
|
อาร์เรย์ของจำนวนเต็มสำหรับค่ามิติข้อมูล หน้าต่าง |
window_strides
|
ArraySlice<int64>
|
อาร์เรย์ของจำนวนเต็มสำหรับค่า ระยะก้าวกระโดดของหน้าต่าง |
base_dilations
|
ArraySlice<int64>
|
อาร์เรย์ของจำนวนเต็มสำหรับค่า การขยายฐาน |
window_dilations
|
ArraySlice<int64>
|
อาร์เรย์ของจำนวนเต็มสำหรับค่าการขยาย หน้าต่าง |
padding
|
Padding
|
ประเภทการเพิ่มขอบสำหรับหน้าต่าง (Padding::kSame ซึ่งเพิ่มขอบเพื่อให้ มีรูปร่างเอาต์พุตเหมือนกับ อินพุตหากระยะก้าวยาวเป็น 1 หรือ Padding::kValid ซึ่งไม่ใช้ การเพิ่มขอบและ "หยุด" หน้าต่าง เมื่อไม่พอดีอีกต่อไป) |
สถานที่:
- N ต้องมากกว่าหรือเท่ากับ 1
- อาร์เรย์อินพุตทั้งหมดต้องมีมิติข้อมูลเดียวกัน
- หาก
N = 1Collate(T)จะเป็นT - หาก
N > 1,Collate(T_0, ..., T_{N-1})เป็นทูเพิลขององค์ประกอบNประเภท(T0,...T{N-1})
ดูข้อมูล StableHLO ได้ที่ StableHLO - reduce_window
ReduceWindow - ตัวอย่าง 1
อินพุตคือเมทริกซ์ขนาด [4x6] และทั้ง window_dimensions และ window_stride_dimensions คือ [2x3]
// Create a computation for the reduction (maximum).
XlaComputation max;
{
XlaBuilder builder(client_, "max");
auto y = builder.Parameter(0, ShapeUtil::MakeShape(F32, {}), "y");
auto x = builder.Parameter(1, ShapeUtil::MakeShape(F32, {}), "x");
builder.Max(y, x);
max = builder.Build().value();
}
// Create a ReduceWindow computation with the max reduction computation.
XlaBuilder builder(client_, "reduce_window_2x3");
auto shape = ShapeUtil::MakeShape(F32, {4, 6});
auto input = builder.Parameter(0, shape, "input");
builder.ReduceWindow(
input,
/*init_val=*/builder.ConstantLiteral(LiteralUtil::MinValue(F32)),
*max,
/*window_dimensions=*/{2, 3},
/*window_stride_dimensions=*/{2, 3},
Padding::kValid);

ระยะก้าวย่าง 1 ในมิติข้อมูลระบุว่าตำแหน่งของหน้าต่างในมิติข้อมูล อยู่ห่างจากหน้าต่างที่อยู่ติดกัน 1 องค์ประกอบ หากต้องการระบุว่าไม่มีหน้าต่างใดซ้อนทับกัน window_stride_dimensions ควรเท่ากับ window_dimensions รูปภาพด้านล่างแสดงการใช้ค่า Stride ที่แตกต่างกัน 2 ค่า การเพิ่มระยะขอบจะใช้กับแต่ละมิติข้อมูลของอินพุตและการคำนวณ จะเหมือนกับว่าอินพุตมีมิติข้อมูลหลังจาก การเพิ่มระยะขอบ

สำหรับตัวอย่างการเพิ่มระยะขอบที่ไม่ใช่แบบง่าย ให้พิจารณาการคำนวณค่าต่ำสุดของ reduce-window
(ค่าเริ่มต้นคือ MAX_FLOAT) ที่มีมิติข้อมูล 3 และระยะก้าวย่าง 2 เหนืออาร์เรย์อินพุต [10000, 1000, 100, 10, 1] การเพิ่มช่องว่าง kValid จะคำนวณค่าต่ำสุดในช่วงเวลาที่ถูกต้อง 2 ช่วง ได้แก่ [10000, 1000, 100] และ [100, 10, 1] ซึ่งส่งผลให้ได้เอาต์พุต [100, 1] Padding kSame จะเพิ่มช่องว่างให้กับอาร์เรย์ก่อนเพื่อให้รูปร่างหลังจาก
หน้าต่างลดขนาดเหมือนกันกับอินพุตสำหรับการก้าวย่าง 1 โดยการเพิ่มองค์ประกอบเริ่มต้น
ทั้ง 2 ด้าน ซึ่งจะได้ [MAX_VALUE, 10000, 1000, 100, 10, 1,
MAX_VALUE] การเรียกใช้ reduce-window ในอาร์เรย์ที่มีการเพิ่มช่องว่างจะดำเนินการใน 3 หน้าต่าง [MAX_VALUE, 10000, 1000], [1000, 100, 10], [10, 1, MAX_VALUE] และ
ให้ผลลัพธ์เป็น [1000, 10, 1]
ลำดับการประเมินฟังก์ชันการลดจะกำหนดเองและอาจ
ไม่แน่นอน ดังนั้น ฟังก์ชันการลดจึงไม่ควรไวต่อการเชื่อมโยงใหม่มากเกินไป
ดูรายละเอียดเพิ่มเติมได้ในการสนทนาเกี่ยวกับกฎการเปลี่ยนกลุ่มในบริบทของ Reduce
ReduceWindow - ตัวอย่าง 2 - StableHLO
ในตัวอย่างด้านบน
Input) ตัวถูกดำเนินการมีรูปร่างอินพุตเป็น S32[3,2] มีค่าเป็น
[[1,2],[3,4],[5,6]]
ขั้นตอนที่ 1) การขยายฐานด้วยแฟกเตอร์ 2 ตามมิติแถวจะแทรกรู ระหว่างแต่ละแถวของตัวถูกดำเนินการ การเว้นวรรค 2 แถวที่ด้านบนและ 1 แถวที่ด้านล่างจะใช้หลังจากการขยาย ดังนั้น เทนเซอร์จึงสูงขึ้น
ขั้นตอนที่ 2) กำหนดหน้าต่างที่มีรูปร่าง [2,1] โดยมีการขยายหน้าต่าง [3,1] ซึ่งหมายความว่าแต่ละหน้าต่างจะเลือก 2 องค์ประกอบจากคอลัมน์เดียวกัน แต่จะเลือกองค์ประกอบที่ 2 จาก 3 แถวใต้แถวแรกแทนที่จะเลือกจากแถวที่อยู่ใต้แถวแรกโดยตรง
ขั้นตอนที่ 3) จากนั้นเลื่อนหน้าต่างไปทั่วตัวถูกดำเนินการโดยมีระยะก้าวย่างเป็น [4,1] ซึ่งจะ
ทำให้หน้าต่างเลื่อนลง 4 แถวในแต่ละครั้ง ขณะที่เลื่อน 1 คอลัมน์ในแต่ละครั้งในแนวนอน
ระบบจะป้อนค่า init_value ในเซลล์ที่ขยาย (ในกรณีนี้คือ init_value = 0) และจะไม่สนใจค่าที่ "ตก" อยู่ในเซลล์ที่ขยาย
เนื่องจากระยะก้าวย่างและการเพิ่มช่องว่าง บางหน้าต่างจึงทับซ้อนเฉพาะศูนย์และรู
ในขณะที่หน้าต่างอื่นๆ ทับซ้อนค่าอินพุตจริง
ขั้นตอนที่ 4) ภายในแต่ละหน้าต่าง ระบบจะรวมองค์ประกอบโดยใช้ฟังก์ชันลด (a, b) → a + b โดยเริ่มจากค่าเริ่มต้น 0 หน้าต่าง 2 บานบนสุด จะเห็นเฉพาะการเว้นวรรคและรู ดังนั้นผลลัพธ์จึงเป็น 0 หน้าต่างด้านล่าง จะบันทึกค่า 3 และ 4 จากอินพุตและแสดงค่าเหล่านั้นเป็นผลลัพธ์
ผลลัพธ์) เอาต์พุตสุดท้ายมีรูปร่าง S32[2,2] โดยมีค่าดังนี้ [[0,0],[3,4]]
Rem
ดูเพิ่มเติม
XlaBuilder::Rem
ดำเนินการหาเศษทีละองค์ประกอบของตัวตั้ง lhs และตัวหาร rhs
เครื่องหมายของผลลัพธ์จะมาจากตัวตั้ง และค่าสัมบูรณ์ของผลลัพธ์จะน้อยกว่าค่าสัมบูรณ์ของตัวหารเสมอ
Rem(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Rem มีเวอร์ชันอื่นที่รองรับการออกอากาศแบบหลายมิติ
Rem(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - remainder
ReplicaId
ดูเพิ่มเติม
XlaBuilder::ReplicaId
แสดงผลรหัสที่ไม่ซ้ำกัน (สเกลาร์ U32) ของรีเพล็กซ์
ReplicaId()
รหัสที่ไม่ซ้ำกันของแต่ละรีพลิกาคือจำนวนเต็มที่ไม่มีเครื่องหมายในช่วง [0, N) โดยที่ N คือจำนวนรีพลิกา เนื่องจากรีพลิกาทั้งหมดเรียกใช้โปรแกรมเดียวกัน การเรียกใช้ ReplicaId() ในโปรแกรมจะแสดงผลค่าที่แตกต่างกันในรีพลิกาแต่ละรายการ
ดูข้อมูล StableHLO ได้ที่ StableHLO - replica_id
ปรับรูปร่าง
ดูเพิ่มเติม
XlaBuilder::Reshape
และCollapse
เปลี่ยนรูปร่างมิติข้อมูลของอาร์เรย์เป็นการกำหนดค่าใหม่
Reshape(operand, dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ของประเภท T |
dimensions |
int64 เวกเตอร์ |
เวกเตอร์ของขนาดของมิติข้อมูลใหม่ |
ในเชิงแนวคิด การเปลี่ยนรูปร่างจะทำให้อาร์เรย์แบนเป็นเวกเตอร์แบบ 1 มิติของ
ค่าข้อมูลก่อน แล้วจึงปรับเวกเตอร์นี้ให้เป็นรูปร่างใหม่ อาร์กิวเมนต์อินพุต
คืออาร์เรย์ที่กำหนดเองของประเภท T, เวกเตอร์ค่าคงที่ที่คอมไพล์เวลาของดัชนีมิติข้อมูล
และเวกเตอร์ค่าคงที่ที่คอมไพล์เวลาของขนาดมิติข้อมูลสำหรับผลลัพธ์
dimensionsเวกเตอร์จะกำหนดขนาดของอาร์เรย์เอาต์พุต ค่าที่ดัชนี 0 ใน dimensions คือขนาดของมิติข้อมูล 0 ค่าที่ดัชนี 1 คือขนาดของมิติข้อมูล 1 และอื่นๆ ผลคูณของdimensionsมิติข้อมูลต้อง
เท่ากับผลคูณของขนาดมิติข้อมูลของตัวถูกดำเนินการ เมื่อปรับอาร์เรย์ที่ยุบแล้วให้เป็นอาร์เรย์หลายมิติที่กำหนดโดย dimensions ระบบจะจัดเรียงมิติข้อมูลใน dimensions จากมิติข้อมูลที่มีการเปลี่ยนแปลงช้าที่สุด (สำคัญที่สุด) ไปยังมิติข้อมูลที่มีการเปลี่ยนแปลงเร็วที่สุด (สำคัญน้อยที่สุด)
ตัวอย่างเช่น สมมติว่า v เป็นอาร์เรย์ที่มี 24 องค์ประกอบ
let v = f32[4x2x3] { { {10, 11, 12}, {15, 16, 17} },
{ {20, 21, 22}, {25, 26, 27} },
{ {30, 31, 32}, {35, 36, 37} },
{ {40, 41, 42}, {45, 46, 47} } };
let v012_24 = Reshape(v, {24});
then v012_24 == f32[24] {10, 11, 12, 15, 16, 17, 20, 21, 22, 25, 26, 27,
30, 31, 32, 35, 36, 37, 40, 41, 42, 45, 46, 47};
let v012_83 = Reshape(v, {8,3});
then v012_83 == f32[8x3] { {10, 11, 12}, {15, 16, 17},
{20, 21, 22}, {25, 26, 27},
{30, 31, 32}, {35, 36, 37},
{40, 41, 42}, {45, 46, 47} };
ในกรณีพิเศษ ฟังก์ชัน Reshape จะเปลี่ยนอาร์เรย์ที่มีองค์ประกอบเดียวเป็นสเกลาร์และ ในทางกลับกัน ตัวอย่างเช่น
Reshape(f32[1x1] { {5} }, {}) == 5;
Reshape(5, {1,1}) == f32[1x1] { {5} };
ดูข้อมูล StableHLO ได้ที่ StableHLO - reshape
ปรับรูปร่าง (ชัดเจน)
ดูเพิ่มเติม
XlaBuilder::Reshape
Reshape(shape, operand)
การดำเนินการ Reshape ที่ใช้รูปร่างเป้าหมายที่ชัดเจน
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
shape |
Shape |
รูปร่างเอาต์พุตของประเภท T |
operand |
XlaOp |
อาร์เรย์ของประเภท T |
Rev (ย้อนกลับ)
ดูเพิ่มเติม
XlaBuilder::Rev
Rev(operand, dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ของประเภท T |
dimensions |
ArraySlice<int64> |
มิติข้อมูลที่จะกลับ |
กลับลำดับขององค์ประกอบในอาร์เรย์ operand ตาม dimensions ที่ระบุ โดยสร้างอาร์เรย์เอาต์พุตที่มีรูปร่างเดียวกัน ระบบจะจัดเก็บองค์ประกอบแต่ละรายการของอาร์เรย์ตัวถูกดำเนินการที่ดัชนีหลายมิติลงในอาร์เรย์เอาต์พุตที่ดัชนีที่แปลงแล้ว ดัชนีหลายมิติจะได้รับการแปลงโดยการกลับดัชนีในแต่ละมิติที่จะกลับ (กล่าวคือ หากมิติที่มีขนาด N เป็นหนึ่งในมิติที่กลับ ดัชนี i จะได้รับการแปลงเป็น N - 1 - i)
การใช้งานหนึ่งของโอเปอเรชัน Rev คือการกลับอาร์เรย์น้ำหนักการแปลงตามมิติข้อมูลหน้าต่าง 2 มิติระหว่างการคำนวณการไล่ระดับสีในโครงข่ายประสาทเทียม
ดูข้อมูล StableHLO ได้ที่ StableHLO - reverse
RngNormal
ดูเพิ่มเติม
XlaBuilder::RngNormal
สร้างเอาต์พุตของรูปร่างที่กำหนดด้วยตัวเลขสุ่มที่สร้างขึ้นตาม \(N(\mu, \sigma)\) การแจกแจงแบบปกติ พารามิเตอร์ \(\mu\) และ \(\sigma\)รวมถึง รูปร่างเอาต์พุตต้องมีประเภทองค์ประกอบที่เป็นจุดลอยตัว นอกจากนี้ พารามิเตอร์ต้องมีค่าสเกลาร์
RngNormal(mu, sigma, shape)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
mu |
XlaOp |
สเกลาร์ประเภท T ที่ระบุค่าเฉลี่ยของตัวเลขที่สร้างขึ้น |
sigma
|
XlaOp
|
สเกลาร์ของประเภท T ที่ระบุค่าเบี่ยงเบนมาตรฐานของ ที่สร้างขึ้น |
shape |
Shape |
รูปร่างเอาต์พุตของประเภท T |
ดูข้อมูล StableHLO ได้ที่ StableHLO - rng
RngUniform
ดูเพิ่มเติม
XlaBuilder::RngUniform
สร้างเอาต์พุตของรูปร่างที่กำหนดด้วยตัวเลขสุ่มที่สร้างขึ้นตาม การแจกแจงแบบสม่ำเสมอในช่วง \([a,b)\)พารามิเตอร์และประเภทองค์ประกอบเอาต์พุต ต้องเป็นประเภทบูลีน ประเภทจำนวนเต็ม หรือประเภทจุดลอย และประเภทต้องสอดคล้องกัน ปัจจุบันแบ็กเอนด์ของ CPU และ GPU รองรับเฉพาะ F64, F32, F16, BF16, S64, U64, S32 และ U32 นอกจากนี้ พารามิเตอร์ต้องมีค่าสเกลาร์ หาก \(b <= a\) ผลลัพธ์เป็น การใช้งานที่กำหนด
RngUniform(a, b, shape)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
a |
XlaOp |
สเกลาร์ประเภท T ที่ระบุขีดจำกัดล่างของช่วง |
b |
XlaOp |
สเกลาร์ของประเภท T ที่ระบุขีดจำกัดบนของช่วง |
shape |
Shape |
รูปร่างเอาต์พุตของประเภท T |
ดูข้อมูล StableHLO ได้ที่ StableHLO - rng
RngBitGenerator
ดูเพิ่มเติม
XlaBuilder::RngBitGenerator
สร้างเอาต์พุตที่มีรูปร่างที่กำหนดซึ่งเต็มไปด้วยบิตแบบสุ่มที่สม่ำเสมอโดยใช้อัลกอริทึมที่ระบุ (หรือค่าเริ่มต้นของแบ็กเอนด์) และส่งคืนสถานะที่อัปเดตแล้ว (มีรูปร่างเดียวกับสถานะเริ่มต้น) และข้อมูลแบบสุ่มที่สร้างขึ้น
สถานะเริ่มต้นคือสถานะเริ่มต้นของการสร้างตัวเลขสุ่มปัจจุบัน โดยจะขึ้นอยู่กับอัลกอริทึมที่ใช้ รวมถึงรูปร่างและค่าที่ถูกต้องที่จำเป็น
ระบบรับประกันว่าเอาต์พุตจะเป็นฟังก์ชันที่กำหนดได้ของสถานะเริ่มต้น แต่ไม่รับประกันว่าเอาต์พุตจะกำหนดได้ระหว่างแบ็กเอนด์และคอมไพเลอร์เวอร์ชันต่างๆ
RngBitGenerator(algorithm, initial_state, shape)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
algorithm |
RandomAlgorithm |
อัลกอริทึม PRNG ที่จะใช้ |
initial_state |
XlaOp |
สถานะเริ่มต้นสำหรับอัลกอริทึม PRNG |
shape |
Shape |
รูปร่างเอาต์พุตสำหรับข้อมูลที่สร้างขึ้น |
ค่าที่ใช้ได้สำหรับ algorithm มีดังนี้
rng_default: อัลกอริทึมเฉพาะแบ็กเอนด์ที่มีข้อกำหนดด้านรูปร่างเฉพาะแบ็กเอนด์rng_three_fry: อัลกอริทึม PRNG ที่อิงตามตัวนับ ThreeFryinitial_stateรูปร่างคือu64[2]ที่มีค่าใดก็ได้ Salmon et al. SC 2011 เลขสุ่มแบบขนาน: ง่ายเหมือนนับ 1, 2, 3rng_philox: อัลกอริทึม Philox เพื่อสร้างตัวเลขสุ่มแบบคู่ขนาน รูปร่างของinitial_stateคือu64[3]ที่มีค่าใดก็ได้ Salmon et al. SC 2011 เลขสุ่มแบบขนาน: ง่ายเหมือนนับ 1, 2, 3
ดูข้อมูล StableHLO ได้ที่ StableHLO - rng_bit_generator
RngGetAndUpdateState
ดูเพิ่มเติม
HloInstruction::CreateRngGetAndUpdateState
API ของRngการดำเนินการต่างๆ จะแยกย่อยเป็นการดำเนินการ HLO ภายใน ซึ่งรวมถึงRngGetAndUpdateState
RngGetAndUpdateState ทำหน้าที่เป็น Primitive ใน HLO Op นี้อาจปรากฏในข้อมูลการทิ้ง HLO แต่ไม่ได้มีไว้ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
ทรงกลม
ดูเพิ่มเติม
XlaBuilder::Round
การปัดเศษแบบทีละองค์ประกอบ โดยปัดเศษออกจาก 0
Round(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
RoundNearestAfz
ดูเพิ่มเติม
XlaBuilder::RoundNearestAfz
ดำเนินการปัดเศษตามองค์ประกอบไปยังจำนวนเต็มที่ใกล้ที่สุด โดยปัดเศษที่เท่ากันออกจาก 0
RoundNearestAfz(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - round_nearest_afz
RoundNearestEven
ดูเพิ่มเติม
XlaBuilder::RoundNearestEven
การปัดเศษทีละองค์ประกอบ โดยปัดเศษเท่ากันเป็นจำนวนคู่ที่ใกล้ที่สุด
RoundNearestEven(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - round_nearest_even
Rsqrt
ดูเพิ่มเติม
XlaBuilder::Rsqrt
ส่วนกลับแบบทีละองค์ประกอบของการดำเนินการรากที่สอง x -> 1.0 / sqrt(x)
Rsqrt(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Rsqrt ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Rsqrt(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - rsqrt
สแกน
ดูเพิ่มเติม
XlaBuilder::Scan
ใช้ฟังก์ชันการลดกับอาร์เรย์ในมิติข้อมูลที่กำหนด ซึ่งจะสร้าง สถานะสุดท้ายและอาร์เรย์ของค่ากลาง
Scan(inputs..., inits..., to_apply, scan_dimension,
is_reverse, is_associative)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
inputs |
ลำดับของ m XlaOp |
อาร์เรย์ที่จะสแกน |
inits |
ลำดับของ k XlaOp |
การพกพาครั้งแรก |
to_apply |
XlaComputation |
การคำนวณประเภท i_0, ..., i_{m-1}, c_0, ..., c_{k-1} -> (o_0, ..., o_{n-1}, c'_0, ..., c'_{k-1}) |
scan_dimension |
int64 |
มิติข้อมูลที่จะสแกน |
is_reverse |
bool |
หากเป็นจริง ให้สแกนในลำดับย้อนกลับ |
is_associative |
bool (ไตรรัฐ) |
หากเป็นจริง การดำเนินการจะเป็นการเชื่อมโยง |
ฟังก์ชัน to_apply จะใช้กับองค์ประกอบใน inputs ตามลำดับตาม
scan_dimension หาก is_reverse เป็นเท็จ ระบบจะประมวลผลองค์ประกอบตามลำดับ 0 ถึง N-1 โดยที่ N คือขนาดของ scan_dimension หาก is_reverse เป็น
จริง ระบบจะประมวลผลองค์ประกอบจาก N-1 ลงไปจนถึง 0
ฟังก์ชัน to_apply จะใช้ตัวถูกดำเนินการ m + k รายการ
mองค์ประกอบปัจจุบันจากinputskมีค่าจากขั้นตอนก่อนหน้า (หรือinitsสำหรับองค์ประกอบแรก)
to_apply ฟังก์ชันจะแสดงผลทูเพิลของค่า n + k ดังนี้
nองค์ประกอบของoutputskมูลค่าตามบัญชีใหม่
การดำเนินการสแกนจะสร้างทูเพิลของn + kค่าดังนี้
nอาร์เรย์เอาต์พุตที่มีค่าเอาต์พุตสำหรับแต่ละขั้นตอนkสุดท้ายจะมีค่าหลังจากประมวลผลองค์ประกอบทั้งหมด
ประเภทของmอินพุตต้องตรงกับประเภทของmพารามิเตอร์แรกของ
to_applyที่มีมิติข้อมูลการสแกนเพิ่มเติม ประเภทเอาต์พุตของ n ต้องตรงกับประเภทของค่าที่ส่งคืนแรกของ n ของ to_apply โดยมีมิติข้อมูลการสแกนเพิ่มเติม
มิติข้อมูลการสแกนเพิ่มเติมในอินพุตและเอาต์พุตทั้งหมดต้องมีขนาดเท่ากัน N ประเภทของพารามิเตอร์ k สุดท้ายและค่าที่ส่งคืนของ
to_apply รวมถึง k ใน init ต้องตรงกัน
ตัวอย่างเช่น (m, n, k == 1, N == 3) สำหรับการส่งต่อเริ่มต้น i ให้ป้อน [a, b, c], ฟังก์ชัน f(x, c) -> (y, c') และ scan_dimension=0, is_reverse=false
- ขั้นตอนที่ 0:
f(a, i) -> (y0, c0) - ขั้นตอนที่ 1:
f(b, c0) -> (y1, c1) - ขั้นตอนที่ 2:
f(c, c1) -> (y2, c2)
เอาต์พุตของ Scan คือ ([y0, y1, y2], c2)
แผนภูมิกระจาย
ดูเพิ่มเติม
XlaBuilder::Scatter
การดำเนินการกระจาย XLA จะสร้างลำดับผลลัพธ์ซึ่งเป็นค่าของอาร์เรย์อินพุต operands โดยมีการอัปเดตหลายชิ้น (ที่ดัชนีที่ระบุโดย scatter_indices) ด้วยลำดับค่าใน updates โดยใช้ update_computation
Scatter(operands..., scatter_indices, updates..., update_computation,
dimension_numbers, indices_are_sorted, unique_indices)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operands |
ลำดับของ N XlaOp |
อาร์เรย์ N ประเภท T_0, ..., T_N ที่จะกระจาย |
scatter_indices |
XlaOp |
อาร์เรย์ที่มีดัชนีเริ่มต้นของชิ้นส่วนที่ต้องกระจาย |
updates |
ลำดับของ N XlaOp |
อาร์เรย์ N ของประเภท T_0, ..., T_N updates[i] มีค่าที่ต้องใช้สำหรับการกระจาย operands[i] |
update_computation |
XlaComputation |
การคำนวณที่จะใช้ในการรวมค่าที่มีอยู่ในอาร์เรย์อินพุตและการอัปเดตระหว่างการกระจาย การคำนวณนี้ควรเป็นประเภท T_0, ..., T_N, T_0, ..., T_N -> Collate(T_0, ..., T_N) |
index_vector_dim |
int64 |
มิติข้อมูลใน scatter_indices ที่มีดัชนีเริ่มต้น |
update_window_dims |
ArraySlice<int64> |
ชุดมิติข้อมูลในupdatesรูปร่างที่เป็นมิติข้อมูลหน้าต่าง |
inserted_window_dims |
ArraySlice<int64> |
ชุดขนาดหน้าต่างที่ต้องแทรกในรูปร่าง updates |
scatter_dims_to_operand_dims |
ArraySlice<int64> |
แผนที่มิติข้อมูลจากดัชนีแบบกระจายไปยังพื้นที่ดัชนีตัวถูกดำเนินการ ระบบจะตีความอาร์เรย์นี้เป็นการแมป i กับ scatter_dims_to_operand_dims[i] โดยต้องเป็นแบบหนึ่งต่อหนึ่งและครบถ้วน |
dimension_number |
ScatterDimensionNumbers |
หมายเลขมิติข้อมูลสำหรับการดำเนินการกระจาย |
indices_are_sorted |
bool |
ผู้โทรรับประกันว่าดัชนีจะได้รับการจัดเรียงหรือไม่ |
unique_indices |
bool |
ผู้โทรรับประกันว่าดัชนีจะไม่ซ้ำกันหรือไม่ |
สถานที่:
- N ต้องมากกว่าหรือเท่ากับ 1
operands[0], ...,operands[N-1] ต้องมีมิติข้อมูลเดียวกันทั้งหมดupdates[0], ...,updates[N-1] ต้องมีมิติข้อมูลเดียวกันทั้งหมด- หาก
N = 1Collate(T)จะเป็นT - หาก
N > 1,Collate(T_0, ..., T_N)เป็นทูเพิลขององค์ประกอบNประเภทT
หาก index_vector_dim เท่ากับ scatter_indices.rank เราจะถือว่า scatter_indices มีมิติข้อมูล1 ต่อท้าย
เรากำหนด update_scatter_dims ประเภท ArraySlice<int64> เป็นชุดของ
มิติข้อมูลในรูปร่าง updates ที่ไม่ได้อยู่ใน update_window_dims โดยเรียงจากน้อยไปมาก
อาร์กิวเมนต์ของฟังก์ชัน scatter ควรเป็นไปตามข้อจำกัดต่อไปนี้
อาร์เรย์
updatesแต่ละรายการต้องมีมิติข้อมูลupdate_window_dims.size + scatter_indices.rank - 1ขอบเขตของมิติข้อมูล
iในอาร์เรย์updatesแต่ละรายการต้องเป็นไปตามข้อกำหนดต่อไปนี้- หาก
iอยู่ในupdate_window_dims(เช่น เท่ากับupdate_window_dims[k] สำหรับkบางรายการ) ขอบเขตของมิติข้อมูลiในupdatesต้องไม่เกินขอบเขตที่สอดคล้องกันของoperandหลังจาก พิจารณาinserted_window_dimsแล้ว (เช่นadjusted_window_bounds[k] โดยที่adjusted_window_boundsมี ขอบเขตของoperandโดยนำขอบเขตที่ดัชนีinserted_window_dimsออก) - หาก
iอยู่ในupdate_scatter_dims(เช่น เท่ากับupdate_scatter_dims[k] สำหรับkบางรายการ) ขอบเขตของมิติข้อมูลiในupdatesต้องเท่ากับขอบเขตที่สอดคล้องกันของscatter_indicesโดยข้ามindex_vector_dim(เช่นscatter_indices.shape.dims[k] หากk<index_vector_dimและscatter_indices.shape.dims[k+1] ในกรณีอื่นๆ)
- หาก
update_window_dimsต้องเรียงตามลำดับจากน้อยไปมาก ต้องไม่มีหมายเลขมิติข้อมูลที่ซ้ำกัน และต้องอยู่ในช่วง[0, updates.rank)inserted_window_dimsต้องเรียงตามลำดับจากน้อยไปมาก ต้องไม่มีหมายเลขมิติข้อมูลที่ซ้ำกัน และต้องอยู่ในช่วง[0, operand.rank)operand.rankต้องเท่ากับผลรวมของupdate_window_dims.sizeและinserted_window_dims.sizescatter_dims_to_operand_dims.sizeต้องเท่ากับscatter_indices.shape.dims[index_vector_dim] และค่าต้องอยู่ใน ช่วง[0, operand.rank)
สำหรับดัชนี U ในอาร์เรย์ updates แต่ละรายการ ดัชนี I ที่สอดคล้องกันใน
อาร์เรย์ operands ที่สอดคล้องกันซึ่งต้องใช้การอัปเดตนี้จะ
คำนวณได้ดังนี้
- กำหนดให้
G= {U[k] forkinupdate_scatter_dims} ใช้Gเพื่อค้นหา เวกเตอร์ดัชนีSในอาร์เรย์scatter_indicesโดยที่S[i] =scatter_indices[Combine(G,i)] โดยที่ Combine(A, b) จะแทรก b ที่ ตำแหน่งindex_vector_dimลงใน A - สร้างดัชนี
Sinลงในoperandโดยใช้Sด้วยการกระจายSโดยใช้แผนที่scatter_dims_to_operand_dimsในรูปแบบที่เป็นทางการมากขึ้นSin[scatter_dims_to_operand_dims[k]] =S[k] ifk<scatter_dims_to_operand_dims.size.Sin[_] =0มิฉะนั้น
- สร้างดัชนี
Winลงในอาร์เรย์operandsแต่ละรายการโดยกระจายดัชนีที่update_window_dimsในUตามinserted_window_dimsในรูปแบบที่เป็นทางการมากขึ้นWin[window_dims_to_operand_dims(k)] =U[k] ifkis inupdate_window_dims, wherewindow_dims_to_operand_dimsis the monotonic function with domain [0,update_window_dims.size) and range [0,operand.rank) \inserted_window_dims. (เช่น หากupdate_window_dims.sizeคือ4,operand.rankคือ6และinserted_window_dimsคือ {0,2} แล้วwindow_dims_to_operand_dimsคือ {0→1,1→3,2→4,3→5})Win[_] =0มิฉะนั้น
IคือWin+Sinโดยที่ + คือการบวกแบบทีละองค์ประกอบ
โดยสรุปแล้ว การดำเนินการกระจายสามารถกำหนดได้ดังนี้
- เริ่มต้น
outputด้วยoperandsกล่าวคือ สำหรับดัชนีทั้งหมดJสำหรับดัชนีทั้งหมดOในอาร์เรย์operands[J]:
output[J][O] =operands[J][O] - สำหรับทุกดัชนี
Uในอาร์เรย์updates[J] และดัชนีที่สอดคล้องกันOในอาร์เรย์operand[J] หากOเป็นดัชนีที่ถูกต้องสำหรับoutput:
(output[0][O], ...,output[N-1][O]) =update_computation(output[0][O], ..., ,output[N-1][O],updates[0][U], ...,updates[N-1][U])
ลำดับการใช้การอัปเดตจะไม่มีการกำหนด ดังนั้น เมื่อดัชนีหลายรายการใน updates อ้างอิงดัชนีเดียวกันใน operands ค่าที่เกี่ยวข้องใน output จะไม่แน่นอน
โปรดทราบว่าพารามิเตอร์แรกที่ส่งไปยัง update_computation จะเป็นค่าปัจจุบันจากอาร์เรย์ output เสมอ และพารามิเตอร์ที่สองจะเป็นค่าจากอาร์เรย์ updates เสมอ ซึ่งสำคัญอย่างยิ่ง
โดยเฉพาะในกรณีที่ update_computationไม่สลับที่
หากตั้งค่า indices_are_sorted เป็น "จริง" XLA จะถือว่าผู้ใช้ได้จัดเรียง scatter_indices (ตามลำดับจากน้อยไปมาก หลังจากกระจายค่าตาม scatter_dims_to_operand_dims) แล้ว หากไม่เป็นเช่นนั้น
ความหมายจะขึ้นอยู่กับการใช้งาน
หากตั้งค่า unique_indices เป็น "จริง" XLA จะถือว่าองค์ประกอบทั้งหมดที่กระจายอยู่มีค่าที่ไม่ซ้ำกัน
ดังนั้น XLA จึงสามารถใช้การดำเนินการที่ไม่ใช่แบบอะตอมได้ หากตั้งค่า
unique_indicesเป็น "จริง" และดัชนีที่กระจายอยู่ไม่ซ้ำกัน
ความหมายจะขึ้นอยู่กับการใช้งาน
โดยทั่วไปแล้ว การดำเนินการ Scatter สามารถมองได้ว่าเป็นการดำเนินการผกผันของการดำเนินการ Gather กล่าวคือ การดำเนินการ Scatter จะอัปเดตองค์ประกอบในอินพุตที่ดึงมาโดย การดำเนินการ Gather ที่สอดคล้องกัน
ดูคำอธิบายอย่างไม่เป็นทางการและตัวอย่างโดยละเอียดได้ที่ส่วน "คำอธิบายอย่างไม่เป็นทางการ" ในGather
ดูข้อมูล StableHLO ได้ที่ StableHLO - scatter
Scatter - ตัวอย่าง 1 - StableHLO
ในรูปภาพด้านบน แต่ละแถวของตารางคือตัวอย่างของดัชนีการอัปเดต ตัวอย่าง มาดูทีละขั้นตอนจากซ้าย(อัปเดตดัชนี) ไปขวา(ดัชนีผลลัพธ์) กัน
อินพุต) input มีรูปร่าง S32[2,3,4,2] scatter_indices มีรูปร่าง
S64[2,2,3,2] updates มีรูปร่าง S32[2,2,3,1,2]
อัปเดตดัชนี) เป็นส่วนหนึ่งของข้อมูลที่เราได้รับ update_window_dims:[3,4] ซึ่ง
บอกเราว่ามิติข้อมูล 3 และมิติข้อมูล 4 ของ updates คือมิติข้อมูลหน้าต่าง ซึ่งไฮไลต์เป็นสีเหลือง
ซึ่งช่วยให้เราทราบว่า update_scatter_dims = [0,1,2]
อัปเดตดัชนีการกระจาย) แสดง updated_scatter_dims ที่ดึงออกมาสำหรับแต่ละรายการ
(ส่วนที่ไม่ได้เป็นสีเหลืองของคอลัมน์อัปเดตดัชนี)
ดัชนีเริ่มต้น) เมื่อดูที่รูปภาพเทนเซอร์ scatter_indices เราจะเห็นว่าค่าจากขั้นตอนก่อนหน้า (อัปเดตดัชนีการกระจาย) จะระบุตำแหน่งของดัชนีเริ่มต้น จาก index_vector_dim เรายังทราบมิติข้อมูลของ
starting_indices ที่มีดัชนีเริ่มต้น ซึ่งสำหรับ
scatter_indices คือมิติข้อมูลที่ 3 ที่มีขนาด 2
ดัชนีเริ่มต้นแบบเต็ม) scatter_dims_to_operand_dims = [2,1] บอกเราว่าองค์ประกอบแรก
ของเวกเตอร์ดัชนีจะไปที่มิติข้อมูล 2 ของตัวถูกดำเนินการ องค์ประกอบที่ 2 ของเวกเตอร์ดัชนีจะไปที่มิติข้อมูล 1 ของตัวถูกดำเนินการ ระบบจะป้อนมิติข้อมูลตัวถูกดำเนินการที่เหลือด้วย 0
ดัชนีการประมวลผลแบบกลุ่มทั้งหมด) เราจะเห็นพื้นที่ที่ไฮไลต์สีม่วงแสดงในคอลัมน์นี้(ดัชนีการประมวลผลแบบกลุ่มทั้งหมด) คอลัมน์ดัชนีการกระจายการอัปเดต และคอลัมน์ดัชนีการอัปเดต
ดัชนีหน้าต่างแบบเต็ม) คำนวณจาก update_window_dimensions [3,4]
ดัชนีผลลัพธ์) การเพิ่มดัชนีเริ่มต้นแบบเต็ม ดัชนีการจัดกลุ่มแบบเต็ม และดัชนีหน้าต่างแบบเต็ม
ในเทนเซอร์ operand โปรดสังเกตว่าภูมิภาคที่ไฮไลต์สีเขียว
สอดคล้องกับoperandรูปภาพด้วย ระบบจะข้ามแถวสุดท้ายเนื่องจากอยู่นอกเทนเซอร์ operand
เลือก
ดูเพิ่มเติม
XlaBuilder::Select
สร้างอาร์เรย์เอาต์พุตจากองค์ประกอบของอาร์เรย์อินพุต 2 รายการตาม ค่าของอาร์เรย์เพรดิเคต
Select(pred, on_true, on_false)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
pred |
XlaOp |
อาร์เรย์ของประเภท PRED |
on_true |
XlaOp |
อาร์เรย์ของประเภท T |
on_false |
XlaOp |
อาร์เรย์ของประเภท T |
อาร์เรย์ on_true และ on_false ต้องมีรูปร่างเดียวกัน ซึ่งเป็นรูปร่างของอาร์เรย์เอาต์พุตด้วย อาร์เรย์ pred ต้องมีมิติข้อมูลเดียวกับ
on_true และ on_false โดยมีประเภทองค์ประกอบเป็น PRED
สำหรับองค์ประกอบ P แต่ละรายการของ pred องค์ประกอบที่เกี่ยวข้องของอาร์เรย์เอาต์พุตจะ
นำมาจาก on_true หากค่าของ P คือ true และจาก on_false หากค่าของ P คือ false ในรูปแบบที่จำกัดของการออกอากาศ
pred อาจเป็นสเกลาร์ประเภท PRED ในกรณีนี้ อาร์เรย์เอาต์พุตจะมาจาก on_true ทั้งหมดหาก pred เป็น true และมาจาก on_false หาก pred เป็น false
ตัวอย่างที่มี pred ที่ไม่ใช่สเกลาร์
let pred: PRED[4] = {true, false, false, true};
let v1: s32[4] = {1, 2, 3, 4};
let v2: s32[4] = {100, 200, 300, 400};
==>
Select(pred, v1, v2) = s32[4]{1, 200, 300, 4};
ตัวอย่างที่มีสเกลาร์ pred
let pred: PRED = true;
let v1: s32[4] = {1, 2, 3, 4};
let v2: s32[4] = {100, 200, 300, 400};
==>
Select(pred, v1, v2) = s32[4]{1, 2, 3, 4};
ระบบรองรับการเลือกระหว่างทูเพิล ทูเพิลถือเป็นประเภทสเกลาร์
สำหรับวัตถุประสงค์นี้ หาก on_true และ on_false เป็นทูเพิล (ซึ่งต้องมีรูปร่างเดียวกัน) pred จะต้องเป็นสเกลาร์ประเภท PRED
ดูข้อมูล StableHLO ได้ที่ StableHLO - select
SelectAndScatter
ดูเพิ่มเติม
XlaBuilder::SelectAndScatter
การดำเนินการนี้ถือเป็นการดำเนินการแบบคอมโพสิตที่คำนวณ ReduceWindow ในอาร์เรย์ operand ก่อนเพื่อเลือกองค์ประกอบจากแต่ละหน้าต่าง แล้วกระจายอาร์เรย์ source ไปยังดัชนีขององค์ประกอบที่เลือกเพื่อสร้างอาร์เรย์เอาต์พุตที่มีรูปร่างเหมือนกับอาร์เรย์ตัวถูกดำเนินการ ฟังก์ชันไบนารี
select ใช้เพื่อเลือกองค์ประกอบจากแต่ละหน้าต่างโดยการใช้ฟังก์ชัน
ในแต่ละหน้าต่าง และจะเรียกใช้กับพร็อพเพอร์ตี้ที่เวกเตอร์ดัชนีของพารามิเตอร์แรก
มีค่าตามพจนานุกรมน้อยกว่าเวกเตอร์ดัชนีของพารามิเตอร์ที่สอง ฟังก์ชัน select จะแสดงผล true หากเลือกพารามิเตอร์แรก และแสดงผล false หากเลือกพารามิเตอร์ที่สอง และฟังก์ชันต้องมีคุณสมบัติการถ่ายทอด (กล่าวคือ หาก select(a, b) และ select(b, c) เป็น true แล้ว select(a, c) ก็จะเป็น true ด้วย) เพื่อให้องค์ประกอบที่เลือกไม่ขึ้นอยู่กับลำดับขององค์ประกอบที่ข้ามสำหรับหน้าต่างที่กำหนด
ฟังก์ชัน scatter จะใช้กับดัชนีที่เลือกแต่ละรายการในอาร์เรย์เอาต์พุต โดย
ต้องใช้พารามิเตอร์สเกลาร์ 2 รายการ
- ค่าปัจจุบันที่ดัชนีที่เลือกในอาร์เรย์เอาต์พุต
- ค่ากระจัดกระจายจาก
sourceที่ใช้กับดัชนีที่เลือก
โดยจะรวมพารามิเตอร์ทั้ง 2 รายการและแสดงผลค่าสเกลาร์ที่ใช้เพื่ออัปเดต
ค่าที่ดัชนีที่เลือกในอาร์เรย์เอาต์พุต ในตอนแรก ระบบจะตั้งค่าดัชนีทั้งหมดของอาร์เรย์เอาต์พุตเป็น init_value
อาร์เรย์เอาต์พุตมีรูปร่างเหมือนกับอาร์เรย์ operand และอาร์เรย์ source
ต้องมีรูปร่างเหมือนกับผลลัพธ์ของการใช้การดำเนินการ ReduceWindow
กับอาร์เรย์ operand SelectAndScatter ใช้เพื่อ
ส่งต่อค่าการไล่ระดับสีสำหรับเลเยอร์การรวมในโครงข่ายประสาทเทียมได้
SelectAndScatter(operand, select, window_dimensions, window_strides, padding,
source, init_value, scatter)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand
|
XlaOp
|
อาร์เรย์ของประเภท T ที่ หน้าต่างเลื่อน |
select
|
XlaComputation
|
การคำนวณไบนารีประเภท T, T
-> PRED เพื่อใช้กับองค์ประกอบทั้งหมดในแต่ละหน้าต่าง โดยจะแสดงผล true หากเลือกพารามิเตอร์แรก และแสดงผล false หากเลือกพารามิเตอร์ที่สอง |
window_dimensions
|
ArraySlice<int64>
|
อาร์เรย์ของจำนวนเต็มสำหรับค่ามิติข้อมูล หน้าต่าง |
window_strides
|
ArraySlice<int64>
|
อาร์เรย์ของจำนวนเต็มสำหรับค่า ระยะก้าวกระโดดของหน้าต่าง |
padding
|
Padding
|
ประเภทการเพิ่มระยะขอบสำหรับหน้าต่าง (Padding::kSame หรือ Padding::kValid) |
source
|
XlaOp
|
อาร์เรย์ของประเภท T ที่มีค่า ที่จะกระจาย |
init_value
|
XlaOp
|
ค่าสเกลาร์ของประเภท T สำหรับ ค่าเริ่มต้นของอาร์เรย์ เอาต์พุต |
scatter
|
XlaComputation
|
การคำนวณไบนารีประเภท T, T
-> T เพื่อใช้แต่ละองค์ประกอบแหล่งที่มาของ Scatter กับองค์ประกอบปลายทาง |
รูปภาพด้านล่างแสดงตัวอย่างการใช้ SelectAndScatter โดยฟังก์ชัน select
จะคำนวณค่าสูงสุดในพารามิเตอร์ โปรดทราบว่าเมื่อหน้าต่างซ้อนทับกัน ดังในรูปที่ (2) ด้านล่าง หน้าต่างต่างๆ อาจเลือกดัชนีของอาร์เรย์ operand หลายครั้ง ในรูปภาพ องค์ประกอบที่มีค่า 9 จะได้รับการเลือกโดยทั้งหน้าต่างด้านบน (สีน้ำเงินและสีแดง) และฟังก์ชันการบวกแบบไบนารี scatter จะสร้างองค์ประกอบเอาต์พุตที่มีค่า 8 (2 + 6)

ลำดับการประเมินค่าของฟังก์ชัน scatter จะเป็นแบบสุ่มและอาจ
ไม่แน่นอน ดังนั้น ฟังก์ชัน scatter จึงไม่ควรไวต่อการเชื่อมโยงใหม่มากเกินไป
ดูรายละเอียดเพิ่มเติมได้ในการสนทนาเกี่ยวกับกฎการเปลี่ยนกลุ่มในบริบทของ Reduce
ดูข้อมูล StableHLO ได้ที่ StableHLO - select_and_scatter
ส่ง
ดูเพิ่มเติม
XlaBuilder::Send
Send, SendWithTokens และ SendToHost เป็นการดำเนินการที่ทำหน้าที่เป็น
องค์ประกอบพื้นฐานของการสื่อสารใน HLO โดยปกติแล้วการดำเนินการเหล่านี้จะปรากฏในการดัมพ์ HLO เป็นส่วนหนึ่ง
ของการรับ/ส่งข้อมูลระดับต่ำหรือการโอนข้ามอุปกรณ์ แต่ไม่ได้มีไว้
ให้ผู้ใช้ปลายทางสร้างขึ้นด้วยตนเอง
Send(operand, handle)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ข้อมูลที่จะส่ง (อาร์เรย์ของประเภท T) |
handle |
ChannelHandle |
ตัวระบุที่ไม่ซ้ำกันสำหรับคู่การส่ง/รับแต่ละคู่ |
ส่งข้อมูลตัวถูกดำเนินการที่ระบุไปยังคำสั่ง Recv ในการคำนวณอื่น
ที่ใช้แฮนเดิลช่องเดียวกัน ไม่แสดงข้อมูลใดๆ
API ไคลเอ็นต์ของการดำเนินการ Send จะแสดงการสื่อสารแบบซิงโครนัสและแยกย่อยเป็นการดำเนินการ HLO 2 รายการ (Send และ SendDone) ภายในเพื่อเปิดใช้การโอนข้อมูลแบบอะซิงโครนัส ซึ่งคล้ายกับการดำเนินการ Recv
ดูเพิ่มเติม
HloInstruction::CreateSend และ HloInstruction::CreateSendDone
Send(HloInstruction operand, int64 channel_id)
เริ่มการโอนตัวถูกดำเนินการแบบไม่พร้อมกันไปยังทรัพยากรที่จัดสรรโดยคำสั่ง Recv ที่มีรหัสแชแนลเดียวกัน ส่งคืนบริบทซึ่งใช้โดยSendDoneคำสั่งต่อไปนี้เพื่อรอให้การโอนข้อมูลเสร็จสมบูรณ์ บริบทคือ Tuple ของ {ตัวถูกดำเนินการ (รูปร่าง), ตัวระบุคำขอ
(U32)} และใช้ได้เฉพาะในคำสั่ง SendDone
ดูข้อมูล StableHLO ได้ที่ StableHLO - send
SendDone
ดูเพิ่มเติม
HloInstruction::CreateSendDone
SendDone(HloInstruction context)
เมื่อได้รับบริบทที่สร้างขึ้นจากคำสั่ง Send จะรอให้การโอนข้อมูลเสร็จสมบูรณ์
คำสั่งไม่แสดงข้อมูลใดๆ
การกำหนดเวลาของคำแนะนำในช่อง
ลำดับการดำเนินการของคำสั่ง 4 รายการสำหรับแต่ละช่อง (Recv, RecvDone,
Send, SendDone) เป็นดังนี้

Recvเกิดขึ้นก่อนSendSendเกิดขึ้นก่อนRecvDoneRecvเกิดขึ้นก่อนRecvDoneSendเกิดขึ้นก่อนSendDone
เมื่อคอมไพเลอร์แบ็กเอนด์สร้างกำหนดการเชิงเส้นสำหรับการคำนวณแต่ละรายการที่ สื่อสารผ่านคำสั่งของช่อง จะต้องไม่มีรอบในการคำนวณ ตัวอย่างเช่น ตารางเวลาด้านล่างจะทำให้เกิดภาวะหยุดชะงัก

SetDimensionSize
ดูเพิ่มเติม
XlaBuilder::SetDimensionSize
กำหนดขนาดแบบไดนามิกของมิติข้อมูลที่ระบุของ XlaOp ตัวถูกดำเนินการต้องมีรูปร่างเป็นอาร์เรย์
SetDimensionSize(operand, val, dimension)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์อินพุต n มิติ |
val |
XlaOp |
int32 ที่แสดงขนาดแบบไดนามิกของรันไทม์ |
dimension
|
int64
|
ค่าในช่วง [0, n) ที่ระบุ
มิติข้อมูล |
ส่งผ่านตัวถูกดำเนินการเป็นผลลัพธ์ โดยมีมิติข้อมูลแบบไดนามิกที่คอมไพเลอร์ติดตาม
การดำเนินการลดที่ดาวน์สตรีมจะไม่สนใจค่าที่เพิ่ม
let v: f32[10] = f32[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
let five: s32 = 5;
let six: s32 = 6;
// Setting dynamic dimension size doesn't change the upper bound of the static
// shape.
let padded_v_five: f32[10] = set_dimension_size(v, five, /*dimension=*/0);
let padded_v_six: f32[10] = set_dimension_size(v, six, /*dimension=*/0);
// sum == 1 + 2 + 3 + 4 + 5
let sum:f32[] = reduce_sum(padded_v_five);
// product == 1 * 2 * 3 * 4 * 5
let product:f32[] = reduce_product(padded_v_five);
// Changing padding size will yield different result.
// sum == 1 + 2 + 3 + 4 + 5 + 6
let sum:f32[] = reduce_sum(padded_v_six);
ShiftLeft
ดูเพิ่มเติม
XlaBuilder::ShiftLeft
ดำเนินการเลื่อนบิตไปทางซ้ายทีละองค์ประกอบใน lhs ตามจำนวนบิต rhs
ShiftLeft(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
ShiftLeft มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ
ShiftLeft(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - shift_left
ShiftRightArithmetic
ดูเพิ่มเติม
XlaBuilder::ShiftRightArithmetic
ดำเนินการเลื่อนบิตไปทางขวาแบบอาร์ทิเมติกทีละองค์ประกอบใน lhs ตามจำนวนบิตใน rhs
ShiftRightArithmetic(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
ShiftRightArithmetic มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ
ShiftRightArithmetic(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - shift_right_arithmetic
ShiftRightLogical
ดูเพิ่มเติม
XlaBuilder::ShiftRightLogical
ดำเนินการเลื่อนบิตทางตรรกะไปทางขวาแบบทีละองค์ประกอบใน lhs ตามจำนวนบิต rhs
ShiftRightLogical(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
ShiftRightLogical มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ
ShiftRightLogical(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - shift_right_logical
เซ็น
ดูเพิ่มเติม
XlaBuilder::Sign
Sign(operand) การดำเนินการเครื่องหมายแบบทีละองค์ประกอบ x -> sgn(x) โดยที่
\[\text{sgn}(x) = \begin{cases} -1 & x < 0\\ -0 & x = -0\\ NaN & x = NaN\\ +0 & x = +0\\ 1 & x > 0 \end{cases}\]
โดยใช้ตัวดำเนินการเปรียบเทียบของประเภทองค์ประกอบ operand
Sign(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
ดูข้อมูล StableHLO ได้ที่ StableHLO - sign
Sin
Sin(operand) ฟังก์ชันไซน์แบบองค์ประกอบต่อองค์ประกอบ x -> sin(x)
ดูเพิ่มเติม
XlaBuilder::Sin
Sin(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Sin ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Sin(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - sine
Slice
ดูเพิ่มเติม
XlaBuilder::Slice
การแบ่งส่วนจะดึงข้อมูลอาร์เรย์ย่อยจากอาร์เรย์อินพุต อาร์เรย์ย่อยมี จำนวนมิติข้อมูลเท่ากับอินพุต และมีค่าภายในกรอบล้อมรอบ ภายในอาร์เรย์อินพุต โดยมิติข้อมูลและดัชนีของกรอบล้อมรอบ จะกำหนดเป็นอาร์กิวเมนต์ในการดำเนินการ Slice
Slice(operand, start_indices, limit_indices, strides)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
อาร์เรย์ N มิติของประเภท T |
start_indices
|
ArraySlice<int64>
|
รายการจำนวนเต็ม N ที่มี ดัชนีเริ่มต้นของสไลซ์สำหรับ แต่ละมิติ ค่าต้องมากกว่าหรือเท่ากับ 0 |
limit_indices
|
ArraySlice<int64>
|
รายการจำนวนเต็ม N ที่มี
ดัชนีสิ้นสุด (ไม่รวม)
สำหรับสไลซ์ของแต่ละมิติข้อมูล ค่าแต่ละค่าต้องมากกว่าหรือเท่ากับค่า start_indices ที่เกี่ยวข้องสำหรับมิติข้อมูล และน้อยกว่าหรือเท่ากับขนาดของมิติข้อมูล |
strides
|
ArraySlice<int64>
|
รายการจำนวนเต็ม N ที่กำหนด
ระยะก้าวกระโดดของอินพุตของ Slice ฟังก์ชัน Slice
จะเลือกองค์ประกอบ strides[d] ทุกรายการใน
มิติข้อมูล d |
ตัวอย่าง 1 มิติ
let a = {0.0, 1.0, 2.0, 3.0, 4.0}
Slice(a, {2}, {4})
// Result: {2.0, 3.0}
ตัวอย่าง 2 มิติ
let b =
{ {0.0, 1.0, 2.0},
{3.0, 4.0, 5.0},
{6.0, 7.0, 8.0},
{9.0, 10.0, 11.0} }
Slice(b, {2, 1}, {4, 3})
// Result:
// { { 7.0, 8.0},
// {10.0, 11.0} }
ดูข้อมูล StableHLO ได้ที่ StableHLO - slice
จัดเรียง
ดูเพิ่มเติม
XlaBuilder::Sort
Sort(operands, comparator, dimension, is_stable)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operands |
ArraySlice<XlaOp> |
ตัวถูกดำเนินการที่จะจัดเรียง |
comparator |
XlaComputation |
การคำนวณตัวเปรียบเทียบที่จะใช้ |
dimension |
int64 |
มิติข้อมูลที่จะใช้จัดเรียง |
is_stable |
bool |
ดูว่าจะใช้การจัดเรียงที่เสถียรหรือไม่ |
หากระบุตัวถูกดำเนินการเพียงตัวเดียว
หากตัวถูกดำเนินการเป็นเทนเซอร์ 1 มิติ (อาร์เรย์) ผลลัพธ์จะเป็นอาร์เรย์ที่จัดเรียงแล้ว หากต้องการจัดเรียงอาร์เรย์จากน้อยไปมาก ตัวเปรียบเทียบ ควรทำการเปรียบเทียบแบบน้อยกว่า กล่าวอย่างเป็นทางการคือ หลังจากจัดเรียงอาร์เรย์แล้ว จะใช้ได้กับตำแหน่งดัชนีทั้งหมด
i, jที่มีi < jซึ่งเป็นcomparator(value[i], value[j]) = comparator(value[j], value[i]) = falseหรือcomparator(value[i], value[j]) = trueหากตัวถูกดำเนินการมีมิติข้อมูลมากกว่า ระบบจะจัดเรียงตัวถูกดำเนินการตามมิติข้อมูลที่ระบุ ตัวอย่างเช่น สำหรับเทนเซอร์ 2 มิติ (เมทริกซ์) ค่ามิติข้อมูล
0จะจัดเรียงแต่ละคอลัมน์แยกกัน และค่ามิติข้อมูล1จะจัดเรียงแต่ละแถวแยกกัน หากไม่ได้ระบุหมายเลขมิติข้อมูล ระบบจะเลือกมิติข้อมูลสุดท้ายโดยค่าเริ่มต้น สําหรับมิติข้อมูล ที่จัดเรียง ระบบจะใช้ลําดับการจัดเรียงเดียวกันกับในกรณี 1 มิติ
หากระบุตัวถูกดำเนินการ n > 1
ตัวถูกดำเนินการ
nทั้งหมดต้องเป็นเทนเซอร์ที่มีมิติข้อมูลเดียวกัน ประเภทองค์ประกอบ ของเทนเซอร์อาจแตกต่างกันระบบจะจัดเรียงตัวถูกดำเนินการทั้งหมดพร้อมกัน ไม่ใช่แยกกัน ในเชิงแนวคิด ตัวถูกดำเนินการ จะถือเป็นทูเพิล เมื่อตรวจสอบว่าต้องสลับองค์ประกอบของตัวถูกดำเนินการแต่ละตัวที่ตำแหน่งดัชนี
iและjหรือไม่ ระบบจะเรียกใช้ตัวเปรียบเทียบด้วย พารามิเตอร์สเกลาร์2 * nโดยที่พารามิเตอร์2 * kสอดคล้องกับค่าที่ ตำแหน่งiจากตัวถูกดำเนินการk-thและพารามิเตอร์2 * k + 1สอดคล้องกับ ค่าที่ตำแหน่งjจากตัวถูกดำเนินการk-thโดยปกติแล้ว ตัวเปรียบเทียบ จะเปรียบเทียบพารามิเตอร์2 * kและ2 * k + 1กับพารามิเตอร์อื่นๆ และ อาจใช้คู่พารามิเตอร์อื่นๆ เป็นตัวตัดสินผลลัพธ์คือทูเพิลที่ประกอบด้วยตัวถูกดำเนินการตามลำดับที่จัดเรียงแล้ว (ตามมิติข้อมูลที่ระบุ ดังที่กล่าวไว้ข้างต้น)
i-thตัวถูกดำเนินการของทูเพิลจะสอดคล้อง กับi-thตัวถูกดำเนินการของ Sort
เช่น หากมีตัวถูกดำเนินการ 3 รายการ operand0 = [3, 1],
operand1 = [42, 50], operand2 = [-3.0, 1.1] และตัวเปรียบเทียบจะเปรียบเทียบ
เฉพาะค่าของ operand0 กับน้อยกว่า ผลลัพธ์ของการจัดเรียงจะเป็น
ทูเพิล ([1, 3], [50, 42], [1.1, -3.0])
หากตั้งค่า is_stable เป็นจริง ระบบจะรับประกันว่าการจัดเรียงจะเสถียร นั่นคือ หากมีองค์ประกอบที่ตัวเปรียบเทียบถือว่าเท่ากัน ระบบจะรักษลําดับสัมพัทธ์ของค่าที่เท่ากันไว้ องค์ประกอบ 2 รายการ e1 และ e2 จะเท่ากันก็ต่อเมื่อ comparator(e1, e2) = comparator(e2, e1) = false โดยค่าเริ่มต้น is_stable จะตั้งค่าเป็น false
ดูข้อมูล StableHLO ได้ที่ StableHLO - sort
Sqrt
ดูเพิ่มเติม
XlaBuilder::Sqrt
การดำเนินการรากที่สองแบบทีละองค์ประกอบ x -> sqrt(x)
Sqrt(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Sqrt ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Sqrt(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - sqrt
ย่อย
ดูเพิ่มเติม
XlaBuilder::Sub
ดำเนินการลบแบบทีละองค์ประกอบของ lhs และ rhs
Sub(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
สำหรับ Sub จะมีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ
Sub(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - subtract
แทน
ดูเพิ่มเติม
XlaBuilder::Tan
แทนเจนต์แบบทีละองค์ประกอบ x -> tan(x)
Tan(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Tan ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Tan(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - tan
Tanh
ดูเพิ่มเติม
XlaBuilder::Tanh
ไฮเพอร์โบลิกแทนเจนต์แบบองค์ประกอบต่อองค์ประกอบ x -> tanh(x)
Tanh(operand)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
นอกจากนี้ Tanh ยังรองรับอาร์กิวเมนต์ result_accuracy ที่ไม่บังคับด้วย
Tanh(operand, result_accuracy)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการของฟังก์ชัน |
result_accuracy
|
ไม่บังคับ ResultAccuracy
|
ประเภทความแม่นยำที่ผู้ใช้ขอได้สำหรับ การดำเนินการแบบเอกภาค ที่มีการ ใช้งานหลายรายการ |
ดูข้อมูลเพิ่มเติมเกี่ยวกับ result_accuracy ได้ที่
ความถูกต้องของผลลัพธ์
ดูข้อมูล StableHLO ได้ที่ StableHLO - tanh
TopK
ดูเพิ่มเติม
XlaBuilder::TopK
TopK ค้นหาค่าและดัชนีขององค์ประกอบที่ใหญ่ที่สุดหรือเล็กที่สุด k สำหรับ
มิติข้อมูลสุดท้ายของเทนเซอร์ที่กำหนด
TopK(operand, k, largest)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand
|
XlaOp
|
Tensor ที่จะดึงองค์ประกอบ k อันดับแรกออกมา
เทนเซอร์ต้องมีมิติข้อมูลมากกว่าหรือเท่ากับ 1
ขนาดของมิติข้อมูลสุดท้ายของ
เทนเซอร์ต้องมากกว่าหรือเท่ากับ k |
k |
int64 |
จำนวนองค์ประกอบที่จะดึงข้อมูล |
largest
|
bool
|
เลือกว่าจะดึงองค์ประกอบ k
ที่ใหญ่ที่สุดหรือเล็กที่สุด |
สำหรับเทนเซอร์อินพุต 1 มิติ (อาร์เรย์) ฟังก์ชันนี้จะค้นหารายการที่ใหญ่ที่สุดหรือเล็กที่สุดkในอาร์เรย์ และแสดงผลทูเพิลของอาร์เรย์ 2 รายการ (values, indices) ดังนั้น
values[j] คือรายการที่ใหญ่/เล็กที่สุดเป็นอันดับที่ j ใน operand และดัชนีของรายการนี้คือ
indices[j]
สำหรับอินพุตเทนเซอร์ที่มีมิติข้อมูลมากกว่า 1 มิติ จะคำนวณรายการ k อันดับแรก
ตามมิติข้อมูลสุดท้าย โดยรักษามิติข้อมูลอื่นๆ ทั้งหมด (แถว) ไว้ในเอาต์พุต
ดังนั้น สำหรับตัวถูกดำเนินการที่มีรูปร่าง [A, B, ..., P, Q] โดยที่ Q >= k เอาต์พุตจะเป็น
ทูเพิล (values, indices) โดยมีลักษณะดังนี้
values.shape = indices.shape = [A, B, ..., P, k]
หากองค์ประกอบ 2 รายการในแถวมีค่าเท่ากัน องค์ประกอบที่มีดัชนีต่ำกว่าจะปรากฏก่อน
เปลี่ยนคีย์
ดูการดำเนินการ tf.reshape ด้วย
Transpose(operand, permutation)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
operand |
XlaOp |
ตัวถูกดำเนินการที่จะเปลี่ยน |
permutation |
ArraySlice<int64> |
วิธีสลับมิติข้อมูล |
สลับมิติข้อมูลตัวถูกดำเนินการด้วยการสลับที่ระบุ
∀ i . 0 ≤ i < number of dimensions ⇒
input_dimensions[permutation[i]] = output_dimensions[i]
ซึ่งเหมือนกับ Reshape(operand, permutation, Permute(permutation, operand.shape.dimensions))
ดูข้อมูล StableHLO ได้ที่ StableHLO - transpose
TriangularSolve
ดูเพิ่มเติม
XlaBuilder::TriangularSolve
แก้ระบบสมการเชิงเส้นด้วยเมทริกซ์สัมประสิทธิ์สามเหลี่ยมล่างหรือบน
โดยการแทนค่าไปข้างหน้าหรือย้อนกลับ การออกอากาศตามมิติข้อมูลชั้นนำ รูทีนนี้จะแก้ระบบเมทริกซ์ op(a) * x =
b หรือ x * op(a) = b สำหรับตัวแปร x โดยกำหนด a และ b โดยที่ op(a)
คือ op(a) = a หรือ op(a) = Transpose(a) หรือ
op(a) = Conj(Transpose(a))
TriangularSolve(a, b, left_side, lower, unit_diagonal, transpose_a)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
a
|
XlaOp
|
อาร์เรย์ 2 มิติของจำนวนเชิงซ้อนหรือ
ประเภททศนิยมที่มีรูปร่าง [..., M,
M] |
b
|
XlaOp
|
อาร์เรย์ 2 มิติประเภทเดียวกัน
ที่มีรูปร่าง [..., M, K] หาก left_side เป็น
จริง หรือ [..., K, M] ในกรณีอื่นๆ |
left_side
|
bool
|
ระบุว่าจะแก้ระบบของรูปแบบ op(a) * x = b (true) หรือ x *
op(a) = b (false) |
lower
|
bool
|
ว่าจะใช้สามเหลี่ยมด้านบนหรือด้านล่าง
ของ a |
unit_diagonal
|
bool
|
หาก true องค์ประกอบแนวทแยงของ a จะถือว่าเป็น 1 และจะไม่มีการเข้าถึง |
transpose_a
|
Transpose
|
ดูว่าจะใช้ a ตามเดิม สลับเมทริกซ์ หรือ
ใช้ทรานสโพสผูกพัน |
ระบบจะอ่านข้อมูลอินพุตจากสามเหลี่ยมล่าง/บนของ a เท่านั้น โดยขึ้นอยู่กับค่าของ lower ระบบจะไม่สนใจค่าจากสามเหลี่ยมอีกรูป ข้อมูลเอาต์พุตจะ
แสดงในสามเหลี่ยมเดียวกัน ส่วนค่าในสามเหลี่ยมอีกด้านหนึ่งจะ
ขึ้นอยู่กับการติดตั้งใช้งานและอาจเป็นค่าใดก็ได้
หากจำนวนมิติข้อมูลของ a และ b มากกว่า 2 ระบบจะถือว่ามิติข้อมูลเหล่านั้นเป็นกลุ่มเมทริกซ์ โดยที่มิติข้อมูลทั้งหมด ยกเว้นมิติข้อมูล 2 มิติข้อมูลย่อยเป็นมิติข้อมูลกลุ่ม a และ b ต้องมีมิติข้อมูลกลุ่มเท่ากัน
ดูข้อมูล StableHLO ได้ที่ StableHLO - triangular_solve
ทูเพิล
ดูเพิ่มเติม
XlaBuilder::Tuple
ทูเพิลที่มีจำนวนแฮนเดิลข้อมูลที่เปลี่ยนแปลงได้ โดยแต่ละแฮนเดิลจะมีรูปร่างของตัวเอง
Tuple(elements)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
elements |
เวกเตอร์ของ XlaOp |
อาร์เรย์ N ของประเภท T |
ซึ่งคล้ายกับ std::tuple ใน C++ โดยในเชิงแนวคิดแล้ว
let v: f32[10] = f32[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
let s: s32 = 5;
let t: (f32[10], s32) = tuple(v, s);
คุณสามารถแยกโครงสร้าง (เข้าถึง) ของทูเพิลได้โดยใช้การดำเนินการ GetTupleElement
ดูข้อมูล StableHLO ได้ที่ StableHLO - tuple
ในขณะที่
ดูเพิ่มเติม
XlaBuilder::While
While(condition, body, init)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
condition
|
XlaComputation
|
XlaComputation ประเภท T -> PRED ซึ่ง
กำหนดเงื่อนไขการสิ้นสุดของ
ลูป |
body
|
XlaComputation
|
XlaComputation ประเภท T -> T ซึ่ง
กำหนดเนื้อหาของลูป |
init
|
T
|
ค่าเริ่มต้นสำหรับพารามิเตอร์ของ
condition และ body |
เรียกใช้ body ตามลำดับจนกว่า condition จะล้มเหลว ซึ่งคล้ายกับ
ลูป while ทั่วไปในภาษาอื่นๆ อีกมากมาย ยกเว้นความแตกต่างและ
ข้อจำกัดที่ระบุไว้ด้านล่าง
- โหนด
Whileจะแสดงค่าประเภทTซึ่งเป็นผลลัพธ์จากการ เรียกใช้bodyครั้งล่าสุด - รูปร่างของประเภท
Tจะกำหนดแบบคงที่และต้องเหมือนกัน ในการทำซ้ำทั้งหมด
พารามิเตอร์ T ของการคำนวณจะเริ่มต้นด้วยค่า init ในการวนซ้ำครั้งแรก และจะอัปเดตเป็นผลลัพธ์ใหม่จาก body โดยอัตโนมัติ
ในการวนซ้ำครั้งต่อๆ ไป
กรณีการใช้งานหลักอย่างหนึ่งของโหนด While คือการใช้การดำเนินการซ้ำของการฝึกในโครงข่ายประสาทเทียม รหัสเทียมแบบย่อจะแสดงด้านล่างพร้อมกราฟ
ที่แสดงการคำนวณ คุณดูโค้ดได้ที่
while_test.cc
ประเภท T ในตัวอย่างนี้คือ Tuple ที่ประกอบด้วย int32 สำหรับจำนวนการวนซ้ำและ vector[10] สำหรับตัวสะสม สำหรับการวนซ้ำ 1, 000 ครั้ง
ลูปจะเพิ่มเวกเตอร์คงที่ลงในตัวสะสมต่อไป
// Pseudocode for the computation.
init = {0, zero_vector[10]} // Tuple of int32 and float[10].
result = init;
while (result(0) < 1000) {
iteration = result(0) + 1;
new_vector = result(1) + constant_vector[10];
result = {iteration, new_vector};
}

ดูข้อมูล StableHLO ได้ที่ StableHLO - while
Xor
ดูเพิ่มเติม
XlaBuilder::Xor
ดำเนินการ XOR แบบทีละองค์ประกอบของ lhs และ rhs
Xor(lhs, rhs)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ประเภท T |
รูปร่างของอาร์กิวเมนต์ต้องคล้ายกันหรือเข้ากันได้ ดูเอกสารประกอบการออกอากาศเกี่ยวกับความหมายของความเข้ากันได้ของรูปร่าง ผลลัพธ์ของการดำเนินการมีรูปร่างซึ่งเป็นผลลัพธ์ของ การออกอากาศอาร์เรย์อินพุต 2 รายการ ในตัวแปรนี้ ระบบไม่รองรับการดำเนินการระหว่างอาร์เรย์ที่มี อันดับต่างกัน เว้นแต่ว่าตัวถูกดำเนินการตัวใดตัวหนึ่งจะเป็นสเกลาร์
Xor มีตัวแปรอื่นที่รองรับการออกอากาศแบบหลายมิติ ดังนี้
Xor(lhs,rhs, broadcast_dimensions)
| อาร์กิวเมนต์ | ประเภท | ความหมาย |
|---|---|---|
| lhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| rhs | XlaOp | ตัวถูกดำเนินการด้านซ้าย: อาร์เรย์ของ ประเภท T |
| broadcast_dimension | ArraySlice |
มิติข้อมูลใดในรูปร่างเป้าหมาย ที่มิติข้อมูลแต่ละมิติของ รูปร่างตัวถูกดำเนินการสอดคล้องกัน |
ควรใช้การดำเนินการรูปแบบนี้สำหรับการดำเนินการทางคณิตศาสตร์ระหว่าง อาร์เรย์ที่มีอันดับต่างกัน (เช่น การบวกเมทริกซ์กับเวกเตอร์)
ตัวถูกดำเนินการ broadcast_dimensions เพิ่มเติมคือ Slice ของจำนวนเต็มที่ระบุ มิติข้อมูลที่จะใช้สำหรับการออกอากาศตัวถูกดำเนินการ ดูรายละเอียดความหมายได้ในหน้าการออกอากาศ
ดูข้อมูล StableHLO ได้ที่ StableHLO - xor