Phương ngữ 'mpmd'

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ínhLoại MLIRMô tả
origin::mlir::StringAttrthuộ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ínhLoại MLIRMô tả
callee::mlir::FlatSymbolRefAttrthuộ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ínhLoại MLIRMô tả
iterations::mlir::IntegerAttrThuộc tính số nguyên không dấu 32 bit
unroll_factor::mlir::IntegerAttrThuộ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ínhLoại MLIRMô tả
origin::mlir::ArrayAttrmảng thông tin về nguồn
mesh_name::mlir::StringAttrthuộc tính chuỗi
stage_id::mlir::IntegerAttrThuộc tính số nguyên không dấu 64 bit
in_shardings::mlir::sdy::TensorShardingPerValueAttrPhâ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::TensorShardingPerValueAttrPhâ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ínhLoại MLIRMô tả
origin::mlir::ArrayAttrmảng thông tin về nguồn
mesh_name::mlir::StringAttrthuộc tính chuỗi
callee::mlir::FlatSymbolRefAttrthuộ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ínhLoại MLIRMô tả
origin::mlir::mpmd::UserOriginAttrNguồ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ínhLoại MLIRMô tả
name::mlir::StringAttrthuộ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ínhLoại MLIRMô tả
reduction::mlir::mpmd::ReductionAttrBiể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ínhLoại MLIRMô tả
origin::mlir::StringAttrthuộ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

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