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.