OpInterface tanımları

CollectiveOpInterface (Sdy_CollectiveOpInterface)

Tüm toplu işlemler için arayüz. outSharding özelliği için ortak get/set işlemlerini kapsar.

Kısıtlamalar:

  • İşlenenin bir bölme işlemi olmalıdır veya allowMissingInputSharding() doğru değerini döndürmelidir.
  • out_sharding, ilgili türle ilgili olarak geçerlidir.
  • allowDifferentMeshes() yanlış döndürürse operand ve sonuç parçalara ayırma işlemi aynı örgeye sahip olmalıdır.
  • Operand ve sonuç parçalama için aynı sıra.

Yöntemler:

getOutSharding

::mlir::sdy::TensorShardingAttr getOutSharding();

Toplu işlemin çıkış tenörünün parçalanmasını döndürür.

setOutShardingAttr

void setOutShardingAttr(::mlir::sdy::TensorShardingAttr sharding);

Toplu işlemin çıkış tenör bölme işlemini ayarlar.

getTensor

::mlir::TypedValue<::mlir::TensorType> getTensor();

Toplu işlemin tenör operand'ını alın.

getType

::mlir::Type getType();

Toplu işlem sonucunun türünü alın.

allowDifferentMeshes

bool allowDifferentMeshes();

Toplu işlemin, giriş ve çıkış bölmelerinin farklı ağlara sahip olmasına izin verip vermediğini belirtir.

allowMissingInputSharding

bool allowMissingInputSharding();

Toplu işlemin, girişte parçalanmaya izin verip vermediğini (yani, dolaylı olarak tamamen çoğaltılıp çoğaltılmadığını) belirtir.

ShardableDataFlowOpInterface (Sdy_ShardableDataFlowOpInterface)

Bu arayüzü genişleten işlemler için veri akışı kenarları aracılığıyla parçaların dağıtılmasına izin veren bir işlem arayüzü.

Bir X işleminin veri akışı kenarı, bir kaynak kümesi (her biri X'in bir operandı veya X'in blok sonlandırıcısı) ile bir hedef kümesi (her biri X'in bir sonucu veya X'in bir blok bağımsız değişkeni) arasında bir köprü tanımlar. Bu köprü, tüm kaynakların ve hedeflerin aynı şekilde bölümlenmesini sağlar. Bir işlem, birbirine dik olan birden fazla veri akışı kenarına sahip olabilir.

Sahip, shardy'nin dağıtımı tarafından kullanılan veri akışı kenarının kullanıcı tarafından belirtilen hedefidir. Kullanıcı bunu keyfi olarak seçebilir ancak statik olması gerekir.

Örneğin:

  y_1, ..., y_n = custom_op (x_1, ..., x_n)
                  ((body_arg_1,..., body_arg_n) {
                    ...
                    return return_value_1, ..., return_value_n
                  })

Bu custom_op, veri akışı kenarları için iki türe sahiptir: return_value_i (kaynaklar) ile y_i (hedefler) arasında n tane ve x_i(kaynaklar) ile body_arg_i(hedefler) arasında n tane kenar. Bu durumda kenar sahipleri, hedeflerle aynıdır.

Birden fazla hedefi olan bir operasyon örneğini aşağıda bulabilirsiniz:

  y_0, ..., y_n = while (x_0, ..., x_n)
                  ((pred_arg_0,... , pred_arg_n) { ... })
                  ((body_arg_0,..., body_arg_n) {
                    ...
                    return return_value_0, ..., return_value_n
                  })

Bu sırada işlem n tane veri akışı kenarı içerir. i. veri akışı kenarı, x_i, return_value_i kaynakları ile y_i, pred_arg_i, body_arg_i hedefleri arasındadır.

Yöntemler:

getBlockArgumentEdgeOwnerShardings

mlir::SmallVector<mlir::sdy::TensorShardingAttr> getBlockArgumentEdgeOwnerShardings();

Tüm blok bağımsız değişkeni veri akışı kenar sahiplerinin parçalanmasını döndürür.

setBlockArgumentEdgeOwnerShardings

void setBlockArgumentEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);

Tüm engelleme bağımsız değişkeni kenar sahiplerinin shardings değerini ayarlar.

getOpResultEdgeOwnerShardings

mlir::SmallVector<mlir::sdy::TensorShardingAttr> getOpResultEdgeOwnerShardings();

Tüm işlem sonucu veri akışı kenar sahiplerinin parçalanmasını döndürür.

setOpResultEdgeOwnerShardings

void setOpResultEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);

Tüm op sonuç kenar sahiplerinin shardings değerini ayarlar.

transformTargetSharding

mlir::sdy::TensorShardingAttr transformTargetSharding(mlir::Value target, mlir::sdy::TensorShardingAttr sharding, mlir::sdy::DataFlowShardingTransformType transformType);

Hedefin sharding değerini transformType değerine göre dönüştürür

Daha fazla bilgi için DataFlowShardingTransformType sayfasına göz atın.

getBlockArgumentEdgeOwners

mlir::ArrayRef<mlir::BlockArgument> getBlockArgumentEdgeOwners();

Tüm engelleme bağımsız değişkeni kenar sahiplerini alır.

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

Tüm işlem sonucu kenar sahiplerini alır.

getEdgeSources

mlir::SmallVector<mlir::OpOperand*> getEdgeSources(mlir::Value owner);

owner kenarına göre veri akışı kenar kaynaklarını alır.

getEdgeOwnerFromTarget

mlir::Value getEdgeOwnerFromTarget(mlir::Value target);

Sahip olabilecek veya olamayacak bir target verildiğinde veri akışı kenarının sahibini target alır.

getEdgeOwnerFromSource

mlir::Value getEdgeOwnerFromSource(mlir::OpOperand&source);

source verildiğinde bir veri akışı kenarının sahip hedefini alır.

getNonEdgeOwnerTargets

mlir::SmallVector<mlir::Value> getNonEdgeOwnerTargets(mlir::Value owner);

owner kenarı verildiğinde, bir veri akışı kenarının sahip olmayan hedeflerini alır.

ShardingRuleOpInterface (Sdy_ShardingRuleOpInterface)

İşlemin kendi bölme kuralını tanımlamasına olanak tanıyan bir işlem arayüzü. Bölme kuralında, bir işlemin işlemdeki çeşitli özelliklere (özellikler, işlenen öğelerin şekli, sonuçların şekli vb.) göre nasıl bölümlenebileceği belirtilir. Daha fazla bilgi için OpShardingRuleAttr bölümüne bakın.

Yöntemler:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

İşlemin bölme kuralını döndürür.