Vận hành
mpmd.assign (mpmd::AssignOp)
Thao tác chỉ định
Cú pháp:
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
Chỉ định một tensor cục bộ cho một lưới dưới dạng được sao chép hoàn toàn trong lưới đó.
Đây là một thao tác tạm thời được giới thiệu khi giảm các thao tác jax, để chuyển từ các loại cục bộ sang các loại lưới. Các thao tác này sẽ bị loại bỏ trong quá trình nhập, khi các đầu vào và kết quả của thao tác func trở thành các tensor lưới.
Tên lưới của loại kết quả phải tương ứng với một lưới trong cấu trúc liên kết và loại chung của tên này phải giống với loại toán hạng.
Nguồn gốc của thao tác gán là nguồn gốc của lưới, ví dụ: named_computation, suy luận lưới, v.v.
Đặc điểm: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>
Giao diện: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Tác động: MemoryEffects::Effect{}
Thuộc tính:
| Thuộc tính | Loại MLIR | Mô tả |
|---|---|---|
origin | ::mlir::StringAttr | thuộc tính chuỗi |
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensor |
tensor của mọi giá trị kiểu không phải mã thông báo |
Kết quả:
| Kết quả | Mô tả |
|---|---|
result |
loại tensor lưới |
mpmd.broadcast (mpmd::BroadcastOp)
Thao tác truyền tin
Cú pháp:
operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)
Cho phép chuyển (hoặc sao chép) một tensor trong bất kỳ lưới nào mà tensor đó được dùng. Bất cứ khi nào được chuyển, nguồn gốc của quá trình chuyển sẽ là vị trí hiện tại của toán hạng.
Đặc điểm: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Giao diện: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Tác động: MemoryEffects::Effect{}
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensor |
tensor của mọi giá trị kiểu không phải mã thông báo |
Kết quả:
| Kết quả | Mô tả |
|---|---|
result |
tensor của mọi giá trị kiểu không phải mã thông báo |
mpmd.call (mpmd::CallOp)
Hàm gọi dành riêng cho MPMD
Cú pháp:
operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)
Một thao tác gọi hàm. Hữu ích khi bao bọc nội dung của các vòng lặp trong khai báo hàm để giảm kích thước mã, chẳng hạn như.
Giao diện: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Thuộc tính:
| Thuộc tính | Loại MLIR | Mô tả |
|---|---|---|
callee | ::mlir::FlatSymbolRefAttr | thuộc tính tham chiếu biểu tượng phẳng |
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensors |
variadic của tensor thuộc mọi giá trị kiểu không mã thông báo hoặc kiểu tensor lưới |
Kết quả:
| Kết quả | Mô tả |
|---|---|
| "chưa đặt tên" | variadic của tensor thuộc mọi giá trị kiểu không mã thông báo hoặc kiểu tensor lưới |
mpmd.for (mpmd::ForOp)
For operator
Trả về kết quả của việc thực thi một hàm nội dung cho một số lần lặp cố định, với chỉ mục lặp có sẵn trong nội dung.
Bạn có thể chỉ định một hệ số mở tuỳ chọn (phải chia số lần lặp lại) để mở phần nội dung của thao tác theo hệ số đó, tức là đối với hệ số mở N, phần nội dung sẽ được sao chép để tạo N bản sao và số lần lặp lại sẽ giảm theo hệ số 1/N. Mỗi bản sao (ngoại trừ bản sao đầu tiên) sẽ sử dụng kết quả của bản sao trước đó thay vì các đối số khối, đồng thời chỉ mục lặp lại sẽ được nhân với hệ số mở và tăng lên sau mỗi bản sao.
Toán tử for có thể chấp nhận và trả về mọi loại, nhưng TypeID của các loại này phải giống nhau – ví dụ: tất cả các loại tensor hoặc tất cả các loại lưới MPMD, v.v. Điều này cho phép chúng ta sử dụng toán tử ở nhiều cấp độ, chia sẻ việc triển khai và các phép biến đổi.
Đặc điểm: HLO_PairwiseSameOperandAndResultType, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Giao diện: ConditionallySpeculatable, LoopLikeOpInterface, OpAsmOpInterface, ShardableDataFlowOpInterface
Thuộc tính:
| Thuộc tính | Loại MLIR | Mô tả |
|---|---|---|
iterations | ::mlir::IntegerAttr | Thuộc tính số nguyên không dấu 32 bit |
unroll_factor | ::mlir::IntegerAttr | Thuộc tính số nguyên không dấu 32 bit |
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensors |
variadic của mọi loại không phải mã thông báo |
Kết quả:
| Kết quả | Mô tả |
|---|---|
results |
variadic của mọi loại không phải mã thông báo |
mpmd.fragment (mpmd::FragmentOp)
Thao tác trên mảnh
Chỉ định một phép tính (tức là một khối các thao tác) cho một lưới cụ thể trong một cấu trúc liên kết MPMD, được dự định thực thi dưới dạng một đoạn chương trình SPMD riêng lẻ.
Mảnh này chỉ lấy và trả về các tensor lưới được chỉ định cho cùng một lưới với mảnh.
Tên lưới của mảnh phải tương ứng với một lưới trong cấu trúc liên kết.
Đoạn mã này bao gồm một danh sách các nguồn gốc, tức là siêu dữ liệu có thông tin về các named_computation ban đầu đã tạo nên đoạn mã này và một staged_id được xác định iff đó là một đoạn mã do người dùng xác định, tức là đoạn mã đó có một danh sách nguồn gốc không trống. in_shardings không bắt buộc chỉ định việc phân đoạn các đối số khối của một đoạn, tương ứng với các toán hạng. out_shardings không bắt buộc chỉ định việc phân đoạn kết quả.
Vùng của đoạn không được có bất kỳ biến nào và loại của từng đối số khối và giá trị trả về trong vùng là loại tensor chung của tensor lưới tương ứng.
Đặc điểm: HasParent<::mlir::func::FuncOp, ForOp>, IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Giao diện: ConditionallySpeculatable, ShardableDataFlowOpInterface
Thuộc tính:
| Thuộc tính | Loại MLIR | Mô tả |
|---|---|---|
origin | ::mlir::ArrayAttr | mảng thông tin về nguồn |
mesh_name | ::mlir::StringAttr | thuộc tính chuỗi |
stage_id | ::mlir::IntegerAttr | Thuộc tính số nguyên không dấu 64 bit |
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Phân mảnh tensor cho mỗi toán hạng/kết quả của một thao tác |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Phân mảnh tensor cho mỗi toán hạng/kết quả của một thao tác |
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
inputs |
variadic của loại tensor lưới hoặc mã thông báo |
Kết quả:
| Kết quả | Mô tả |
|---|---|
results |
variadic của loại tensor lưới hoặc mã thông báo |
mpmd.fragment_call (mpmd::FragmentCallOp)
Thao tác gọi mảnh
Biểu thị một lệnh gọi đến hàm chứa phần nội dung của đoạn MPMD, tức là một phép tính được chỉ định cho một lưới cụ thể trong một cấu trúc liên kết MPMD, được dự định thực thi dưới dạng một đoạn chương trình SPMD riêng lẻ.
Tên lưới của mảnh phải tương ứng với một lưới trong cấu trúc liên kết của hàm bao quanh và hình dạng lưới đó phải khớp với hình dạng của hàm được gọi.
Nguồn gốc chỉ định các phép tính được đặt tên của người dùng đã đóng góp vào lệnh gọi mảnh này, ví dụ: thông qua việc hợp nhất.
Loại kết quả và loại dữ liệu đầu vào của hàm của callee phải là các loại tensor cục bộ của các tensor lưới tương ứng của toán hạng và kết quả của thao tác này.
Ví dụ:
%2 = mpmd.fragment_call<mesh="m1",> origin=[] @my_fragment(%0, %1) :
(m<esh>_tensor..., m<esh>_te>nsor...) - m<esh>_tensor...
Đặc điểm: HasParent<::mlir::func::FuncOp>, MemRefsNormalizable
Giao diện: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Thuộc tính:
| Thuộc tính | Loại MLIR | Mô tả |
|---|---|---|
origin | ::mlir::ArrayAttr | mảng thông tin về nguồn |
mesh_name | ::mlir::StringAttr | thuộc tính chuỗi |
callee | ::mlir::FlatSymbolRefAttr | thuộc tính tham chiếu biểu tượng phẳng |
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensors |
variadic của loại tensor lưới |
Kết quả:
| Kết quả | Mô tả |
|---|---|
| "chưa đặt tên" | variadic của loại tensor lưới |
mpmd.named_computation (mpmd::NamedComputationOp)
Thao tác phạm vi được đặt tên
Nhóm một phép tính, tức là một khối các thao tác, đồng thời đặt tên và số lần chuyển vị cho phép tính đó thông qua thuộc tính UserOrigin. Bạn có thể dùng NamedComputation này để chỉ định một lưới cho phép tính trong MPMD hoặc để tối ưu hoá.
Số lượng chuyển vị (mặc định=0) cho biết liệu phép tính được đặt tên có được tạo ra bởi một số phép biến đổi chuyển vị JAX AD hay không.
Vùng của op không được có bất kỳ biến tự do nào và kiểu của từng đối số khối và giá trị trả về trong vùng phải giống với kiểu của các đầu vào và kiểu dữ liệu trả về của op.
Đặc điểm: IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Giao diện: ConditionallySpeculatable
Thuộc tính:
| Thuộc tính | Loại MLIR | Mô tả |
|---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | Nguồn gốc của phép tính do người dùng chỉ định. |
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensors |
variadic của tensor được xếp hạng có dấu phẩy động 4/6/8/16/32/64 bit hoặc bool hoặc số nguyên 2/4/8/16/32/64 bit hoặc loại phức tạp có các phần tử dấu phẩy động 32/64 bit hoặc các giá trị lượng tử hoá số nguyên trên mỗi tensor hoặc mã thông báo |
Kết quả:
| Kết quả | Mô tả |
|---|---|
results |
variadic của tensor được xếp hạng có dấu phẩy động 4/6/8/16/32/64 bit hoặc bool hoặc số nguyên 2/4/8/16/32/64 bit hoặc loại phức tạp có các phần tử dấu phẩy động 32/64 bit hoặc các giá trị lượng tử hoá số nguyên trên mỗi tensor hoặc mã thông báo |
mpmd.named_tensor (mpmd::NamedTensorOp)
Chỉ định một tensor cho một lưới
Cú pháp:
operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)
Một thao tác nhận dạng liên kết kết quả của tensor với một tên đã cho. Bạn có thể dùng NamedTensor này để chỉ định một lưới cho tensor trong MPMD.
Đặc điểm: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Giao diện: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Tác động: MemoryEffects::Effect{}
Thuộc tính:
| Thuộc tính | Loại MLIR | Mô tả |
|---|---|---|
name | ::mlir::StringAttr | thuộc tính chuỗi |
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensor |
tensor của mọi giá trị kiểu không phải mã thông báo |
Kết quả:
| Kết quả | Mô tả |
|---|---|
result |
tensor của mọi giá trị kiểu không phải mã thông báo |
mpmd.reduce (mpmd::ReduceOp)
Thao tác giảm trên nhiều lưới
Cú pháp:
operation ::= `mpmd.reduce` `` $reduction attr-dict $tensors `:` functional-type(operands, results)
Cho phép giảm một tensor trên nhiều lưới, sau đó truyền đến bất cứ nơi nào cần sử dụng.
Đặc điểm: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Giao diện: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Tác động: MemoryEffects::Effect{}
Thuộc tính:
| Thuộc tính | Loại MLIR | Mô tả |
|---|---|---|
reduction | ::mlir::mpmd::ReductionAttr | Biểu thị mức giảm. |
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensors |
variadic của tensor thuộc bất kỳ giá trị nào không phải là loại mã thông báo |
Kết quả:
| Kết quả | Mô tả |
|---|---|
result |
tensor của mọi giá trị kiểu không phải mã thông báo |
mpmd.return (mpmd::ReturnOp)
Thao tác mpmd.return sẽ chấm dứt các khu vực được đính kèm vào các thao tác dựa trên khu vực mpmd. Đây là một hàm có số lượng đối số thay đổi: hàm này nhận một danh sách các giá trị làm đối số, trong đó các loại có thể là bất kỳ loại nào (nhưng cùng loại, ví dụ: AnyTensor) và do đó có thể được dùng lại ở nhiều cấp độ của ngăn xếp IR MPMD.
Cú pháp:
operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?
Đặc điểm: AlwaysSpeculatableImplTrait, Terminator
Giao diện: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Tác động: MemoryEffects::Effect{}
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
results |
variadic của mọi loại không phải mã thông báo |
mpmd.transfer (mpmd::TransferOp)
Thao tác chuyển
Cú pháp:
operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)
Chuyển một tensor phân tán từ lưới này sang lưới khác.
Tên lưới của toán hạng và các loại kết quả phải tương ứng với các lưới trong cấu trúc liên kết và các loại chung của chúng phải giống nhau.
Đặc điểm: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp>
Giao diện: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ShardingRuleOpInterface
Tác động: MemoryEffects::Effect{}
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensor |
loại tensor lưới |
Kết quả:
| Kết quả | Mô tả |
|---|---|
result |
loại tensor lưới |
mpmd.unassign (mpmd::UnassignOp)
Thao tác huỷ chỉ định
Cú pháp:
operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)
Huỷ chỉ định một tensor được sao chép hoàn toàn khỏi một lưới.
Đây là một thao tác tạm thời được giới thiệu khi giảm các thao tác jax, để chuyển từ các loại cục bộ sang các loại lưới. Các thao tác này sẽ bị loại bỏ trong quá trình nhập, khi các đầu vào và kết quả của thao tác func trở thành các tensor lưới.
Tên lưới của loại toán hạng phải tương ứng với một lưới trong cấu trúc liên kết và loại chung của tên lưới phải giống với loại kết quả.
Đặc điểm: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>, InferTensorType
Giao diện: ConditionallySpeculatable, InferShapedTypeOpInterface, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Tác động: MemoryEffects::Effect{}
Thuộc tính:
| Thuộc tính | Loại MLIR | Mô tả |
|---|---|---|
origin | ::mlir::StringAttr | thuộc tính chuỗi |
Toán hạng:
| Toán hạng | Mô tả |
|---|---|
tensor |
loại tensor lưới |
Kết quả:
| Kết quả | Mô tả |
|---|---|
result |
tensor của mọi giá trị kiểu không phải mã thông báo |
Thuộc tính
MeshWithOriginsAttr
Lưới có nguồn gốc.
Cú pháp:
#mpmd.mesh_with_origins<
::llvm::StringRef, # mesh_name
::llvm::ArrayRef<OriginAttr> # origins
>
Các thông số:
| Tham số | Loại C++ | Mô tả |
|---|---|---|
| mesh_name | ::llvm::StringRef |
mesh_name |
| nguồn gốc | ::llvm::ArrayRef<OriginAttr> |
origins |
MeshesWithOriginsAttr
Danh sách các lưới cùng với nguồn gốc của chúng.
Cú pháp:
#mpmd.meshes_with_origins<
::llvm::ArrayRef<MeshWithOriginsAttr> # value
>
Các thông số:
| Tham số | Loại C++ | Mô tả |
|---|---|---|
| value | ::llvm::ArrayRef<MeshWithOriginsAttr> |
NamedMeshAttr
Một cặp có tên và một Lưới.
Cú pháp:
#mpmd.named_mesh<
::llvm::StringRef, # name
sdy::MeshAttr # mesh
>
Các thông số:
| Tham số | Loại C++ | Mô tả |
|---|---|---|
| tên | ::llvm::StringRef |
tên |
| lưới | sdy::MeshAttr |
lưới |
OriginAttr
Nguồn gốc của việc chỉ định lưới.
Cú pháp:
#mpmd.origin<
::llvm::StringRef # origin_label
>
Nguồn gốc của một chỉ định lưới.
origin_label là nhãn mà con người có thể đọc được cho nguồn gốc.
Phương thức này được dùng cho mục đích gỡ lỗi.
Các thông số:
| Tham số | Loại C++ | Mô tả |
|---|---|---|
| origin_label | ::llvm::StringRef |
origin_label |
ReductionAttr
Biểu thị mức giảm.
Cú pháp:
#mpmd.reduction<
`none` | `add` | `max` | `min` | `mul` | `or` | `and` # reduction_type
>
Các thông số:
| Tham số | Loại C++ | Mô tả |
|---|---|---|
| reduction_type | ::mlir::mpmd::ReductionType |
một enum thuộc loại ReductionType |
TopologyAttr
Cấu trúc liên kết của các lưới có tên.
Cú pháp:
#mpmd.topology<
::llvm::ArrayRef<NamedMeshAttr> # meshes
>
Các thông số:
| Tham số | Loại C++ | Mô tả |
|---|---|---|
| lưới | ::llvm::ArrayRef<NamedMeshAttr> |
lưới cấu trúc liên kết |
UserOriginAttr
Nguồn gốc của phép tính do người dùng chỉ định.
Cú pháp:
#mpmd.user_origin<
::mlir::StringAttr, # userName
int64_t # transposeCount
>
Các thông số:
| Tham số | Loại C++ | Mô tả |
|---|---|---|
| userName | ::mlir::StringAttr |
|
| transposeCount | int64_t |
Loại
MeshTensorType
Loại tensor lưới
Chỉ định một RankedTensorType cho một lưới SPMD cụ thể trong cấu trúc liên kết MPMD của các lưới trong chương trình. Loại này chứa một phân đoạn không bắt buộc, chỉ định cách phân đoạn tensor liên quan đến lưới SPMD. Nếu không có phân đoạn, thì tensor sẽ được sao chép hoàn toàn.
Các thông số:
| Tham số | Loại C++ | Mô tả |
|---|---|---|
| mesh_name | ::llvm::StringRef |
tên mạng mesh |
| ranked_tensor_type | ::mlir::RankedTensorType |
loại tensor được xếp hạng |
| phân đoạn | ::mlir::sdy::TensorShardingAttr |
|
| memory_kind | ::mlir::StringAttr |
Enum
ReductionType
Thuộc tính loại chiết khấu
Trường hợp:
| Biểu tượng | Giá trị | Chuỗi |
|---|---|---|
| kNone | 0 |
không có |
| kAdd | 1 |
thêm |
| kMax | 2 |
tối đa |
| kMin | 3 |
phút |
| kMul | 4 |
mul |
| kOr | 5 |
hoặc |
| kAnd | 6 |
và |
EdgeNodeType
Liệt kê loại nút biên
Trường hợp:
| Biểu tượng | Giá trị | Chuỗi |
|---|---|---|
| OPERAND | 0 |
toán hạng |
| KẾT QUẢ | 1 |
kết quả |
PropagationDirection
Enum hướng truyền dữ liệu
Trường hợp:
| Biểu tượng | Giá trị | Chuỗi |
|---|---|---|
| KHÔNG CÓ | 0 |
KHÔNG CÓ |
| CHUYỂN TIẾP | 1 |
CHUYỂN TIẾP |
| BACKWARD | 2 |
BACKWARD |
| CẢ HAI BÊN | 3 |
CẢ HAI BÊN |
ReductionOp
Enum của thao tác giảm
Trường hợp:
| Biểu tượng | Giá trị | Chuỗi |
|---|---|---|
| SUM | 0 |
tổng |
| TỐI ĐA | 1 |
tối đa |
| PHÚT | 2 |
phút |