Aşağıda, XlaBuilder arayüzünde tanımlanan işlemlerin semantiği açıklanmaktadır. Genellikle bu işlemler, xla_data.proto içindeki RPC arayüzünde tanımlanan işlemlerle bire bir eşlenir.
Adlandırmayla ilgili bir not: XLA'nın ele aldığı genelleştirilmiş veri türü, bazı tek tip türlerin (ör. 32 bit kayan nokta) öğelerini içeren N boyutlu bir dizidir. Belgelerde, rastgele boyutlu bir diziyi belirtmek için dizi kullanılır. Kolaylık sağlamak için özel durumlar daha spesifik ve bilinen adlara sahiptir. Örneğin, vektör 1 boyutlu bir dizi, matris ise 2 boyutlu bir dizidir.
Şekiller ve düzen ile Döşeme Düzeni'nde bir Op'un yapısı hakkında daha fazla bilgi edinin.
Mutlak
Ayrıca XlaBuilder::Abs başlıklı makaleyi inceleyin.
Öğe bazında mutlak değer x -> |x|.
Abs(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO bilgileri için StableHLO - abs başlıklı makaleyi inceleyin.
Ekle
Ayrıca XlaBuilder::Add başlıklı makaleyi inceleyin.
lhs ve rhs öğelerini öğe bazında toplar.
Add(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Ekleme için farklı boyutlu yayın desteği olan alternatif bir varyant mevcuttur:
Add(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - add başlıklı makaleyi inceleyin.
AddDependency
Ayrıca HloInstruction::AddDependency başlıklı makaleyi inceleyin.
AddDependency, HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
AfterAll
Ayrıca XlaBuilder::AfterAll başlıklı makaleyi inceleyin.
AfterAll, değişken sayıda jeton alır ve tek bir jeton üretir. Sıralamayı zorunlu kılmak için yan etki yaratan işlemler arasında işlenebilen temel türler olan jetonlar. AfterAll, bir dizi işlemden sonra bir işlemin sıralanması için jetonların birleştirilmesi olarak kullanılabilir.
AfterAll(tokens)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
tokens |
XlaOp vektörü |
değişken sayıda jeton |
StableHLO hakkında bilgi için StableHLO - after_all başlıklı makaleyi inceleyin.
AllGather
Ayrıca XlaBuilder::AllGather başlıklı makaleyi inceleyin.
Replikalar arasında birleştirme işlemi gerçekleştirir.
AllGather(operand, all_gather_dimension, shard_count, replica_groups,
channel_id, layout, use_global_device_ids)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand
|
XlaOp
|
Kopyalar arasında birleştirilecek dizi |
all_gather_dimension |
int64 |
Birleştirme boyutu |
shard_count
|
int64
|
Her çoğaltma grubunun boyutu |
replica_groups
|
vektör vektörü
int64 |
Birleştirmenin yapıldığı gruplar |
channel_id
|
isteğe bağlı
ChannelHandle |
Modüller arası iletişim için isteğe bağlı kanal kimliği |
layout
|
isteğe bağlı Layout
|
Bağımsız değişkendeki eşleşen düzeni yakalayacak bir düzen kalıbı oluşturur. |
use_global_device_ids
|
isteğe bağlı bool
|
ReplicaGroup yapılandırmasındaki kimlikler genel bir kimliği temsil ediyorsa true değerini döndürür. |
replica_groups, birleştirmenin gerçekleştirildiği kopya gruplarının listesidir (mevcut kopyanın kopya kimliğiReplicaIdkullanılarak alınabilir). Her gruptaki kopyaların sırası, girişlerinin sonuçtaki sırasını belirler.replica_groupsboş olmalıdır (bu durumda tüm replikalar tek bir gruba aittir ve0ileN - 1arasında sıralanır) veya replika sayısı ile aynı sayıda öğe içermelidir. Örneğin,replica_groups = {0, 2}, {1, 3},0ve2ile1ve3replikaları arasında birleştirme işlemi gerçekleştirir.shard_count, her çoğaltma grubunun boyutudur. Bu bilgi,replica_groupsboş olduğunda gereklidir.channel_id, modüller arası iletişim için kullanılır: Yalnızca aynıchannel_idile yapılanall-gatherişlemleri birbirleriyle iletişim kurabilir.use_global_device_idsReplicaGroup yapılandırmasındaki kimlikler, kopya kimliği yerine (replica_id * partition_count + partition_id) değerinin genel kimliğini temsil ediyorsa true değerini döndürür. Bu, tüm azaltma işlemi hem bölümden bölüme hem de kopyadan kopyaya ise cihazların daha esnek bir şekilde gruplandırılmasını sağlar.
Çıkış şekli, giriş şeklinin all_gather_dimension katıshard_count büyüklüğündedir. Örneğin, iki kopya varsa ve işlenen, iki kopyada sırasıyla [1.0, 2.5] ve [3.0, 5.25] değerine sahipse all_gather_dim'nin 0 olduğu bu işlemin çıkış değeri her iki kopyada da [1.0, 2.5, 3.0,5.25] olur.
AllGather API'si dahili olarak 2 HLO talimatına (AllGatherStart ve AllGatherDone) ayrıştırılır.
Ayrıca HloInstruction::CreateAllGatherStart başlıklı makaleyi inceleyin.
AllGatherStart, AllGatherDone, HLO'da temel öğeler olarak kullanılır. Bu işlemler HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
StableHLO hakkında bilgi için StableHLO - all_gather başlıklı makaleyi inceleyin.
AllReduce
Ayrıca XlaBuilder::AllReduce başlıklı makaleyi inceleyin.
Kopyalar arasında özel bir hesaplama gerçekleştirir.
AllReduce(operand, computation, replica_groups, channel_id,
shape_with_layout, use_global_device_ids)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand
|
XlaOp
|
Kopyalar arasında indirgenecek dizi veya boş olmayan bir dizi demeti |
computation |
XlaComputation |
İndirim hesaplaması |
replica_groups
|
ReplicaGroup vektör
|
İndirimlerin uygulandığı gruplar |
channel_id
|
isteğe bağlı
ChannelHandle |
Modüller arası iletişim için isteğe bağlı kanal kimliği |
shape_with_layout
|
isteğe bağlı Shape
|
Aktarılan verilerin düzenini tanımlar. |
use_global_device_ids
|
isteğe bağlı bool
|
ReplicaGroup yapılandırmasındaki kimlikler genel bir kimliği temsil ediyorsa true değerini döndürür. |
operandbir dizi demeti olduğunda, demetin her öğesi üzerinde all-reduce işlemi gerçekleştirilir.replica_groups, azaltmanın gerçekleştirildiği kopya gruplarının listesidir (geçerli kopyanın kopya kimliğiReplicaIdkullanılarak alınabilir).replica_groupsboş olmalıdır (bu durumda tüm kopyalar tek bir gruba aittir) veya kopya sayısı kadar öğe içermelidir. Örneğin,replica_groups = {0, 2}, {1, 3},0ve2ile1ve3kopyaları arasında azaltma işlemi gerçekleştirir.channel_id, modüller arası iletişim için kullanılır: Yalnızca aynıchannel_idile yapılanall-reduceişlemleri birbirleriyle iletişim kurabilir.shape_with_layout: AllReduce'un düzenini verilen düzene zorlar. Bu, ayrı ayrı derlenen bir grup AllReduce işlemi için aynı düzeni garanti etmek amacıyla kullanılır.use_global_device_idsReplicaGroup yapılandırmasındaki kimlikler, kopya kimliği yerine (replica_id * partition_count + partition_id) değerinin genel kimliğini temsil ediyorsa true değerini döndürür. Bu, tüm azaltma işlemi hem bölümden bölüme hem de kopyadan kopyaya ise cihazların daha esnek bir şekilde gruplandırılmasını sağlar.
Çıkış şekli, giriş şekliyle aynıdır. Örneğin, iki kopya varsa ve işlenenin iki kopyadaki değeri sırasıyla [1.0, 2.5] ve [3.0, 5.25] ise bu işlemden ve toplama hesaplamasından elde edilen çıkış değeri her iki kopyada da [4.0, 7.75] olur. Giriş bir demet ise çıkış da demet olur.
AllReduce işleminin sonucunu hesaplamak için her replikadan bir giriş olması gerekir. Bu nedenle, bir replika AllReduce düğümünü diğerinden daha fazla kez yürütürse önceki replika sonsuza kadar bekler. Tüm kopyalar aynı programı çalıştırdığından bu durumun gerçekleşmesi için çok fazla yol yoktur ancak bir while döngüsünün koşulu infeed verilerine bağlı olduğunda ve infeed verileri while döngüsünün bir kopyada diğerinden daha fazla kez yinelemesine neden olduğunda bu durum mümkündür.
AllReduce API'si dahili olarak 2 HLO talimatına (AllReduceStart ve AllReduceDone) ayrıştırılır.
Ayrıca HloInstruction::CreateAllReduceStart başlıklı makaleyi inceleyin.
AllReduceStart ve AllReduceDone, HLO'da temel işlevler olarak kullanılır. Bu işlemler HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
CrossReplicaSum
Ayrıca XlaBuilder::CrossReplicaSum başlıklı makaleyi inceleyin.
Toplama işlemiyle AllReduce gerçekleştirir.
CrossReplicaSum(operand, replica_groups)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand
|
XlaOp | Kopyalar arasında küçültülecek dizi veya boş olmayan dizi demeti |
replica_groups
|
vektör vektörü
int64 |
İndirimlerin uygulandığı gruplar |
Her kopya alt grubundaki işlenen değerinin toplamını döndürür. Tüm kopyalar toplama bir giriş sağlar ve tüm kopyalar her alt grup için sonuçlanan toplamı alır.
AllToAll
Ayrıca XlaBuilder::AllToAll başlıklı makaleyi inceleyin.
AllToAll, tüm çekirdeklerden tüm çekirdeklere veri gönderen toplu bir işlemdir. Bu süreç iki aşamadan oluşur:
- Dağıtma aşaması. Her çekirdekte işlenen,
split_dimensionsboyuncasplit_countsayıda bloğa bölünür ve bloklar tüm çekirdeklere dağıtılır. Örneğin, i. blok i. çekirdeğe gönderilir. - Toplama aşaması. Her çekirdek, alınan blokları
concat_dimensionboyunca birleştirir.
Katılımcı çekirdekler şu şekilde yapılandırılabilir:
replica_groups: Her ReplicaGroup, hesaplamaya katılan kopya kimliklerinin bir listesini içerir (mevcut kopyanın kimliğiReplicaIdkullanılarak alınabilir). AllToAll, belirtilen sırayla alt gruplar içinde uygulanır. Örneğin,replica_groups = { {1,2,3}, {4,5,0} }, AllToAll'un kopyalar{1, 2, 3}içinde ve toplama aşamasında uygulanacağı, alınan blokların 1, 2, 3 sırasıyla birleştirileceği anlamına gelir. Ardından, 4, 5, 0 kopyaları içinde başka bir AllToAll uygulanır ve birleştirme sırası da 4, 5, 0 olur.replica_groupsboşsa tüm kopyalar, göründükleri sırayla birleştirilerek tek bir gruba ait olur.
Ön koşullar:
split_dimensionüzerindeki işlenenin boyut boyutu,split_countile bölünebilir.- İşlenenin şekli demet değil.
AllToAll(operand, split_dimension, concat_dimension, split_count,
replica_groups, layout, channel_id)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
n boyutlu giriş dizisi |
split_dimension
|
int64
|
Aralıktaki bir değer [0,n). Bu değer, işlenenin bölündüğü boyutu adlandırır. |
concat_dimension
|
int64
|
Bölünmüş blokların birleştirildiği boyutu adlandıran [0,n) aralığındaki bir değer |
split_count
|
int64
|
Bu işleme katılan çekirdek sayısı. replica_groups boşsa bu, kopya sayısı olmalıdır. Aksi takdirde, bu değer her gruptaki kopya sayısına eşit olmalıdır. |
replica_groups
|
ReplicaGroupvektör
|
Her grup, kopya kimliklerinin bir listesini içerir. |
layout |
isteğe bağlı Layout |
kullanıcı tarafından belirtilen bellek düzeni |
channel_id
|
isteğe bağlı ChannelHandle
|
Her gönder/al çifti için benzersiz tanımlayıcı |
Şekiller ve düzenler hakkında daha fazla bilgi için xla::shapes bölümüne bakın.
StableHLO hakkında bilgi için StableHLO - all_to_all başlıklı makaleyi inceleyin.
AllToAll - Example 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);

Yukarıdaki örnekte, Alltoall'a katılan 4 çekirdek vardır. Her çekirdekte, işlenen 1. boyut boyunca 4 parçaya bölünür. Bu nedenle, her parçanın şekli f32[4,4] olur. 4 bölüm tüm çekirdeklere dağıtılır. Ardından her çekirdek, alınan parçaları çekirdek 0-4 sırasıyla 0. boyut boyunca birleştirir. Bu nedenle, her çekirdekteki çıkışın şekli f32[16,4] olur.
AllToAll - Example 2 - StableHLO
Yukarıdaki örnekte, AllToAll'a katılan 2 kopya vardır. Her kopya üzerinde işlenen, f32[2,4] şeklindedir. İşlenen, 1. boyut boyunca 2 parçaya bölünür. Bu nedenle, her parçanın şekli f32[2,2] olur. Bu iki bölüm, kopya grubundaki konumlarına göre kopyalar arasında değiştirilir. Her kopya, her iki işlenenden de kendi karşılık gelen bölümünü toplar ve bunları 0. boyut boyunca birleştirir. Sonuç olarak, her replikadaki çıkışın şekli f32[4,2] olur.
RaggedAllToAll
Ayrıca XlaBuilder::RaggedAllToAll başlıklı makaleyi inceleyin.
RaggedAllToAll, giriş ve çıkışın düzensiz tensörler olduğu toplu bir bire bir işlem gerçekleştirir.
RaggedAllToAll(input, input_offsets, send_sizes, output, output_offsets,
recv_sizes, replica_groups, channel_id)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
input |
XlaOp |
T türünde N dizisi |
input_offsets |
XlaOp |
T türünde N dizisi |
send_sizes |
XlaOp |
T türünde N dizisi |
output |
XlaOp |
T türünde N dizisi |
output_offsets |
XlaOp |
T türünde N dizisi |
recv_sizes |
XlaOp |
T türünde N dizisi |
replica_groups
|
ReplicaGroup vektör
|
Her grup, kopya kimliklerinin bir listesini içerir. |
channel_id
|
isteğe bağlı ChannelHandle
|
Her gönder/al çifti için benzersiz tanımlayıcı |
Düzensiz tensörler üç tensör kümesiyle tanımlanır:
data:datatensörü, en dış boyutu boyunca "düzensizdir". Bu boyut boyunca, dizine eklenmiş her öğe değişken boyuta sahiptir.offsets:offsetstensörü,datatensörünün en dıştaki boyutunu indeksler vedatatensörünün her düzensiz öğesinin başlangıç ofsetini temsil eder.sizes:sizestensörü,datatensörünün her bir düzensiz öğesinin boyutunu temsil eder. Boyut, alt öğe birimleriyle belirtilir. Bir alt öğe, en dıştaki "düzensiz" boyut kaldırıldığında elde edilen "data" tensör şeklinin soneki olarak tanımlanır.offsetsvesizestensörleri aynı boyutta olmalıdır.
Düzensiz tensör örneği:
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, her replikanın hedef replika çıkış perspektifinde ofsetlere sahip olacak şekilde parçalanmalıdır.
i. çıkış ofseti için mevcut kopya, i. kopyaya input[input_offsets[i]:input_offsets[i]+send_sizes[i]] güncellemesi gönderir. Bu güncelleme, i. kopyadaki output_i[output_offsets[i]:output_offsets[i]+send_sizes[i]] konumuna yazılır output.
Örneğin, 2 replikamız varsa:
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]
Düzensiz tümden tüm HLO'nun aşağıdaki bağımsız değişkenleri vardır:
input: Düzensiz giriş verisi tensörü.output: Düzensiz çıkış verisi tensörü.input_offsets: Düzensiz giriş ofsetleri tensörü.send_sizes: ragged send sizes tensor.output_offsets: Hedef replika çıkışındaki düzensiz ofset dizisi.recv_sizes: ragged recv sizes tensor.
*_offsets ve *_sizes tensörlerinin tümü aynı şekle sahip olmalıdır.
*_offsets ve *_sizes tensörleri için iki şekil desteklenir:
[num_devices]. Burada, her bir uzak cihaza en fazla bir güncelleme gönderilebilir. Örneğin:
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], her bir uzak cihaz için, her bir uzak cihazın kopyalama grubunda, aynı uzak cihaza (her biri farklı uzaklıklarda) en fazlanum_updatesgüncelleme gönderebilir.
Örneğin:
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] } }
ve
Ayrıca XlaBuilder::And başlıklı makaleyi inceleyin.
İki tensör (lhs ve rhs) üzerinde öğe bazında VE işlemi gerçekleştirir.
And(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
And için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
And(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - and başlıklı makaleyi inceleyin.
Asenk.
Ayrıca HloInstruction::CreateAsyncStart,
HloInstruction::CreateAsyncUpdate,
HloInstruction::CreateAsyncDone başlıklı makalelere de göz atın.
AsyncDone, AsyncStart ve AsyncUpdate, Asenkron işlemler için kullanılan ve HLO'da temel öğeler olarak işlev gören dahili HLO talimatlarıdır. Bu işlemler, HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
Atan2
Ayrıca XlaBuilder::Atan2 başlıklı makaleyi inceleyin.
lhs ve rhs üzerinde öğe bazında atan2 işlemi gerçekleştirir.
Atan2(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Atan2 için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Atan2(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO bilgileri için StableHLO - atan2 başlıklı makaleyi inceleyin.
BatchNormGrad
Algoritmanın ayrıntılı açıklaması için XlaBuilder::BatchNormGrad
ve orijinal toplu normalleştirme makalesine
de bakın.
Toplu normalleştirmenin gradyanlarını hesaplar.
BatchNormGrad(operand, scale, batch_mean, batch_var, grad_output, epsilon,
feature_index)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp | Normalleştirilecek n boyutlu dizi (x) |
scale |
XlaOp | 1 boyutlu dizi (\(\gamma\)) |
batch_mean |
XlaOp | 1 boyutlu dizi (\(\mu\)) |
batch_var |
XlaOp | 1 boyutlu dizi (\(\sigma^2\)) |
grad_output |
XlaOp | BatchNormTraining (\(\nabla y\)) için renk geçişleri |
epsilon |
float |
Epsilon değeri (\(\epsilon\)) |
feature_index |
int64 |
operand içinde özellik boyutunun dizini |
İşlem, özellik boyutundaki her özellik için (feature_index, operand içindeki özellik boyutunun dizinidir) diğer tüm boyutlarda operand, offset ve scale ile ilgili gradyanları hesaplar. feature_index, operand içindeki özellik boyutu için geçerli bir dizin olmalıdır.
Üç gradyan aşağıdaki formüllerle tanımlanır (operand olarak 4 boyutlu bir dizi ve özellik boyutu dizini l, toplu iş boyutu m ve uzamsal boyutlar w ve h olduğu varsayılır):
\[ \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 ve batch_var girişleri, toplu iş ve uzamsal boyutlardaki anlık değerleri temsil eder.
Çıkış türü, üç tutamdan oluşan bir demettir:
| Çıkışlar | Tür | Anlamsal Yapı |
|---|---|---|
grad_operand
|
XlaOp | giriş operand'a göre gradyan
(\(\nabla x\)) |
grad_scale
|
XlaOp | girişe göre gradyan **scale **
(\(\nabla\gamma\)) |
grad_offset
|
XlaOp | girişe göre gradyan
offset(\(\nabla\beta\)) |
StableHLO hakkında bilgi için StableHLO - batch_norm_grad başlıklı makaleyi inceleyin.
BatchNormInference
Algoritmanın ayrıntılı açıklaması için XlaBuilder::BatchNormInference
ve orijinal toplu normalleştirme makalesine de bakın.
Bir diziyi toplu iş ve uzamsal boyutlarda normalleştirir.
BatchNormInference(operand, scale, offset, mean, variance, epsilon,
feature_index)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp | Normalleştirilecek n boyutlu dizi |
scale |
XlaOp | 1 boyutlu dizi |
offset |
XlaOp | 1 boyutlu dizi |
mean |
XlaOp | 1 boyutlu dizi |
variance |
XlaOp | 1 boyutlu dizi |
epsilon |
float |
Epsilon değeri |
feature_index |
int64 |
operand içinde özellik boyutunun dizini |
İşlem, özellik boyutundaki her özellik için (feature_index, operand içindeki özellik boyutunun dizinidir) diğer tüm boyutlardaki ortalamayı ve varyansı hesaplar ve operand içindeki her öğeyi normalleştirmek için ortalamayı ve varyansı kullanır. feature_index, operand içindeki özellik boyutu için geçerli bir dizin olmalıdır.
BatchNormInference, her bir toplu işlem için mean ve variance hesaplanmadan BatchNormTraining çağrılmasına eşdeğerdir. Bunun yerine tahmini değerler olarak giriş mean ve variance kullanılır. Bu işlemin amacı çıkarımda gecikmeyi azaltmaktır. Bu nedenle BatchNormInference adı verilmiştir.
Çıkış, girişle aynı şekle sahip n boyutlu, normalleştirilmiş bir dizidir
operand.
StableHLO bilgileri için StableHLO - batch_norm_inference başlıklı makaleyi inceleyin.
BatchNormTraining
Algoritmanın ayrıntılı açıklaması için XlaBuilder::BatchNormTraining ve the original batch normalization paper sayfalarına da bakın.
Bir diziyi toplu iş ve uzamsal boyutlarda normalleştirir.
BatchNormTraining(operand, scale, offset, epsilon, feature_index)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
Normalleştirilecek n boyutlu dizi (x) |
scale |
XlaOp |
1 boyutlu dizi (\(\gamma\)) |
offset |
XlaOp |
1 boyutlu dizi (\(\beta\)) |
epsilon |
float |
Epsilon değeri (\(\epsilon\)) |
feature_index |
int64 |
operand içinde özellik boyutunun dizini |
İşlem, özellik boyutundaki her özellik için (feature_index, operand içindeki özellik boyutunun dizinidir) diğer tüm boyutlardaki ortalamayı ve varyansı hesaplar ve operand içindeki her öğeyi normalleştirmek için ortalamayı ve varyansı kullanır. feature_index, operand içindeki özellik boyutu için geçerli bir dizin olmalıdır.
operand \(x\) içinde m öğe içeren her toplu işlem için algoritma şu şekilde çalışır: w ve h, uzamsal boyutların boyutu olarak kabul edilir (operand'nın 4 boyutlu bir dizi olduğu varsayılır):
Özellik boyutundaki her özellik
liçin toplu iş ortalamasını \(\mu_l\) hesaplar: \(\mu_l=\frac{1}{mwh}\sum_{i=1}^m\sum_{j=1}^w\sum_{k=1}^h x_{ijkl}\)Toplu varyansı hesaplar \(\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$
Normalleştirir, ölçeklendirir ve kaydırır: \(y_{ijkl}=\frac{\gamma_l(x_{ijkl}-\mu_l)}{\sqrt[2]{\sigma^2_l+\epsilon} }+\beta_l\)
Genellikle küçük bir sayı olan epsilon değeri, sıfıra bölme hatalarını önlemek için eklenir.
Çıkış türü, üç XlaOp öğesinden oluşan bir demettir:
| Çıkışlar | Tür | Anlamsal Yapı |
|---|---|---|
output
|
XlaOp
|
Girişle aynı şekle sahip n boyutlu dizi
operand (y) |
batch_mean |
XlaOp |
1 boyutlu dizi (\(\mu\)) |
batch_var |
XlaOp |
1 boyutlu dizi (\(\sigma^2\)) |
batch_mean ve batch_var, yukarıdaki formüller kullanılarak toplu ve uzamsal boyutlarda hesaplanan anlardır.
StableHLO bilgileri için StableHLO - batch_norm_training başlıklı makaleyi inceleyin.
Bitcast
Ayrıca HloInstruction::CreateBitcast başlıklı makaleyi inceleyin.
Bitcast, HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
BitcastConvertType
Ayrıca XlaBuilder::BitcastConvertType başlıklı makaleyi inceleyin.
TensorFlow'daki tf.bitcast'a benzer şekilde, bir veri şeklinden hedef şekle öğe bazında bitcast işlemi gerçekleştirir. Giriş ve çıkış boyutu eşleşmelidir: Örneğin, bitcast rutiniyle s32 öğeleri f32 öğelerine dönüşür ve bir s32 öğesi dört s8 öğesine dönüşür. Bitcast, düşük düzeyli bir yayın olarak uygulanır. Bu nedenle, farklı kayan nokta gösterimlerine sahip makineler farklı sonuçlar verir.
BitcastConvertType(operand, new_element_type)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
boyutları D olan T türünde dizi |
new_element_type |
PrimitiveType |
U tipi |
Dönüşümden önce ve sonraki temel boyut oranıyla değişecek olan son boyut dışında, işlenen ve hedef şeklin boyutları eşleşmelidir.
Kaynak ve hedef öğe türleri demet olmamalıdır.
StableHLO bilgileri için StableHLO - bitcast_convert başlıklı makaleyi inceleyin.
Farklı genişlikteki temel türe bitcast dönüştürme
BitcastConvert HLO talimatı, çıkış öğesi türünün T' boyutunun giriş öğesinin T boyutuna eşit olmadığı durumu destekler. İşlemin tamamı kavramsal olarak bitcast olduğundan ve temel baytları değiştirmediğinden çıkış öğesinin şekli değişmelidir. B = sizeof(T), B' =
sizeof(T') için iki olası durum vardır.
İlk olarak, B > B' olduğunda çıkış şekli, B/B' boyutunda yeni bir en küçük boyuta sahip olur. Örneğin:
f16[10,2]{1,0} %output = f16[10,2]{1,0} bitcast-convert(f32[10]{0} %input)
Etkili ölçeklendirme faktörleri için kural aynıdır:
f16[2]{0} %output = f16[2]{0} bitcast-convert(f32[] %input)
Alternatif olarak, B' > B için talimat, giriş şeklinin son mantıksal boyutunun B'/B'ye eşit olmasını gerektirir ve bu boyut dönüştürme sırasında bırakılır:
f32[10]{0} %output = f32[10]{0} bitcast-convert(f16[10,2]{1,0} %input)
Farklı bit genişlikleri arasındaki dönüşümlerin öğe bazında olmadığını unutmayın.
Yayın
Ayrıca XlaBuilder::Broadcast başlıklı makaleyi inceleyin.
Dizideki verileri kopyalayarak diziye boyut ekler.
Broadcast(operand, broadcast_sizes)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
Kopyalanacak dizi |
broadcast_sizes |
ArraySlice<int64> |
Yeni boyutların boyutları |
Yeni boyutlar sola eklenir. Örneğin, broadcast_sizes değerleri {a0, ..., aN} içeriyorsa ve işlenen şeklin boyutları {b0, ..., bM} ise çıkış şeklinin boyutları {a0, ..., aN, b0, ..., bM} olur.
Yeni boyutlar, işlenenin kopyalarına göre dizine eklenir. Örneğin:
output[i0, ..., iN, j0, ..., jM] = operand[j0, ..., jM]
Örneğin, operand, değeri 2.0f olan bir f32 skaleriyse ve broadcast_sizes, {2, 3} ise sonuç, f32[2, 3] şekline sahip bir dizi olur ve sonuçtaki tüm değerler 2.0f olur.
StableHLO bilgileri için StableHLO - yayın başlıklı makaleyi inceleyin.
BroadcastInDim
Ayrıca XlaBuilder::BroadcastInDim başlıklı makaleyi inceleyin.
Dizideki verileri kopyalayarak dizinin boyutunu ve boyut sayısını genişletir.
BroadcastInDim(operand, out_dim_size, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
Kopyalanacak dizi |
out_dim_size
|
ArraySlice<int64>
|
Hedef şeklin boyutları |
broadcast_dimensions
|
ArraySlice<int64>
|
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Yayın'a benzer ancak boyutların herhangi bir yere eklenmesine ve mevcut boyutların 1 boyutla genişletilmesine olanak tanır.
operand, out_dim_size ile tanımlanan şekle yayınlanır.
broadcast_dimensions, operand boyutlarını hedef şeklin boyutlarıyla eşler. Yani işlenen değerin i'inci boyutu, çıkış şeklinin broadcast_dimension[i]'inci boyutuyla eşlenir. operand boyutları 1 boyutuna sahip olmalı veya çıkış şeklindeki eşlendikleri boyutla aynı boyutta olmalıdır. Kalan boyutlar 1 boyutlu olarak doldurulur. Dejenere boyutlu yayın, çıkış şekline ulaşmak için bu dejenere boyutlar boyunca yayın yapar. Anlamsal yapı, yayın sayfasında ayrıntılı olarak açıklanmıştır.
Telefon
Ayrıca XlaBuilder::Call başlıklı makaleyi inceleyin.
Belirtilen bağımsız değişkenlerle bir hesaplama başlatır.
Call(computation, operands...)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
computation
|
XlaComputation
|
T_0, T_1, ...,
T_{N-1} -> S türünde, rastgele türde N parametre içeren hesaplama |
operands |
N XlaOp dizisi |
Herhangi bir türde N bağımsız değişken |
operands öğesinin arite ve türleri, computation öğesinin parametreleriyle eşleşmelidir. operands olmamasına izin verilir.
CompositeCall
Ayrıca XlaBuilder::CompositeCall başlıklı makaleyi inceleyin.
Diğer StableHLO işlemlerinden oluşan, girişleri ve composite_attributes'i alıp sonuçlar üreten bir işlemi kapsar. İşlemin anlamsal yapısı, ayrıştırma özelliğiyle uygulanır. Bileşik işlem, program anlamsal yapısını değiştirmeden ayrıştırılmış haliyle değiştirilebilir. Ayrıştırmanın satır içine yerleştirilmesinin aynı işlem anlamsal yapısını sağlamadığı durumlarda custom_call kullanılması tercih edilir.
Sürüm alanı (varsayılan olarak 0'dır), bir bileşiğin semantiğinin ne zaman değiştiğini belirtmek için kullanılır.
Bu işlem, is_composite=true özelliğiyle kCall olarak uygulanır. decomposition alanı, computation özelliğiyle belirtilir. Ön uç özellikleri, composite. ile başlayan kalan özellikleri depolar.
Örnek CompositeCall işlemi:
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)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
computation
|
XlaComputation
|
T_0, T_1, ...,
T_{N-1} -> S türünde, rastgele türde N parametre içeren hesaplama |
operands |
N XlaOp dizisi |
değişken sayıda değer |
name |
string |
bileşenin adı |
attributes
|
isteğe bağlı string
|
isteğe bağlı dizeleştirilmiş özellik sözlüğü |
version
|
isteğe bağlı int64
|
birleşik işlemin anlamsal yapısına yönelik sürüm güncellemelerinin sayısı |
Bir işlemin decomposition alanı, çağrılan bir alan değildir.Bunun yerine, daha düşük düzeyli uygulamayı içeren işleve işaret eden bir to_apply
özelliği olarak görünür. Örneğin: to_apply=%funcname
Birleştirme ve ayrıştırma hakkında daha fazla bilgiyi StableHLO Spesifikasyonu'nda bulabilirsiniz.
Cbrt
Ayrıca XlaBuilder::Cbrt başlıklı makaleyi inceleyin.
Öğe bazında küp kök işlemi x -> cbrt(x).
Cbrt(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Cbrt, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Cbrt(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO hakkında bilgi için StableHLO - cbrt başlıklı makaleyi inceleyin.
Tavan
Ayrıca XlaBuilder::Ceil başlıklı makaleyi inceleyin.
Öğe bazında tavan x -> ⌈x⌉.
Ceil(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO bilgileri için StableHLO - ceil başlıklı makaleyi inceleyin.
Cholesky
Ayrıca XlaBuilder::Cholesky başlıklı makaleyi inceleyin.
Bir grup simetrik (Hermitian) pozitif tanımlı matrisin Cholesky ayrıştırmasını hesaplar.
Cholesky(a, lower)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
a
|
XlaOp
|
2'den fazla boyuta sahip karmaşık veya kayan noktalı türde bir dizi. |
lower |
bool |
a simgesinin üst veya alt üçgeninin kullanılıp kullanılmayacağı. |
lower, true ise $a = l olacak şekilde alt üçgen matrisler l hesaplar .
l^T$. Eğer lower false ise u üst üçgen matrislerini\(a = u^T . u\)olacak şekilde hesaplar.
Giriş verileri, lower değerine bağlı olarak yalnızca a öğesinin alt/üst üçgeninden okunur. Diğer üçgendeki değerler yok sayılır. Çıkış verileri aynı üçgende döndürülür. Diğer üçgendeki değerler uygulamaya bağlıdır ve herhangi bir değer olabilir.
a 2'den fazla boyuta sahipse a, matris grubu olarak değerlendirilir. Bu durumda, küçük 2 boyut hariç tüm boyutlar grup boyutlarıdır.
a simetrik (Hermitian) pozitif tanımlı değilse sonuç uygulamaya bağlı olarak tanımlanır.
StableHLO hakkında bilgi için StableHLO - cholesky başlıklı makaleyi inceleyin.
Sınır
Ayrıca XlaBuilder::Clamp başlıklı makaleyi inceleyin.
Bir işleneni minimum ve maksimum değer arasındaki aralıkla sınırlar.
Clamp(min, operand, max)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
min |
XlaOp |
T türünde dizi |
operand |
XlaOp |
T türünde dizi |
max |
XlaOp |
T türünde dizi |
Bir işlenen, minimum ve maksimum değerler verildiğinde, işlenen minimum ve maksimum değerler arasındaysa işleneni, bu aralığın altındaysa minimum değeri, bu aralığın üstündeyse maksimum değeri döndürür. Yani clamp(a, x, b) = min(max(a, x), b).
Üç dizinin de şekli aynı olmalıdır. Alternatif olarak, yayının kısıtlanmış bir biçimi olarak min ve/veya max, T türünde bir skaler olabilir.
Skaler min ve max içeren örnek:
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 bilgileri için StableHLO - clamp başlıklı makaleyi inceleyin.
Daralt
Ayrıca XlaBuilder::Collapse ve tf.reshape işlemine de bakın.
Bir dizinin boyutlarını tek bir boyutta daraltır.
Collapse(operand, dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
T türünde dizi |
dimensions |
int64 vektör |
T'nin boyutlarının sıralı, ardışık alt kümesi. |
Collapse, işlenenin boyutlarının verilen alt kümesini tek bir boyutla değiştirir. Giriş bağımsız değişkenleri, T türünde rastgele bir dizi ve derleme zamanında sabit boyut dizinleri vektörüdür. Boyut dizinleri, T'nin boyutlarının sıralı (düşükten yükseğe boyut numaraları) ve ardışık bir alt kümesi olmalıdır. Bu nedenle, {0, 1, 2}, {0, 1} veya {1, 2} değerlerinin tamamı geçerli boyut kümeleridir ancak {1, 0} veya {0, 2} geçerli değildir. Bu boyutlar, boyut sırasındaki aynı konumda yer alan tek bir yeni boyutla değiştirilir. Yeni boyutun boyutu, orijinal boyutların boyutlarının çarpımına eşittir. dimensions içindeki en düşük boyut numarası, bu boyutları daraltan döngü yuvasında en yavaş değişen (en büyük) boyuttur ve en yüksek boyut numarası en hızlı değişen (en küçük) boyuttur. Daha fazla genel sıralama çökmesi gerekiyorsa tf.reshape operatörüne bakın.
Örneğin, v 24 öğeden oluşan bir dizi olsun:
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
Ayrıca XlaBuilder::Clz başlıklı makaleyi inceleyin.
Baştaki sıfırları öğe bazında sayar.
Clz(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
CollectiveBroadcast
Ayrıca XlaBuilder::CollectiveBroadcast başlıklı makaleyi inceleyin.
Verileri kopyalar arasında yayınlar. Veriler, her gruptaki ilk kopya kimliğinden aynı gruptaki diğer kimliklere gönderilir. Bir kopya kimliği herhangi bir kopya grubunda değilse bu kopyadaki çıkış, shape içinde 0'lardan oluşan bir tensördür.
CollectiveBroadcast(operand, replica_groups, channel_id)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
replica_groups
|
ReplicaGroupvektör
|
Her grup, kopya kimliklerinin bir listesini içerir. |
channel_id
|
isteğe bağlı ChannelHandle
|
Her gönder/al çifti için benzersiz tanımlayıcı |
StableHLO bilgileri için StableHLO - collective_broadcast başlıklı makaleyi inceleyin.
CollectivePermute
Ayrıca XlaBuilder::CollectivePermute başlıklı makaleyi inceleyin.
CollectivePermute, kopyalar arasında veri gönderip alan bir toplu işlemdir.
CollectivePermute(operand, source_target_pairs, channel_id)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
n boyutlu giriş dizisi |
source_target_pairs
|
<int64, int64> vektör
|
(source_replica_id, target_replica_id) çiftlerinin listesi. Her çift için işlem, kaynak replikadan hedef replikaya gönderilir. |
channel_id
|
isteğe bağlı ChannelHandle
|
Modüller arası iletişim için isteğe bağlı kanal kimliği |
source_target_pairs ile ilgili aşağıdaki kısıtlamalar olduğunu unutmayın:
- Herhangi iki çift aynı hedef kopya kimliğine ve aynı kaynak kopya kimliğine sahip olmamalıdır.
- Bir kopya kimliği herhangi bir çiftte hedef değilse bu kopyadaki çıkış, girişle aynı şekle sahip 0'lardan oluşan bir tensördür.
CollectivePermute işleminin API'si dahili olarak 2 HLO talimatına (CollectivePermuteStart ve CollectivePermuteDone) ayrıştırılır.
Ayrıca HloInstruction::CreateCollectivePermuteStart başlıklı makaleyi inceleyin.
CollectivePermuteStart ve CollectivePermuteDone, HLO'da temel işlemler olarak kullanılır.
Bu işlemler HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
StableHLO hakkında bilgi için StableHLO - collective_permute başlıklı makaleyi inceleyin.
Karşılaştır
Ayrıca XlaBuilder::Compare başlıklı makaleyi inceleyin.
Aşağıdakilerin lhs ve rhs öğelerini öğe bazında karşılaştırır:
Eq
Ayrıca XlaBuilder::Eq başlıklı makaleyi inceleyin.
lhs ve rhs için öğe bazında eşitlik karşılaştırması yapar.
\(lhs = rhs\)
Eq(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Eq için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Eq(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
Aşağıdakiler zorunlu kılınarak, kayan noktalı sayılar üzerinde toplam sipariş desteklenir:
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
EqTotalOrder(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
StableHLO hakkında bilgi edinmek için StableHLO - karşılaştırma başlıklı makaleyi inceleyin.
Ne
Ayrıca XlaBuilder::Ne başlıklı makaleyi inceleyin.
lhs ve rhs için öğe bazında eşit değildir karşılaştırması yapar.
\(lhs != rhs\)
Ne(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Ne için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Ne(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
Ne için, aşağıdakiler zorunlu kılınarak kayan noktalı sayılardan oluşan toplam sipariş desteklenir:
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
NeTotalOrder(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
StableHLO hakkında bilgi için StableHLO - karşılaştırma başlıklı makaleyi inceleyin.
Ge
Ayrıca XlaBuilder::Ge başlıklı makaleyi inceleyin.
lhs ve rhs öğeleri arasında greater-or-equal-than karşılaştırması yapar.
\(lhs >= rhs\)
Ge(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Almanya'da farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Ge(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
Aşağıdakiler zorunlu kılınarak Gt için kayan nokta sayılarından daha büyük bir toplam sipariş desteklenir:
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
GtTotalOrder(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
StableHLO hakkında bilgi edinmek için StableHLO - karşılaştırma başlıklı makaleyi inceleyin.
Gt
Ayrıca XlaBuilder::Gt başlıklı makaleyi inceleyin.
lhs ve rhs öğeleri arasında öğe bazında büyüktür karşılaştırması yapar.
\(lhs > rhs\)
Gt(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Gt için farklı boyutlu yayın desteği içeren alternatif bir varyant mevcuttur:
Gt(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi edinmek için StableHLO - karşılaştırma başlıklı makaleyi inceleyin.
Le
Ayrıca XlaBuilder::Le başlıklı makaleyi inceleyin.
lhs ve rhs değerleri arasında öğe bazında less-or-equal-than karşılaştırması yapar.
\(lhs <= rhs\)
Le(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Le için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Le(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
Le için, aşağıdakiler zorunlu kılınarak kayan noktalı sayılar üzerinde toplam sipariş desteklenir:
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
LeTotalOrder(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
StableHLO hakkında bilgi edinmek için StableHLO - karşılaştırma başlıklı makaleyi inceleyin.
Lt
Ayrıca XlaBuilder::Lt başlıklı makaleyi inceleyin.
lhs ve rhs için öğe bazında küçüktür karşılaştırması yapar.
\(lhs < rhs\)
Lt(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Lt için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Lt(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
Kayan nokta sayılarının toplam siparişini desteklemek için şunlar zorunlu kılınır:
\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]
LtTotalOrder(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
StableHLO hakkında bilgi edinmek için StableHLO - karşılaştırma başlıklı makaleyi inceleyin.
Karmaşık
Ayrıca XlaBuilder::Complex başlıklı makaleyi inceleyin.
lhs ve rhs gerçek ve hayali değer çiftinden karmaşık bir değere öğe bazında dönüştürme işlemi yapar.
Complex(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Complex için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Complex(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - complex başlıklı makaleyi inceleyin.
ConcatInDim (Birleştir)
Ayrıca XlaBuilder::ConcatInDim başlıklı makaleyi inceleyin.
CONCATENATE, birden fazla dizi işlenenden oluşan bir dizi oluşturur. Dizi, her bir giriş dizisi işleneniyle aynı sayıda boyuta sahiptir (bunlar da birbirleriyle aynı sayıda boyuta sahip olmalıdır) ve bağımsız değişkenleri belirtildikleri sırayla içerir.
Concatenate(operands..., dimension)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operands
|
N XlaOp dizisi
|
Boyutları [L0, L1, ...] olan T türünde N dizi. N >= 1 olmalıdır. |
dimension
|
int64
|
[0, N) aralığında, operands arasında birleştirilecek boyutu adlandıran bir değer. |
dimension hariç tüm boyutlar aynı olmalıdır. Bunun nedeni, XLA'nın "düzensiz" dizileri desteklememesidir. Ayrıca, 0 boyutlu değerlerin birleştirilemeyeceğini (birleştirmenin gerçekleştiği boyutu adlandırmak mümkün olmadığından) unutmayın.
1 boyutlu örnek:
Concat({ {2, 3}, {4, 5}, {6, 7} }, 0)
//Output: {2, 3, 4, 5, 6, 7}
2 boyutlu örnek:
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} }
Diyagram:

StableHLO bilgileri için StableHLO - concatenate başlıklı makaleyi inceleyin.
Şart Kipi
Ayrıca XlaBuilder::Conditional başlıklı makaleyi inceleyin.
Conditional(predicate, true_operand, true_computation, false_operand,
false_computation)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
predicate |
XlaOp |
PRED türünde skaler |
true_operand |
XlaOp |
\(T_0\)türünde bağımsız değişken |
true_computation |
XlaComputation |
XlaComputation of type \(T_0 \to S\) |
false_operand |
XlaOp |
\(T_1\)türünde bağımsız değişken |
false_computation |
XlaComputation |
XlaComputation of type \(T_1 \to S\) |
predicate, true ise true_computation'yı, predicate, false ise false_computation'ü yürütür ve sonucu döndürür.
true_computation, \(T_0\) türünde tek bir bağımsız değişken almalı ve aynı türde olması gereken true_operand ile çağrılmalıdır. false_computation, \(T_1\) türünde tek bir bağımsız değişken almalı ve aynı türde olması gereken false_operand ile çağrılmalıdır. true_computation ve false_computation'nin döndürülen değerinin türü aynı olmalıdır.
predicate değerine bağlı olarak yalnızca true_computation veya false_computation işlemlerinden birinin yürütüleceğini unutmayın.
Conditional(branch_index, branch_computations, branch_operands)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
branch_index |
XlaOp |
S32 türünde skaler |
branch_computations |
N dizisi XlaComputation |
XlaComputations of type \(T_0 \to S , T_1 \to S , ..., T_{N-1} \to S\) |
branch_operands |
N dizisi XlaOp |
Tür bağımsız değişkenleri \(T_0 , T_1 , ..., T_{N-1}\) |
branch_computations[branch_index] işlevini yürütür ve sonucu döndürür. branch_index, S32 ise ve < 0 veya >= N ise branch_computations[N-1], varsayılan dal olarak yürütülür.
Her branch_computations[b], \(T_b\) türünde tek bir bağımsız değişken almalı ve aynı türde olması gereken branch_operands[b] ile çağrılmalıdır. Her branch_computations[b] için döndürülen değerin türü aynı olmalıdır.
branch_index değerine bağlı olarak branch_computations işlemlerinden yalnızca birinin yürütüleceğini unutmayın.
StableHLO bilgileri için StableHLO - if başlıklı makaleyi inceleyin.
Sabit
Ayrıca XlaBuilder::ConstantLiteral başlıklı makaleyi inceleyin.
Sabit bir literal değerinden output oluşturur.
Constant(literal)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
literal |
LiteralSlice |
mevcut bir Literal'nın sürekli görünümü |
StableHLO bilgileri için StableHLO - constant başlıklı makaleyi inceleyin.
ConvertElementType
Ayrıca XlaBuilder::ConvertElementType başlıklı makaleyi inceleyin.
C++'taki öğe bazında static_cast işlemine benzer şekilde, ConvertElementType bir veri şeklinden hedef şekle öğe bazında dönüştürme işlemi gerçekleştirir. Boyutlar eşleşmelidir ve dönüştürme öğe bazında yapılır. Örneğin, s32 öğeler, s32-to-f32 dönüştürme rutini aracılığıyla f32 öğelere dönüşür.
ConvertElementType(operand, new_element_type)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
boyutları D olan T türünde dizi |
new_element_type |
PrimitiveType |
U tipi |
İşlenen ve hedef şeklin boyutları eşleşmelidir. Kaynak ve hedef öğe türleri demet olmamalıdır.
T=s32 ile U=f32 arasındaki gibi bir dönüşüm, round-to-nearest-even gibi bir normalleştirme int-to-float dönüşüm rutini gerçekleştirir.
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 hakkında bilgi için StableHLO - convert başlıklı makaleyi inceleyin.
Conv (Konvolüsyon)
Ayrıca XlaBuilder::Conv başlıklı makaleyi inceleyin.
Nöral ağlarda kullanılan türde bir konvolüsyon hesaplar. Burada, bir evrişim, n boyutlu bir taban alanı üzerinde hareket eden n boyutlu bir pencere olarak düşünülebilir ve pencerenin olası her konumu için bir hesaplama yapılır.
Conv Hesaplamaya, genişleme olmadan varsayılan evrişim boyutu numaralarını kullanan bir evrişim talimatı ekler.
Doldurma, SAME veya VALID olarak kısa bir şekilde belirtilir. SAME
dolgusu, adımlama dikkate alınmadığında çıkışın girişle aynı şekle sahip olması için girişi (lhs) sıfırlarla doldurur. VALID dolgusu, dolgu olmadığı anlamına gelir.
Conv(lhs, rhs, window_strides, padding, feature_group_count,
batch_group_count, precision_config, preferred_element_type)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
lhs
|
XlaOp
|
Girişlerin (n+2) boyutlu dizisi |
rhs
|
XlaOp
|
(n+2) boyutlu çekirdek ağırlıkları dizisi |
window_strides |
ArraySlice<int64> |
çekirdek adımlarının n boyutlu dizisi |
padding |
Padding |
dolgu enum'ı |
feature_group_count
|
int64 | özellik gruplarının sayısı |
batch_group_count |
int64 | toplu iş grubu sayısı |
precision_config
|
isteğe bağlı
PrecisionConfig |
Kesinlik düzeyi için enum |
preferred_element_type
|
isteğe bağlı
PrimitiveType |
skaler öğe türünün enum'ı |
Conv için artan düzeylerde kontroller mevcuttur:
n, uzamsal boyutların sayısı olsun. lhs bağımsız değişkeni, taban alanını açıklayan (n+2) boyutlu bir dizidir. Bu, giriş olarak adlandırılır. Elbette sağ taraf da bir giriştir. Nöral ağda bunlar, giriş etkinleştirmeleridir. n+2 boyutları şu sırayla verilir:
batch: Bu boyuttaki her koordinat, konvolüsyonun gerçekleştirildiği bağımsız bir girişi temsil eder.z/depth/features: Temel alandaki her (y,x) konumunun, bu boyuta giren ilişkili bir vektörü vardır.spatial_dims: Pencerenin hareket ettiği temel alanı tanımlayannuzamsal boyutları açıklar.
rhs bağımsız değişkeni, evrişimli filtreyi/çekirdeği/pencereyi açıklayan (n+2) boyutlu bir dizidir. Boyutlar şu sırayla verilir:
output-z: Çıkışınzboyutu.input-z: Bu boyutun boyutu ilefeature_group_countçarpıldığında, lhs'dekizboyutunun boyutuna eşit olmalıdır.spatial_dims: Temel alan üzerinde hareket eden n boyutlu pencereyi tanımlayannuzamsal boyutları açıklar.
window_strides bağımsız değişkeni, evrişimli pencerenin uzamsal boyutlardaki adımını belirtir. Örneğin, ilk uzamsal boyuttaki adım 3 ise pencere yalnızca ilk uzamsal dizinin 3'e bölünebildiği koordinatlara yerleştirilebilir.
padding bağımsız değişkeni, temel alana uygulanacak sıfır dolgusunun miktarını belirtir. Doldurma miktarı negatif olabilir. Negatif doldurmanın mutlak değeri, evrişim yapılmadan önce belirtilen boyuttan kaldırılacak öğe sayısını gösterir. padding[0], y boyutu için dolguyu, padding[1] ise x boyutu için dolguyu belirtir. Her çiftin ilk öğesi düşük dolgu, ikinci öğesi ise yüksek dolgudur. Düşük dolgu, daha düşük dizinler yönünde, yüksek dolgu ise daha yüksek dizinler yönünde uygulanır. Örneğin, padding[1] değeri (2,3) ise ikinci uzamsal boyutta solda 2 sıfır, sağda ise 3 sıfır ile doldurma işlemi yapılır. Dolgu kullanmak, evrişim işlemi yapılmadan önce aynı sıfır değerlerini girişe (lhs) eklemeye eşdeğerdir.
lhs_dilation ve rhs_dilation bağımsız değişkenleri, her bir uzamsal boyutta sırasıyla sol ve sağ tarafa uygulanacak genişleme faktörünü belirtir. Bir uzamsal boyuttaki genişleme faktörü d ise bu boyuttaki girişlerin her birinin arasına d-1 boşluk yerleştirilir ve dizinin boyutu artırılır. Boşluklar, işlem yapmayan bir değerle doldurulur. Bu değer, evrişim için sıfır anlamına gelir.
Sağ tarafın genişletilmesine boşluklu evrişim de denir. Daha fazla bilgi için tf.nn.atrous_conv2d başlıklı makaleyi inceleyin. Sol tarafın genişletilmesine transpoze evrişim de denir. Daha fazla bilgi için tf.nn.conv2d_transpose başlıklı makaleyi inceleyin.
feature_group_count bağımsız değişkeni (varsayılan değer 1), gruplandırılmış evrişimler için kullanılabilir. feature_group_count, hem giriş hem de çıkış özelliği boyutunun böleni olmalıdır. feature_group_count 1'den büyükse giriş ve çıkış özelliği boyutunun ve rhs çıkış özelliği boyutunun kavramsal olarak eşit şekilde birçok feature_group_count grubuna bölündüğü, her grubun da ardışık bir özellik alt dizisinden oluştuğu anlamına gelir. rhs öğesinin giriş özelliği boyutu, lhs giriş özelliği boyutunun feature_group_count ile bölünmesiyle elde edilen değere eşit olmalıdır (bu nedenle, giriş özellikleri grubunun boyutuna zaten sahiptir). i'inci gruplar, birçok ayrı evrişim için feature_group_count hesaplamak üzere birlikte kullanılır. Bu evrişimlerin sonuçları, çıkış özelliği boyutunda birleştirilir.
Derinlik yönünde evrişim için feature_group_count bağımsız değişkeni giriş özelliği boyutuna ayarlanır ve filtre, [filter_height, filter_width, in_channels, channel_multiplier] şeklinden [filter_height, filter_width, 1, in_channels * channel_multiplier] şekline dönüştürülür. Daha fazla bilgi için tf.nn.depthwise_conv2d bölümüne bakın.
batch_group_count (varsayılan değer 1) bağımsız değişkeni, geri yayılım sırasında gruplandırılmış filtreler için kullanılabilir. batch_group_count, lhs (giriş) toplu iş boyutunun bir böleni olmalıdır. batch_group_count değeri 1'den büyükse çıkış toplu iş boyutunun input batch
/ batch_group_count olması gerekir. batch_group_count, çıkış özelliği boyutunun böleni olmalıdır.
Çıkış şekli, şu sırayla şu boyutlara sahiptir:
batch: Bu boyutun boyutu,batch_group_countile çarpıldığında lhs'dekibatchboyutunun boyutuna eşit olmalıdır.z: Çekirdek üzerindekioutput-zile aynı boyutta (rhs).spatial_dims: Evrişimli pencerenin her geçerli yerleşimi için bir değer.
Yukarıdaki şekilde batch_group_count alanının nasıl çalıştığı gösterilmektedir. Her bir lhs grubu batch_group_count gruba bölünür ve çıkış özellikleri için de aynı işlem yapılır. Ardından, bu grupların her biri için ikili sarmalar yapılır ve çıkış, çıkış özelliği boyutu boyunca birleştirilir. Diğer tüm boyutların (özellik ve uzamsal) operasyonel semantiği aynı kalır.
Evrişimli pencerenin geçerli yerleşimleri, adımlara ve dolgu sonrası taban alanının boyutuna göre belirlenir.
Bir konvolüsyonun ne yaptığını açıklamak için 2 boyutlu bir konvolüsyonu ele alalım ve çıkışta sabit batch, z, y, x koordinatlarını seçelim. Ardından (y,x), pencerenin temel alan içindeki bir köşesinin konumudur (ör. uzamsal boyutları nasıl yorumladığınıza bağlı olarak sol üst köşe). Artık temel alandan alınmış 2 boyutlu bir penceremiz var. Bu pencerede her 2 boyutlu nokta 1 boyutlu bir vektörle ilişkilendiriliyor. Böylece 3 boyutlu bir kutu elde ediyoruz. Konvolüsyonel çekirdekten, çıkış koordinatı z'yi sabitlediğimiz için 3 boyutlu bir kutumuz da var. İki kutu aynı boyutlara sahip olduğundan, iki kutu arasındaki öğe bazında çarpımların toplamını alabiliriz (nokta çarpımına benzer). Bu, çıkış değeridir.
output-z değeri örneğin 5 ise pencerenin her konumu, çıkışın z boyutunda 5 değer üretir. Bu değerler, evrişimli çekirdeğin hangi bölümünün kullanıldığına göre değişir. Her output-z koordinatı için kullanılan değerlerin ayrı bir 3D kutusu vardır. Bu nedenle, her biri için farklı bir filtreyle 5 ayrı konvolüsyon olarak düşünebilirsiniz.
Doldurma ve adım atma ile 2 boyutlu bir evrişim için sözde kod aşağıda verilmiştir:
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, hassasiyet yapılandırmasını belirtmek için kullanılır. Bu düzey, gerektiğinde daha doğru dtype emülasyonu sağlamak için donanımın daha fazla makine kodu talimatı oluşturmaya çalışıp çalışmayacağını belirler (ör. yalnızca bf16 matmul'ları destekleyen bir TPU'da f32'yi emüle etme). Değerler DEFAULT, HIGH veya HIGHEST olabilir. Ek ayrıntıları MXU bölümlerinde bulabilirsiniz.
preferred_element_type, birikim için kullanılan daha yüksek/düşük hassasiyetli çıkış türlerinin skaler bir öğesidir. preferred_element_type, söz konusu işlem için birikim türünü önerir ancak bu garanti edilmez. Bu, bazı donanım arka uçlarının bunun yerine farklı bir türde birikmesine ve tercih edilen çıkış türüne dönüştürülmesine olanak tanır.
StableHLO bilgileri için StableHLO - convolution başlıklı makaleyi inceleyin.
ConvWithGeneralPadding
Ayrıca XlaBuilder::ConvWithGeneralPadding başlıklı makaleyi inceleyin.
ConvWithGeneralPadding(lhs, rhs, window_strides, padding,
feature_group_count, batch_group_count, precision_config,
preferred_element_type)
Doldurma yapılandırmasının açık olduğu Conv ile aynıdır.
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
lhs
|
XlaOp
|
Girişlerin (n+2) boyutlu dizisi |
rhs
|
XlaOp
|
(n+2) boyutlu çekirdek ağırlıkları dizisi |
window_strides |
ArraySlice<int64> |
çekirdek adımlarının n boyutlu dizisi |
padding
|
ArraySlice<
pair<int64,int64>> |
(düşük, yüksek) dolgu içeren n boyutlu dizi |
feature_group_count
|
int64 | özellik gruplarının sayısı |
batch_group_count |
int64 | toplu iş grubu sayısı |
precision_config
|
isteğe bağlı
PrecisionConfig |
Kesinlik düzeyi için enum |
preferred_element_type
|
isteğe bağlı
PrimitiveType |
skaler öğe türünün enum'ı |
ConvWithGeneralDimensions
Ayrıca XlaBuilder::ConvWithGeneralDimensions başlıklı makaleyi inceleyin.
ConvWithGeneralDimensions(lhs, rhs, window_strides, padding,
dimension_numbers, feature_group_count, batch_group_count, precision_config,
preferred_element_type)
Boyut numaralarının açık olduğu Conv ile aynıdır.
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
lhs
|
XlaOp
|
(n+2) boyutlu giriş dizisi |
rhs
|
XlaOp
|
Çekirdek ağırlıklarının (n+2) boyutlu dizisi |
window_strides
|
ArraySlice<int64>
|
çekirdek adımlarının n boyutlu dizisi |
padding |
Padding |
dolgu enum'ı |
dimension_numbers
|
ConvolutionDimensionNumbers
|
boyut sayısı |
feature_group_count
|
int64 | özellik grubu sayısı |
batch_group_count
|
int64 | toplu iş gruplarının sayısı |
precision_config
|
isteğe bağlı PrecisionConfig
|
Kesinlik düzeyi için enum |
preferred_element_type
|
isteğe bağlı PrimitiveType
|
enum of scalar element type |
ConvGeneral
Ayrıca XlaBuilder::ConvGeneral başlıklı makaleyi inceleyin.
ConvGeneral(lhs, rhs, window_strides, padding, dimension_numbers,
feature_group_count, batch_group_count, precision_config,
preferred_element_type)
Boyut numaralarının ve dolgu yapılandırmasının açık olduğu Conv ile aynıdır.
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
lhs
|
XlaOp
|
(n+2) boyutlu giriş dizisi |
rhs
|
XlaOp
|
Çekirdek ağırlıklarının (n+2) boyutlu dizisi |
window_strides
|
ArraySlice<int64>
|
çekirdek adımlarının n boyutlu dizisi |
padding
|
ArraySlice<
pair<int64,int64>>
|
(düşük, yüksek) dolgu içeren n boyutlu dizi |
dimension_numbers
|
ConvolutionDimensionNumbers
|
boyut sayısı |
feature_group_count
|
int64 | özellik grubu sayısı |
batch_group_count
|
int64 | toplu iş gruplarının sayısı |
precision_config
|
isteğe bağlı PrecisionConfig
|
Kesinlik düzeyi için enum |
preferred_element_type
|
isteğe bağlı PrimitiveType
|
enum of scalar element type |
ConvGeneralDilated
Ayrıca XlaBuilder::ConvGeneralDilated başlıklı makaleyi inceleyin.
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)
Dolgu yapılandırması, genişleme faktörleri ve boyut numaralarının açık olduğu Conv ile aynıdır.
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
lhs
|
XlaOp
|
(n+2) boyutlu giriş dizisi |
rhs
|
XlaOp
|
Çekirdek ağırlıklarının (n+2) boyutlu dizisi |
window_strides
|
ArraySlice<int64>
|
çekirdek adımlarının n boyutlu dizisi |
padding
|
ArraySlice<
pair<int64,int64>>
|
(düşük, yüksek) dolgu içeren n boyutlu dizi |
lhs_dilation
|
ArraySlice<int64>
|
n-d lhs dilation factor array |
rhs_dilation
|
ArraySlice<int64>
|
n boyutlu sağ taraftaki genişleme faktör dizisi |
dimension_numbers
|
ConvolutionDimensionNumbers
|
boyut sayısı |
feature_group_count
|
int64 | özellik grubu sayısı |
batch_group_count
|
int64 | toplu iş gruplarının sayısı |
precision_config
|
isteğe bağlı PrecisionConfig
|
Kesinlik düzeyi için enum |
preferred_element_type
|
isteğe bağlı PrimitiveType
|
enum of scalar element type |
window_reversal
|
isteğe bağlı vector<bool>
|
Evrişim uygulanmadan önce boyutun mantıksal olarak tersine çevrilmesi için kullanılan işaret |
Kopyala
Ayrıca HloInstruction::CreateCopyStart başlıklı makaleyi inceleyin.
Copy, dahili olarak 2 HLO talimatına (CopyStart ve CopyDone) ayrıştırılır. Copy, CopyStart ve CopyDone ile birlikte HLO'da temel öğeler olarak kullanılır. Bu işlemler HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
Cos
Ayrıca
XlaBuilder::Cos başlıklı makaleye bakın.
Öğe bazında kosinüs x -> cos(x).
Cos(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Cos, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Cos(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO hakkında bilgi için StableHLO - cosine başlıklı makaleyi inceleyin.
Cosh
Ayrıca XlaBuilder::Cosh başlıklı makaleyi inceleyin.
Öğe bazında hiperbolik kosinüs x -> cosh(x).
Cosh(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Cosh, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Cosh(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
CustomCall
Ayrıca XlaBuilder::CustomCall başlıklı makaleyi inceleyin.
Bir hesaplama içinde kullanıcı tarafından sağlanan bir işlevi çağırma.
CustomCall belgeleri, Geliştirici ayrıntıları - XLA Özel Çağrıları bölümünde sağlanır.
StableHLO hakkında bilgi için StableHLO - custom_call başlıklı makaleyi inceleyin.
Div
Ayrıca XlaBuilder::Div başlıklı makaleyi inceleyin.
Bölünen lhs ve bölen rhs üzerinde öğe bazında bölme işlemi yapar.
Div(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Tamsayı bölme taşması (sıfıra göre işaretli/işaretsiz bölme/kalan veya INT_SMIN ile -1'nin işaretli bölme/kalanı), uygulamaya göre tanımlanmış bir değer üretir.
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Div için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Div(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - divide başlıklı makaleyi inceleyin.
Alan
Ayrıca HloInstruction::CreateDomain başlıklı makaleyi inceleyin.
Domain, HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
Nokta
Ayrıca XlaBuilder::Dot başlıklı makaleyi inceleyin.
Dot(lhs, rhs, precision_config, preferred_element_type)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
lhs |
XlaOp |
T türünde dizi |
rhs |
XlaOp |
T türünde dizi |
precision_config
|
isteğe bağlı
PrecisionConfig |
Kesinlik düzeyi için enum |
preferred_element_type
|
isteğe bağlı
PrimitiveType |
skaler öğe türünün enum'ı |
Bu işlemin tam anlamı, işlenenlerin sıralamasına bağlıdır:
| Giriş | Çıkış | Anlamsal Yapı |
|---|---|---|
vector [n] dot vector [n] |
skaler | vektör nokta çarpımı |
matris [m x k] dot vector
[k] |
vektör [m] | matris-vektör çarpımı |
matris [m x k] dot matris
[k x n] |
matris [m x n] | matris-matris çarpımı |
İşlem, lhs'nın ikinci boyutunda (veya 1 boyutu varsa ilk boyutunda) ve rhs'nin ilk boyutunda ürünlerin toplamını gerçekleştirir. Bunlar "daraltılmış" boyutlardır. lhs ve rhs'nin daraltılmış boyutları aynı boyutta olmalıdır. Pratikte, vektörler arasında nokta çarpımı, vektör/matris çarpımı veya matris/matris çarpımı yapmak için kullanılabilir.
precision_config, hassasiyet yapılandırmasını belirtmek için kullanılır. Bu düzey, gerektiğinde daha doğru dtype emülasyonu sağlamak için donanımın daha fazla makine kodu talimatı oluşturmaya çalışıp çalışmayacağını belirler (ör. yalnızca bf16 matmul'ları destekleyen bir TPU'da f32'yi emüle etme). Değerler DEFAULT, HIGH veya HIGHEST olabilir. Ek ayrıntıları MXU bölümlerinde bulabilirsiniz.
preferred_element_type, birikim için kullanılan daha yüksek/düşük hassasiyetli çıkış türlerinin skaler bir öğesidir. preferred_element_type, söz konusu işlem için birikim türünü önerir ancak bu garanti edilmez. Bu, bazı donanım arka uçlarının bunun yerine farklı bir türde birikmesine ve tercih edilen çıkış türüne dönüştürülmesine olanak tanır.
StableHLO hakkında bilgi için StableHLO - dot başlıklı makaleyi inceleyin.
DotGeneral
Ayrıca XlaBuilder::DotGeneral başlıklı makaleyi inceleyin.
DotGeneral(lhs, rhs, dimension_numbers, precision_config,
preferred_element_type)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
lhs |
XlaOp |
T türünde dizi |
rhs |
XlaOp |
T türünde dizi |
dimension_numbers
|
DotDimensionNumbers
|
sözleşme ve toplu boyut numaraları |
precision_config
|
isteğe bağlı
PrecisionConfig |
Kesinlik düzeyi için enum |
preferred_element_type
|
isteğe bağlı
PrimitiveType |
skalar öğe türü enum'ı |
Nokta'ya benzer ancak hem lhs hem de rhs için sözleşme ve toplu boyut numaralarının belirtilmesine olanak tanır.
| DotDimensionNumbers alanları | Tür | Anlamsal Yapı |
|---|---|---|
lhs_contracting_dimensions
|
repeated int64 | lhs küçülen boyut
sayıları |
rhs_contracting_dimensions
|
repeated int64 | rhs küçülen boyut
sayıları |
lhs_batch_dimensions
|
repeated int64 | lhs toplu boyut
sayıları |
rhs_batch_dimensions
|
repeated int64 | rhs toplu boyut
sayıları |
DotGeneral, dimension_numbers içinde belirtilen sözleşme boyutları üzerinden ürünlerin toplamını gerçekleştirir.
lhs ve rhs kaynaklı ilişkili sözleşme boyutu numaralarının aynı olması gerekmez ancak aynı boyut ölçülerine sahip olmaları gerekir.
Sözleşme boyutu numaralarını içeren örnek:
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 ve rhs ürünlerinden alınan ilişkili parti boyut numaraları aynı boyutlara sahip olmalıdır.
Grup boyutu numaraları içeren örnek (grup boyutu 2, 2x2 matrisler):
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} } }
| Giriş | Çıkış | Anlamsal Yapı |
|---|---|---|
[b0, m, k] dot [b0, k, n] |
[b0, m, n] | toplu matmul |
[b0, b1, m, k] dot [b0, b1, k, n] |
[b0, b1, m, n] | toplu matmul |
Bu nedenle, ortaya çıkan boyut numarası önce toplu boyutla, ardından lhs sözleşme yapılmayan/toplu olmayan boyutla ve son olarak rhs sözleşme yapılmayan/toplu olmayan boyutla başlar.
precision_config, hassasiyet yapılandırmasını belirtmek için kullanılır. Bu düzey, gerektiğinde daha doğru dtype emülasyonu sağlamak için donanımın daha fazla makine kodu talimatı oluşturmaya çalışıp çalışmayacağını belirler (ör. yalnızca bf16 matmul'ları destekleyen bir TPU'da f32'yi emüle etme). Değerler DEFAULT, HIGH veya HIGHEST olabilir. Ek ayrıntıları MXU bölümlerinde bulabilirsiniz.
preferred_element_type, birikim için kullanılan daha yüksek/düşük hassasiyetli çıkış türlerinin skaler bir öğesidir. preferred_element_type, söz konusu işlem için birikim türünü önerir ancak bu garanti edilmez. Bu, bazı donanım arka uçlarının bunun yerine farklı bir türde birikmesine ve tercih edilen çıkış türüne dönüştürülmesine olanak tanır.
StableHLO bilgileri için StableHLO - dot_general başlıklı makaleyi inceleyin.
ScaledDot
Ayrıca XlaBuilder::ScaledDot başlıklı makaleyi inceleyin.
ScaledDot(lhs, lhs_scale, rhs, rhs_scale, dimension_number,
precision_config,preferred_element_type)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
lhs |
XlaOp |
T türünde dizi |
rhs |
XlaOp |
T türünde dizi |
lhs_scale |
XlaOp |
T türünde dizi |
rhs_scale |
XlaOp |
T türünde dizi |
dimension_number
|
ScatterDimensionNumbers
|
Dağıtma işlemi için boyut numaraları |
precision_config
|
PrecisionConfig
|
Kesinlik düzeyi için enum |
preferred_element_type
|
isteğe bağlı PrimitiveType
|
enum of scalar element type |
DotGeneral ile benzer.
"dimension_numbers" içinde belirtilen daraltma ve grup boyutlarıyla birlikte "lhs", "lhs_scale", "rhs" ve "rhs_scale" işlenenleriyle ölçeklendirilmiş nokta çarpımı işlemi oluşturur.
RaggedDot
Ayrıca XlaBuilder::RaggedDot başlıklı makaleyi inceleyin.
RaggedDot hesaplamasının dökümü için StableHLO - chlo.ragged_dot başlıklı makaleyi inceleyin.
DynamicReshape
Ayrıca XlaBuilder::DynamicReshape başlıklı makaleyi inceleyin.
Bu işlem işlevsel olarak reshape ile aynıdır ancak sonuç şekli, output_shape aracılığıyla dinamik olarak belirtilir.
DynamicReshape(operand, dim_sizes, new_size_bounds, dims_are_dynamic)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
T türünde N boyutlu dizi |
dim_sizes |
XlaOP vektörü |
N boyutlu vektör boyutları |
new_size_bounds |
int63 vektörü |
N boyutlu sınırlama vektörü |
dims_are_dynamic |
bool vektörü |
N boyutlu dinamik boyut |
StableHLO hakkında bilgi için StableHLO - dynamic_reshape başlıklı makaleyi inceleyin.
DynamicSlice
Ayrıca XlaBuilder::DynamicSlice başlıklı makaleyi inceleyin.
DynamicSlice, giriş dizisinden dinamik start_indices konumunda bir alt dizi çıkarır. Her boyuttaki dilimin boyutu, her boyuttaki özel dilim aralıklarının varış noktasını belirten size_indices içinde iletilir: [başlangıç, başlangıç + boyut). start_indices şekli, operand boyut sayısına eşit boyutlu 1 boyutlu olmalıdır.
DynamicSlice(operand, start_indices, slice_sizes)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
T türünde N boyutlu dizi |
start_indices
|
N dizisi XlaOp
|
Her boyut için dilimin başlangıç dizinlerini içeren N skaler tam sayının listesi. Değer sıfır veya sıfırdan büyük olmalıdır. |
size_indices
|
ArraySlice<int64>
|
Her boyut için dilim boyutunu içeren N tam sayının listesi. Her değer kesinlikle sıfırdan büyük olmalı ve boyutun modulo boyutunu sarmalamayı önlemek için başlangıç + boyut, boyutun boyutundan küçük veya bu boyuta eşit olmalıdır. |
Etkin dilim dizinleri, dilimleme işlemi gerçekleştirilmeden önce [1, N) içindeki her dizin i için aşağıdaki dönüşüm uygulanarak hesaplanır:
start_indices[i] = clamp(start_indices[i], 0, operand.dimension_size[i] - slice_sizes[i])
Bu, çıkarılan dilimin her zaman işlenen dizisiyle sınırlı olmasını sağlar. Dilim, dönüştürme uygulanmadan önce sınırlarda ise dönüştürmenin etkisi olmaz.
1 boyutlu örnek:
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 boyutlu örnek:
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 bilgileri için StableHLO - dynamic_slice başlıklı makaleyi inceleyin.
DynamicUpdateSlice
Ayrıca XlaBuilder::DynamicUpdateSlice başlıklı makaleyi inceleyin.
DynamicUpdateSlice, giriş dizisinin değeri olan bir sonuç oluşturur
operand. Bu sonuçta update dilimi start_indices konumunda üzerine yazılmış bir dilimdir.
update şekli, güncellenen sonucun alt dizisinin şeklini belirler.
start_indices şekli, operand boyutlarının sayısına eşit boyutlu, 1 boyutlu olmalıdır.
DynamicUpdateSlice(operand, update, start_indices)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
T türünde N boyutlu dizi |
update
|
XlaOp
|
Dilim güncellemesini içeren T türünde N boyutlu dizi. Güncelleme şeklinin her boyutu kesinlikle sıfırdan büyük olmalı ve sınırların dışında güncelleme dizinleri oluşturmamak için başlangıç + güncelleme, her boyut için işlenen boyutundan küçük veya ona eşit olmalıdır. |
start_indices
|
N dizisi XlaOp
|
Her boyut için dilimin başlangıç dizinlerini içeren N skaler tam sayının listesi. Değer sıfır veya sıfırdan büyük olmalıdır. |
Etkin dilim dizinleri, dilimleme işlemi gerçekleştirilmeden önce [1, N) içindeki her dizin i için aşağıdaki dönüşüm uygulanarak hesaplanır:
start_indices[i] = clamp(start_indices[i], 0, operand.dimension_size[i] - update.dimension_size[i])
Bu, güncellenen dilimin her zaman işlenen dizisiyle sınırlı olmasını sağlar. Dönüşüm uygulanmadan önce dilim sınırlıysa dönüşümün etkisi olmaz.
1 boyutlu örnek:
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 boyutlu örnek:
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 bilgileri için StableHLO - dynamic_update_slice başlıklı makaleyi inceleyin.
Erf
Ayrıca XlaBuilder::Erf başlıklı makaleyi inceleyin.
Öğe bazında hata fonksiyonu x -> erf(x). Burada:
\(\text{erf}(x) = \frac{2}{\sqrt{\pi} }\int_0^x e^{-t^2} \, dt\).
Erf(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Erf, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Erf(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
Süre sonu
Ayrıca XlaBuilder::Exp başlıklı makaleyi inceleyin.
Öğe bazında doğal üstel x -> e^x.
Exp(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Exp, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Exp(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO hakkında bilgi için StableHLO - exponential başlıklı makaleyi inceleyin.
Expm1
Ayrıca XlaBuilder::Expm1 başlıklı makaleyi inceleyin.
Öğeler bazında doğal eksponansiyel eksi bir x -> e^x - 1.
Expm1(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Expm1, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Expm1(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO bilgileri için StableHLO - exponential_minus_one başlıklı makaleyi inceleyin.
Fft
Ayrıca XlaBuilder::Fft başlıklı makaleyi inceleyin.
XLA FFT işlemi, gerçek ve karmaşık girişler/çıkışlar için ileri ve ters Fourier dönüşümlerini uygular. En fazla 3 eksende çok boyutlu FFT'ler desteklenir.
Fft(operand, ftt_type, fft_length)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand
|
XlaOp
|
Fourier dönüşümü uyguladığımız dizi. |
fft_type |
FftType |
Aşağıdaki tabloya bakın. |
fft_length
|
ArraySlice<int64>
|
Dönüştürülen eksenlerin zaman alanındaki uzunlukları. Bu, özellikle RFFT(fft_length=[16]) ile RFFT(fft_length=[17]) aynı çıkış şekline sahip olduğundan en içteki ekseni doğru boyutlandırmak için IRFFT'de gereklidir. |
FftType |
Anlamsal Yapı |
|---|---|
FFT |
Karmaşıktan karmaşığa FFT iletme. Şekil değişmez. |
IFFT |
Ters karmaşıktan karmaşığa FFT. Şekil değişmez. |
RFFT
|
Reelden karmaşığa FFT'yi iletir. En içteki eksenin şekli, fft_length[-1] // 2 + 1 sıfır olmayan bir değerse fft_length[-1] // 2 + 1 olarak küçültülür. Bu durumda, dönüştürülmüş sinyalin Nyquist frekansının ötesindeki ters eşlenik kısmı atlanır.fft_length[-1] |
IRFFT
|
Ters reel-karmaşık FFT (yani karmaşık alır, reel döndürür).
En içteki eksenin şekli, fft_length[-1] sıfır olmayan bir değerse fft_length[-1] olarak genişletilir. Bu durumda, Nyquist frekansının ötesindeki dönüştürülmüş sinyalin kısmı, 1 ile fft_length[-1] // 2 + 1 girişlerinin ters eşleniğinden çıkarılır. |
StableHLO bilgileri için StableHLO - fft başlıklı makaleyi inceleyin.
Çok boyutlu FFT
Birden fazla fft_length sağlandığında bu, en içteki eksenlerin her birine FFT işlemlerinin basamaklı olarak uygulanmasına eşdeğerdir. Gerçek->karmaşık ve karmaşık->gerçek durumlarında en içteki eksen dönüşümünün (etkili bir şekilde) önce gerçekleştirildiğini (RFFT; IRFFT için son) unutmayın. Bu nedenle, boyutu değişen en içteki eksendir. Diğer eksen dönüşümleri ise karmaşık->karmaşık olur.
Uygulama ayrıntıları
CPU FFT, Eigen'ın TensorFFT'si tarafından desteklenir. GPU FFT, cuFFT'yi kullanır.
Kat
Ayrıca XlaBuilder::Floor başlıklı makaleyi inceleyin.
Öğe bazında taban x -> ⌊x⌋.
Floor(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO bilgileri için StableHLO - floor başlıklı makaleyi inceleyin.
Karma
Ayrıca HloInstruction::CreateFusion başlıklı makaleyi inceleyin.
Fusion işlemi, HLO talimatlarını temsil eder ve HLO'da temel bir işlev olarak kullanılır.
Bu işlem, HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
Gather
XLA toplama işlemi, bir giriş dizisinin birkaç dilimini (her dilim potansiyel olarak farklı bir çalışma zamanı ofsetinde) birleştirir.
StableHLO hakkında bilgi için StableHLO - gather başlıklı makaleyi inceleyin.
Genel Anlamsal Yapı
Ayrıca XlaBuilder::Gather başlıklı makaleyi inceleyin.
Daha anlaşılır bir açıklama için aşağıdaki "Gayriresmi Açıklama" bölümüne bakın.
gather(operand, start_indices, dimension_numbers, slice_sizes,
indices_are_sorted)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand
|
XlaOp
|
Topladığımız dizi. |
start_indices
|
XlaOp
|
Topladığımız dilimlerin başlangıç dizinlerini içeren dizi. |
dimension_numbers
|
GatherDimensionNumbers
|
Başlangıç dizinlerini "içeren" start_indices boyutundaki değer. Ayrıntılı açıklama için aşağıya bakın. |
slice_sizes
|
ArraySlice<int64>
|
slice_sizes[i], i boyutundaki dilimin sınırlarıdır. |
indices_are_sorted
|
bool
|
Dizinlerin arayan tarafından sıralanacağı garanti edilip edilmediğini belirtir. |
Kolaylık sağlamak için, çıkış dizisindeki offset_dims içinde olmayan boyutları batch_dims olarak etiketliyoruz.
Çıkış, batch_dims.size + offset_dims.size boyutlu bir dizidir.
operand.rank, offset_dims.size ve collapsed_slice_dims.size değerlerinin toplamına eşit olmalıdır. Ayrıca, slice_sizes.size, operand.rank değerine eşit olmalıdır.
index_vector_dim, start_indices.rank değerine eşitse start_indices değerinin sonunda 1 boyutu olduğunu varsayarız (ör. start_indices, [6,7] şeklindeyse ve index_vector_dim, 2 ise start_indices şeklinin [6,7,1] olduğunu varsayarız).
i boyutu boyunca çıkış dizisinin sınırları aşağıdaki gibi hesaplanır:
i,batch_dimsiçinde varsa (yani bazıbatch_dims[k]içink'e eşitse)start_indices.shapeiçinden karşılık gelen boyut sınırlarını seçeriz veindex_vector_dim'ı atlarız (yanik<index_vector_dimisestart_indices.shape.dims[k] değerini, aksi takdirdestart_indices.shape.dims[k+1] değerini seçeriz).i,offset_dimsiçinde varsa (ör. bazıkiçinoffset_dims[k] değerine eşitse)collapsed_slice_dimsdikkate alındıktan sonraslice_sizesiçinden ilgili sınır seçilir (ör.adjusted_slice_sizes[k] seçilir. Buradaadjusted_slice_sizes,collapsed_slice_dimsdizinlerindeki sınırlar kaldırılmışslice_sizesdeğeridir).
Resmi olarak, belirli bir çıkış dizinine Out karşılık gelen işlenen dizini In aşağıdaki şekilde hesaplanır:
G= {Out[k] forkinbatch_dims} olsun.S[i] =start_indices[Combine(G,i)] olacak şekilde bir vektörSoluşturmak içinGkullanın. Burada Combine(A, b), b'yiindex_vector_dimkonumunda A'ya ekler.Gboş olsa bile bunun iyi tanımlandığını unutmayın:GboşsaS=start_indicesolur.SkullanarakoperandiçineSinbaşlangıç dizini oluşturun. Bunu yapmak içinstart_index_mapkullanarakSdağıtın. Daha açık şekilde belirtmek gerekirse:Sin[start_index_map[k]] =S[k] ifk<start_index_map.size.Aksi durumda
Sin[_] =0.
Oindizinlerinicollapsed_slice_dimskümesine göreOutiçindeki ofset boyutlarında dağıtarakoperandiçine bir dizin oluşturun. Daha net bir şekilde ifade etmek gerekirse:Oin[remapped_offset_dims(k)] =Out[offset_dims[k]] ifk<offset_dims.size(remapped_offset_dimsis defined below).Aksi durumda
Oin[_] =0.
In, + öğe bazında toplama işlemi olmak üzereOin+Sin'dir.
remapped_offset_dims, [0, offset_dims.size) tanım kümesi ve [0, operand.rank) \ collapsed_slice_dims görüntü kümesi olan monoton bir fonksiyondur. Örneğin, offset_dims.size 4, operand.rank 6 ve collapsed_slice_dims {0, 2} ise remapped_offset_dims {0→1,
1→3, 2→4, 3→5} olur.
indices_are_sorted true olarak ayarlanırsa XLA, start_indices değerlerinin kullanıcı tarafından sıralandığını (değerleri start_index_map'e göre dağıtıldıktan sonra artan sırada) varsayabilir. Sıralanmamışlarsa anlamsal yapı uygulamaya göre tanımlanır.
Gayri Resmi Açıklama ve Örnekler
Çıkış dizisindeki her Out indeksi, işlenen dizisindeki bir E öğesine karşılık gelir ve şu şekilde hesaplanır:
Outiçindeki toplu boyutları kullanarakstart_indicesiçinden bir başlangıç dizini ararız.Başlangıç dizinini (boyutu operand.rank değerinden küçük olabilir)
operandiçinde "tam" bir başlangıç diziniyle eşlemek içinstart_index_mapdeğerini kullanırız.Tam başlangıç dizinini kullanarak
slice_sizesboyutunda bir dilimi dinamik olarak ayırırız.collapsed_slice_dimsboyutlarını daraltarak dilimi yeniden şekillendiririz. Tüm daraltılmış dilim boyutlarının 1 sınırı olması gerektiğinden bu yeniden şekillendirme her zaman geçerlidir.Outiçindeki ofset boyutlarını kullanarak bu dilimi dizine ekleyip çıkış diziniOut'ya karşılık gelen giriş öğesiE'yi elde ederiz.
index_vector_dim, sonraki tüm örneklerde start_indices.rank - 1 olarak ayarlanır. index_vector_dim için daha ilginç değerler işlemi temelden değiştirmez ancak görsel gösterimi daha hantal hale getirir.
Yukarıdakilerin tümünün nasıl bir araya geldiğini anlamak için [16,11] dizisinden [8,6] şeklindeki 5 dilimi toplayan bir örneğe bakalım. Bir dilimin [16,11] dizisindeki konumu, S64[2] şeklindeki bir dizin vektörü olarak gösterilebilir. Bu nedenle, 5 konumun kümesi S64[5,2] dizisi olarak gösterilebilir.
Toplama işleminin davranışı, [G,O0,O1] değerini alan, çıkış şeklindeki bir dizinde bulunan ve bunu aşağıdaki şekilde giriş dizisindeki bir öğeyle eşleyen bir dizin dönüşümü olarak gösterilebilir:
Öncelikle G kullanılarak gather_indices dizisinden bir (X,Y) vektörü seçilir.
Çıkış dizisindeki [G,O0,O1] dizinindeki öğe, giriş dizisindeki [X+O0,Y+O1] dizinindeki öğedir.
slice_sizes, O0 ve O1 aralığını belirleyen [8,6]'dir. Bu da dilimin sınırlarını belirler.
Bu toplama işlemi, toplu boyut olarak G ile toplu dinamik dilim görevi görür.
Toplama dizinleri çok boyutlu olabilir. Örneğin, [4,5,2] şeklindeki bir "dizinleri toplama" dizisini kullanan yukarıdaki örneğin daha genel bir sürümü, dizinleri şu şekilde çevirir:
Bu, toplu dinamik dilim G0 ve toplu boyutlar G1 olarak işlev görür. Dilim boyutu hâlâ [8,6].
XLA'daki toplama işlemi, yukarıda belirtilen gayriresmi semantiği aşağıdaki şekillerde genelleştirir:
Çıkış şeklindeki hangi boyutların ofset boyutları (son örnekteki
O0,O1içeren boyutlar) olduğunu yapılandırabiliriz. Çıkış toplu iş boyutları (son örnektekiG0,G1içeren boyutlar), ofset boyutları olmayan çıkış boyutları olarak tanımlanır.Çıkış şeklindeki çıkış ofseti boyutlarının sayısı, giriş boyutlarının sayısından daha az olabilir.
collapsed_slice_dimsolarak açıkça listelenen bu "eksik" boyutların dilim boyutu1olmalıdır. Dilim boyutu1olduğundan, bunlar için geçerli olan tek dizin0'dir ve bunların çıkarılması belirsizliğe yol açmaz."Dizinleri Topla" dizisinden çıkarılan dilim (son örnekteki (
X,Y)) giriş dizisinin boyut sayısından daha az öğeye sahip olabilir ve dizinin girişle aynı sayıda boyuta sahip olacak şekilde nasıl genişletileceğini açık bir eşleme belirler.
Son bir örnek olarak, tf.gather_nd öğesini uygulamak için (2) ve (3) değerlerini kullanırız:
G0 ve G1, başlangıç dizinini her zamanki gibi toplanan dizinler dizisinden ayırmak için kullanılır. Ancak başlangıç dizininde yalnızca bir öğe (X) bulunur. Benzer şekilde, yalnızca bir çıkış telafi indeksi vardır ve değeri
O0'dir. Ancak, giriş dizisinde dizin olarak kullanılmadan önce bunlar sırasıyla "Dizin Eşlemeyi Topla" (resmi açıklamada start_index_map) ve "Ofset Eşleme" (resmi açıklamada remapped_offset_dims) uyarınca [X,0] ve [0,O0] olarak genişletilerek [X,O0] olarak toplanır. Diğer bir deyişle, çıkış dizini [G0,G1,O0], giriş dizini [GatherIndices[G0,G1,0],O0] ile eşlenerek tf.gather_nd için semantiği verir.
slice_sizes için kılıf [1,11]. Bu, sezgisel olarak, gather_indices dizisindeki her dizinin X bir satırın tamamını seçtiği ve sonucun bu satırların birleştirilmesi olduğu anlamına gelir.
GetDimensionSize
Ayrıca XlaBuilder::GetDimensionSize başlıklı makaleyi inceleyin.
İşlenenin verilen boyutunun büyüklüğünü döndürür. İşlenen, dizi şeklinde olmalıdır.
GetDimensionSize(operand, dimension)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
n boyutlu giriş dizisi |
dimension
|
int64
|
Boyutu belirten [0, n) aralığındaki bir değer |
StableHLO bilgileri için StableHLO - get_dimension_size başlıklı makaleyi inceleyin.
GetTupleElement
Ayrıca XlaBuilder::GetTupleElement başlıklı makaleyi inceleyin.
Derleme zamanında sabit bir değere sahip bir demeti dizine ekler.
Şekil çıkarımı, sonuçta elde edilen değerin türünü belirleyebilmesi için değer, derleme zamanında sabit olmalıdır.
Bu, C++'taki std::get<int N>(t) ile benzerdir. Kavramsal olarak:
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.
Ayrıca tf.tuple başlıklı makaleyi inceleyin.
GetTupleElement(tuple_data, index)
| Bağımsız Değişken | Tür | Anlamsal Yapı |
|---|---|---|
tuple_data |
XlaOP |
Unsur |
index |
int64 |
Demet şeklinin dizini |
StableHLO bilgileri için StableHLO - get_tuple_element başlıklı makaleyi inceleyin.
Imag
Ayrıca XlaBuilder::Imag başlıklı makaleyi inceleyin.
Karmaşık (veya gerçek) bir şeklin öğe bazında sanal kısmı. x -> imag(x). İşlenen, kayan nokta türündeyse 0 değerini döndürür.
Imag(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO hakkında bilgi için StableHLO - imag başlıklı makaleyi inceleyin.
Feed içi
Ayrıca XlaBuilder::Infeed başlıklı makaleyi inceleyin.
Infeed(shape, config)
| Bağımsız Değişken | Tür | Anlamsal Yapı |
|---|---|---|
shape
|
Shape
|
Feed içi arayüzden okunan verilerin şekli. Şeklin düzen alanı, cihaza gönderilen verilerin düzeniyle eşleşecek şekilde ayarlanmalıdır. Aksi takdirde şeklin davranışı tanımlanmamış olur. |
config |
isteğe bağlı string |
İşlemin yapılandırması. |
Cihazın örtülü feed içi yayın arayüzünden tek bir veri öğesini okur, verileri verilen şekil ve düzen olarak yorumlar ve verilerin XlaOp değerini döndürür. Bir hesaplamada birden fazla feed içi işlem yapılabilir ancak feed içi işlemler arasında toplam bir sıra olmalıdır. Örneğin, aşağıdaki kodda iki Infeed değeri arasında toplam bir sıra vardır çünkü while döngüleri arasında bir bağımlılık vardır.
result1 = while (condition, init = init_value) {
Infeed(shape)
}
result2 = while (condition, init = result1) {
Infeed(shape)
}
İç içe yerleştirilmiş demet şekilleri desteklenmez. Boş bir demet şekli için Infeed işlemi aslında hiçbir şey yapmaz ve cihazın Infeed'inden herhangi bir veri okunmadan devam eder.
StableHLO hakkında bilgi için StableHLO - infeed başlıklı makaleyi inceleyin.
Iota
Ayrıca XlaBuilder::Iota başlıklı makaleyi inceleyin.
Iota(shape, iota_dimension)
Potansiyel olarak büyük bir ana makine aktarımı yerine cihazda sabit bir değişmez oluşturur. Belirtilen şekle sahip ve sıfırdan başlayıp belirtilen boyut boyunca birer birer artan değerler içeren bir dizi oluşturur. Kayan nokta türleri için oluşturulan dizi, ConvertElementType(Iota(...)) ile eşdeğerdir. Burada Iota, tam sayı türündedir ve dönüşüm, kayan nokta türüne yapılır.
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
shape |
Shape |
Iota() tarafından oluşturulan dizinin şekli |
iota_dimension |
int64 |
Artırılacak boyut. |
Örneğin, Iota(s32[4, 8], 0) şu sonucu döndürür:
[[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) karşılığında iade
[[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 hakkında bilgi için StableHLO - iota başlıklı makaleyi inceleyin.
IsFinite
Ayrıca XlaBuilder::IsFinite başlıklı makaleyi inceleyin.
operand öğesinin her bir öğesinin sonlu olup olmadığını (yani pozitif veya negatif sonsuzluk olup olmadığını ve NaN olup olmadığını) test eder. Girişle aynı şekle sahip bir PRED değerleri dizisi döndürür. Bu dizideki her öğe, yalnızca karşılık gelen giriş öğesi sonluysa true olur.
IsFinite(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO bilgileri için StableHLO - is_finite başlıklı makaleyi inceleyin.
Günlük
Ayrıca XlaBuilder::Log başlıklı makaleyi inceleyin.
Öğe bazında doğal logaritma x -> ln(x).
Log(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Log işlevi, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Log(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO hakkında bilgi için StableHLO - log başlıklı makaleyi inceleyin.
Log1p
Ayrıca XlaBuilder::Log1p başlıklı makaleyi inceleyin.
Öğe bazında kaydırılmış doğal logaritma x -> ln(1+x).
Log1p(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Log1p, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Log1p(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO bilgileri için StableHLO - log_plus_one başlıklı makaleyi inceleyin.
Lojistik
Ayrıca XlaBuilder::Logistic başlıklı makaleyi inceleyin.
Öğe bazında lojistik fonksiyon hesaplaması x -> logistic(x).
Logistic(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Logistic, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Logistic(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO hakkında bilgi için StableHLO - logistic başlıklı makaleyi inceleyin.
Harita
Ayrıca XlaBuilder::Map başlıklı makaleyi inceleyin.
Map(operands..., computation, dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operands |
N XlaOp dizisi |
T0..T{N-1} türünde N dizi |
computation
|
XlaComputation
|
T türünde N parametre ve rastgele türde M parametre içeren T_0, T_1,
.., T_{N + M -1} -> S türünde hesaplama. |
dimensions |
int64 dizi |
Harita boyutları dizisi |
static_operands
|
N XlaOp dizisi
|
Harita işlemi için statik işlemler |
Belirtilen operands dizilerine bir skaler işlev uygular. Her öğenin, giriş dizilerindeki karşılık gelen öğelere uygulanan eşlenmiş işlevin sonucu olduğu aynı boyutlarda bir dizi oluşturur.
Eşlenen işlev, N adet skaler türde T girişi ve S türünde tek bir çıkışı olması kısıtlamasıyla rastgele bir hesaplamadır. Çıkış, öğe türü T, S ile değiştirilmesi dışında işlenenlerle aynı boyutlara sahiptir.
Örneğin: Map(op1, op2, op3, computation, par1), giriş dizilerindeki her (çok boyutlu) dizinde elem_out <-
computation(elem1, elem2, elem3, par1) işlevini uygulayarak çıkış dizisini oluşturur.
StableHLO hakkında bilgi için StableHLO - map başlıklı makaleyi inceleyin.
Maks.
Ayrıca XlaBuilder::Max başlıklı makaleyi inceleyin.
lhs ve rhs tensörlerinde öğe bazında maksimum işlem gerçekleştirir.
Max(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Max için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Max(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - maximum başlıklı makaleyi inceleyin.
Min.
Ayrıca XlaBuilder::Min başlıklı makaleyi inceleyin.
lhs ve rhs üzerinde öğe bazında minimum işlemi gerçekleştirir.
Min(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Min için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Min(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - minimum başlıklı makaleyi inceleyin.
Mul
Ayrıca XlaBuilder::Mul başlıklı makaleyi inceleyin.
lhs ve rhs öğelerinin çarpımını gerçekleştirir.
Mul(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Mul için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Mul(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO bilgileri için StableHLO - multiply başlıklı makaleye bakın.
Neg
Ayrıca XlaBuilder::Neg başlıklı makaleyi inceleyin.
Öğe bazında olumsuzlama x -> -x.
Neg(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO bilgileri için StableHLO - negate başlıklı makaleye bakın.
Değil
Ayrıca XlaBuilder::Not başlıklı makaleyi inceleyin.
Öğe bazında mantıksal değil x -> !(x).
Not(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO hakkında bilgi için StableHLO - not başlıklı makaleyi inceleyin.
OptimizationBarrier
Ayrıca XlaBuilder::OptimizationBarrier başlıklı makaleyi inceleyin.
Optimizasyon geçişlerinin, hesaplamaları bariyerin ötesine taşımasını engeller.
OptimizationBarrier(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Tüm girişlerin, bariyerin çıkışlarına bağlı olan operatörlerden önce değerlendirilmesini sağlar.
StableHLO hakkında bilgi için StableHLO - optimization_barrier başlıklı makaleyi inceleyin.
Alternatif seçenek:
Ayrıca XlaBuilder::Or başlıklı makaleyi inceleyin.
lhs ve rhs üzerinde öğe bazında OR işlemi gerçekleştirir .
Or(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Or için farklı boyutlu yayın desteği olan alternatif bir varyant mevcuttur:
Or(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - or başlıklı makaleyi inceleyin.
Çıkış
Ayrıca XlaBuilder::Outfeed başlıklı makaleyi inceleyin.
Girişleri feed'e yazar.
Outfeed(operand, shape_with_layout, outfeed_config)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
T türünde dizi |
shape_with_layout |
Shape |
Aktarılan verilerin düzenini tanımlar. |
outfeed_config |
string |
Outfeed talimatı için yapılandırma sabiti |
shape_with_layout, beslemek istediğimiz şekli belirtir.
StableHLO hakkında bilgi için StableHLO - outfeed başlıklı makaleyi inceleyin.
Pad
Ayrıca XlaBuilder::Pad başlıklı makaleyi inceleyin.
Pad(operand, padding_value, padding_config)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
T türünde dizi |
padding_value
|
XlaOp
|
Eklenen dolguyu doldurmak için T türünde skaler |
padding_config
|
PaddingConfig
|
Her iki kenardaki (düşük, yüksek) ve her boyuttaki öğeler arasındaki dolgu miktarı |
Verilen operand dizisini, dizi etrafında ve dizinin öğeleri arasında verilen padding_value ile doldurarak genişletir. padding_config
Her boyut için kenar dolgusunun ve iç dolgunun miktarını belirtir.
PaddingConfig, PaddingConfigDimension alanının tekrar eden bir alanıdır. PaddingConfigDimension, her boyut için üç alan içerir: edge_padding_low, edge_padding_high ve interior_padding.
edge_padding_low ve edge_padding_high, her bir boyutun düşük uç kısmına (0 dizininin yanında) ve yüksek uç kısmına (en yüksek dizinin yanında) eklenen dolgu miktarını belirtir. Kenar dolgusu miktarı negatif olabilir. Negatif dolgunun mutlak değeri, belirtilen boyuttan kaldırılacak öğe sayısını gösterir.
interior_padding, her boyuttaki iki öğe arasına eklenen dolgu miktarını belirtir ve negatif olamaz. İç dolgu, kenar dolgusundan mantıksal olarak önce gerçekleşir. Bu nedenle, negatif kenar dolgusu durumunda öğeler, iç dolgulu işlenenden kaldırılır.
Kenar dolgusu çiftlerinin tümü (0, 0) ise ve iç dolgu değerlerinin tümü 0 ise bu işlem etkisizdir. Aşağıdaki şekilde, iki boyutlu bir dizi için farklı edge_padding ve interior_padding değerlerinin örnekleri gösterilmektedir.

StableHLO bilgileri için StableHLO - pad başlıklı makaleyi inceleyin.
Parametre
Ayrıca XlaBuilder::Parameter başlıklı makaleyi inceleyin.
Parameter, bir hesaplamaya yapılan bağımsız değişken girişini temsil eder.
PartitionID
Ayrıca XlaBuilder::BuildPartitionId başlıklı makaleyi inceleyin.
Geçerli işlemin partition_id değerini üretir.
PartitionID(shape)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
shape |
Shape |
Verilerin şekli |
PartitionID, HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
StableHLO bilgileri için StableHLO - partition_id başlıklı makaleyi inceleyin.
PopulationCount
Ayrıca XlaBuilder::PopulationCount başlıklı makaleyi inceleyin.
operand öğesinin her bir öğesinde ayarlanan bit sayısını hesaplar.
PopulationCount(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO bilgileri için StableHLO - popcnt başlıklı makaleyi inceleyin.
Pow
Ayrıca XlaBuilder::Pow başlıklı makaleyi inceleyin.
lhs'nın rhs ile öğe bazında üssünü alır.
Pow(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Pow için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
Pow(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - power başlıklı makaleyi inceleyin.
Real
Ayrıca XlaBuilder::Real başlıklı makaleyi inceleyin.
Karmaşık (veya gerçek) bir şeklin öğe bazında gerçek kısmı. x -> real(x). İşlenen, kayan nokta türündeyse Real aynı değeri döndürür.
Real(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO hakkında bilgi için StableHLO - real başlıklı makaleyi inceleyin.
Recv
Ayrıca XlaBuilder::Recv başlıklı makaleyi inceleyin.
Recv, RecvWithTokens ve RecvToHost, HLO'da iletişim temel öğeleri olarak işlev gören işlemlerdir. Bu işlemler genellikle HLO dökümlerinde düşük seviyeli giriş/çıkış veya cihazlar arası aktarımın bir parçası olarak görünür ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
Recv(shape, handle)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
shape |
Shape |
Alınacak verilerin şekli |
handle |
ChannelHandle |
Her gönderme/alma çifti için benzersiz tanımlayıcı |
Aynı kanal kimliğini paylaşan başka bir hesaplamadaki Send talimatından belirli şekle sahip veriler alır. Alınan veriler için bir XlaOp döndürür.
StableHLO bilgileri için StableHLO - recv başlıklı makaleyi inceleyin.
RecvDone
Ayrıca HloInstruction::CreateRecv ve HloInstruction::CreateRecvDone politikalarını da inceleyin.
Send'ye benzer şekilde, Recv işleminin istemci API'si senkron iletişimi temsil eder. Ancak, talimat, eşzamansız veri aktarımlarını etkinleştirmek için dahili olarak 2 HLO talimatına (Recv ve RecvDone) ayrıştırılır.
Recv(const Shape& shape, int64 channel_id)
Aynı channel_id ile Send talimatından veri almak için gereken kaynakları ayırır. Ayrılan kaynaklar için bir bağlam döndürür. Bu bağlam, veri aktarımının tamamlanmasını beklemek üzere sonraki bir RecvDone talimatı tarafından kullanılır. Bağlam, {alma arabelleği (şekil), istek tanımlayıcısı (U32)} demetidir ve yalnızca RecvDone talimatı tarafından kullanılabilir.
Recv talimatıyla oluşturulan bir bağlam verildiğinde, veri aktarımının tamamlanmasını bekler ve alınan verileri döndürür.
Azaltma
Ayrıca XlaBuilder::Reduce başlıklı makaleyi inceleyin.
Bir veya daha fazla diziye paralel olarak azaltma işlevi uygular.
Reduce(operands..., init_values..., computation, dimensions_to_reduce)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operands
|
N dizisi XlaOp
|
T_0,...,
T_{N-1} türünde N dizi. |
init_values
|
N dizisi XlaOp
|
N skaler türleri
T_0,..., T_{N-1}. |
computation
|
XlaComputation
|
türünün hesaplanması
T_0,..., T_{N-1}, T_0,
...,T_{N-1} ->
Collate(T_0,...,
T_{N-1}). |
dimensions_to_reduce
|
int64 dizi
|
küçültülecek boyutların sırasız dizisi. |
Burada:
- N, 1'e eşit veya daha büyük olmalıdır.
- Hesaplama "kabaca" ilişkili olmalıdır (aşağıya bakın).
- Tüm giriş dizileri aynı boyutlara sahip olmalıdır.
- Tüm başlangıç değerleri,
computationaltında bir kimlik oluşturmalıdır. N = 1iseCollate(T)Tolur.N > 1,Collate(T_0, ..., T_{N-1}),TtüründeNöğelerden oluşan bir demettir.
Bu işlem, her giriş dizisinin bir veya daha fazla boyutunu skalerlere indirger.
Döndürülen her dizinin boyut sayısı number_of_dimensions(operand) - len(dimensions)'dır. İşlemin çıkışı Collate(Q_0, ..., Q_N)'dır. Burada Q_i, T_i türünde bir dizidir ve boyutları aşağıda açıklanmıştır.
Farklı arka uçların, azaltma hesaplamasını yeniden ilişkilendirmesine izin verilir. Bu durum, toplama gibi bazı azaltma işlevleri kayan sayılar için birleştirici olmadığından sayısal farklılıklara yol açabilir. Ancak verilerin aralığı sınırlıysa kayan nokta toplama işlemi, çoğu pratik kullanım için yeterince ilişkilidir.
StableHLO bilgileri için StableHLO - reduce başlıklı makaleyi inceleyin.
Örnekler
[10, 11,
12, 13] değerlerine sahip tek bir 1 boyutlu dizide tek bir boyut boyunca indirgeme yapıldığında, indirgeme işlevi f (bu computation) ise bu işlem şu şekilde hesaplanabilir:
f(10, f(11, f(12, f(init_value, 13)))
ancak başka birçok olasılık da vardır. Örneğin:
f(init_value, f(f(10, f(init_value, 11)), f(f(init_value, 12), f(init_value, 13))))
Aşağıda, 0 başlangıç değeriyle toplama işlemini kullanarak indirgemenin nasıl uygulanabileceğine dair kaba bir sözde kod örneği verilmiştir.
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]
Aşağıda, 2 boyutlu bir diziyi (matris) küçültme örneği verilmiştir. Şeklin 2 boyutu vardır: 2 boyutlu 0. boyut ve 3 boyutlu 1. boyut:

"Ekle" işleviyle 0 veya 1 boyutunu küçültmenin sonuçları:

Her iki azaltma sonucunun da 1 boyutlu diziler olduğunu unutmayın. Diyagramda, yalnızca görsel kolaylık sağlamak için biri sütun, diğeri satır olarak gösterilir.
Daha karmaşık bir örnek olarak 3 boyutlu bir dizi verelim. Boyut sayısı 3'tür. Boyut 0'ın boyutu 4, boyut 1'in boyutu 2 ve boyut 2'nin boyutu 3'tür. Basitlik için 1 ile 6 arasındaki değerler boyut 0'da tekrarlanır.

2D örneğine benzer şekilde, yalnızca bir boyutu azaltabiliriz. Örneğin, boyutu 0'ı küçültürsek boyutu 0'daki tüm değerlerin bir skalere katlandığı 2 boyutlu bir dizi elde ederiz:
| 4 8 12 |
| 16 20 24 |
2. boyutu küçültürsek 2. boyuttaki tüm değerlerin tek bir değere indirgendiği 2 boyutlu bir dizi elde ederiz:
| 6 15 |
| 6 15 |
| 6 15 |
| 6 15 |
Girişteki kalan boyutlar arasındaki göreli sıranın çıkışta korunduğunu ancak boyut sayısının değişmesi nedeniyle bazı boyutlara yeni sayılar atanabileceğini unutmayın.
Birden fazla boyutu da azaltabiliriz. 0 ve 1 boyutlarını azaltarak [20, 28, 36] 1 boyutlu dizisini elde ederiz.
3D diziyi tüm boyutları boyunca küçültmek, skaler 84 değerini üretir.
Variadic Reduce
N > 1 olduğunda, tüm girişlere aynı anda uygulandığı için reduce işlevinin uygulanması biraz daha karmaşıktır. İşlenenler, hesaplamaya aşağıdaki sırayla sağlanır:
- İlk işlenen için azaltılmış değer çalıştırılıyor
- ...
- N. işlenen için azaltılmış değer çalıştırılıyor
- İlk işlenen için giriş değeri
- ...
- N. işlenen için giriş değeri
Örneğin, 1 boyutlu bir dizinin maksimum değerini ve argmax değerini paralel olarak hesaplamak için kullanılabilecek aşağıdaki azaltma işlevini ele alalım:
f: (Float, Int, Float, Int) -> Float, Int
f(max, argmax, value, index):
if value >= max:
return (value, index)
else:
return (max, argmax)
1 boyutlu giriş dizileri V = Float[N], K = Int[N] ve başlangıç değerleri I_V = Float, I_K = Int için, yalnızca giriş boyutu boyunca azaltmanın sonucu f_(N-1) aşağıdaki yinelemeli uygulamaya eşdeğerdir:
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))
Bu azaltma işlemini bir değer dizisine ve sıralı dizinler dizisine (ör. iota) uygulamak, diziler üzerinde birlikte yineleme yapar ve maksimum değeri ve eşleşen dizini içeren bir demet döndürür.
ReducePrecision
Ayrıca XlaBuilder::ReducePrecision başlıklı makaleyi inceleyin.
Kayan nokta değerlerini daha düşük hassasiyetli bir biçime (ör. IEEE-FP16) ve tekrar orijinal biçime dönüştürmenin etkisini modeller. Düşük hassasiyetli biçimdeki üs ve mantis bitlerinin sayısı rastgele belirtilebilir. Ancak tüm bit boyutları tüm donanım uygulamalarında desteklenmeyebilir.
ReducePrecision(operand, exponent_bits, mantissa_bits)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
Kayan nokta türünde dizi T. |
exponent_bits |
int32 |
Düşük hassasiyetli biçimdeki üs bitlerinin sayısı |
mantissa_bits |
int32 |
Düşük hassasiyetli biçimdeki mantis bitlerinin sayısı |
Sonuç, T türünde bir dizidir. Giriş değerleri, verilen mantis bit sayısı ile gösterilebilen en yakın değere yuvarlanır ("ties to even" semantiği kullanılarak) ve üs bitlerinin sayısı tarafından belirtilen aralığı aşan tüm değerler pozitif veya negatif sonsuza sabitlenir. NaN değerleri, standart NaN değerlerine dönüştürülse de korunur.
Daha düşük hassasiyetli biçimde, en az bir üs biti olmalıdır (sıfır değerini sonsuzluktan ayırt etmek için, çünkü her ikisinde de sıfır mantis vardır) ve negatif olmayan sayıda mantis biti olmalıdır. Üs veya mantis bitlerinin sayısı, T türü için karşılık gelen değeri aşabilir. Bu durumda, dönüşümün ilgili kısmı basitçe hiçbir işlem yapmaz.
StableHLO bilgileri için StableHLO - reduce_precision başlıklı makaleyi inceleyin.
ReduceScatter
Ayrıca XlaBuilder::ReduceScatter başlıklı makaleyi inceleyin.
ReduceScatter, etkili bir şekilde AllReduce işlemi yapan ve ardından sonucu shard_count bloklara bölerek dağıtan toplu bir işlemdir. Kopyalama grubundaki scatter_dimension ve kopyalama i, ith parçayı alır.
ReduceScatter(operand, computation, scatter_dimension, shard_count,
replica_groups, channel_id, layout, use_global_device_ids)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand
|
XlaOp
|
Kopyalar arasında indirgenecek dizi veya boş olmayan bir dizi demeti. |
computation |
XlaComputation |
İndirim hesaplaması |
scatter_dimension |
int64 |
Dağıtılacak boyut. |
shard_count
|
int64
|
Bölünecek blok sayısı
scatter_dimension |
replica_groups
|
ReplicaGroup vektör
|
İndirimlerin uygulandığı gruplar |
channel_id
|
isteğe bağlı
ChannelHandle |
Modüller arası iletişim için isteğe bağlı kanal kimliği |
layout
|
isteğe bağlı Layout
|
kullanıcı tarafından belirtilen bellek düzeni |
use_global_device_ids |
isteğe bağlı bool |
kullanıcı tarafından belirtilen işaret |
operandbir dizi demeti olduğunda, her demet öğesi üzerinde reduce-scatter işlemi gerçekleştirilir.replica_groups, azaltmanın gerçekleştirildiği kopya gruplarının listesidir (geçerli kopyanın kopya kimliğiReplicaIdkullanılarak alınabilir). Her gruptaki kopyaların sırası, tüm azaltma sonucunun dağıtılacağı sırayı belirler.replica_groupsboş olmalıdır (bu durumda tüm kopyalar tek bir gruba aittir) veya kopya sayısı kadar öğe içermelidir. Birden fazla replika grubu olduğunda tüm gruplar aynı boyutta olmalıdır. Örneğin,replica_groups = {0, 2}, {1, 3},0ve2ile1ve3kopyaları arasında azaltma işlemi gerçekleştirir ve sonucu dağıtır.shard_count, her çoğaltma grubunun boyutudur. Bu bilgi,replica_groupsboş olduğunda gereklidir.replica_groupsboş değilseshard_count, her kopya grubunun boyutuna eşit olmalıdır.channel_id, modüller arası iletişim için kullanılır: Yalnızca aynıchannel_idile yapılanreduce-scatterişlemleri birbirleriyle iletişim kurabilir.layoutDüzenler hakkında daha fazla bilgi için xla::shapes bölümüne bakın.use_global_device_ids, kullanıcı tarafından belirtilen bir işarettir.false(varsayılan) olduğundareplica_groupsiçindeki sayılartrueolduğundaReplicaIdolur.replica_groups, (ReplicaID*partition_count+partition_id) öğesinin genel kimliğini temsil eder. Örneğin:- 2 kopya ve 4 bölümle
- 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)
- Burada her çift (replica_id, partition_id) şeklindedir.
Çıkış şekli, giriş şeklinin scatter_dimension kez shard_count küçültülmüş halidir. Örneğin, iki kopya varsa ve işlenen, iki kopyada sırasıyla [1.0, 2.25] ve [3.0, 5.25] değerine sahipse scatter_dim'nin 0 olduğu bu işlemin çıkış değeri, ilk kopya için [4.0], ikinci kopya için [7.5] olur.
StableHLO hakkında bilgi için StableHLO - reduce_scatter başlıklı makaleye bakın.
ReduceScatter - Example 1 - StableHLO
Yukarıdaki örnekte, ReduceScatter'a katılan 2 kopya vardır. Her replikada işlenen, f32[2,4] şeklindedir. Kopyalar arasında bir all-reduce (toplama) işlemi gerçekleştirilir ve her kopyada f32[2,4] şeklindeki indirgenmiş bir değer elde edilir. Bu küçültülmüş değer daha sonra 1. boyut boyunca 2 parçaya bölünür. Böylece her parçanın şekli f32[2,2] olur. İşlem grubu içindeki her kopya, gruptaki konumuna karşılık gelen parçayı alır. Sonuç olarak, her kopyadaki çıkışın şekli f32[2,2] olur.
ReduceWindow
Ayrıca XlaBuilder::ReduceWindow başlıklı makaleyi inceleyin.
N çok boyutlu diziden oluşan bir dizinin her penceresindeki tüm öğelere bir azaltma işlevi uygulayarak çıktı olarak tek bir çok boyutlu dizi veya N çok boyutlu diziden oluşan bir demet üretir. Her çıkış dizisi, pencerenin geçerli konumlarının sayısı kadar öğe içerir. Bir havuz oluşturma katmanı ReduceWindow olarak ifade edilebilir. Reduce'ye benzer şekilde, uygulanan computation her zaman soldaki init_values'in önüne geçer.
ReduceWindow(operands..., init_values..., computation, window_dimensions,
window_strides, padding)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operands
|
N XlaOps
|
Pencerenin yerleştirildiği taban alanını temsil eden, T_0,..., T_{N-1} türünde N çok boyutlu diziden oluşan bir dizi. |
init_values
|
N XlaOps
|
İndirgeme için N başlangıç değeri. Her bir N işleneni için bir değer. Ayrıntılar için Reduce (İndirgeme) bölümüne bakın. |
computation
|
XlaComputation
|
Tüm giriş işlenenlerinin her penceresindeki öğelere uygulanacak T_0,
..., T_{N-1}, T_0, ..., T_{N-1}
-> Collate(T_0, ..., T_{N-1}) türünde azaltma işlevi. |
window_dimensions
|
ArraySlice<int64>
|
pencere boyutu değerleri için tam sayı dizisi |
window_strides
|
ArraySlice<int64>
|
pencere adımı değerleri için tam sayı dizisi |
base_dilations
|
ArraySlice<int64>
|
temel genişleme değerleri için tam sayı dizisi |
window_dilations
|
ArraySlice<int64>
|
pencere genişletme değerleri için tamsayı dizisi |
padding
|
Padding
|
pencere için dolgu türü (Padding::kSame, adım 1 ise girişle aynı çıkış şekline sahip olacak şekilde dolgu yapar veya Padding::kValid, dolgu kullanmaz ve pencere artık sığmadığında "durdurur") |
Burada:
- N, 1'e eşit veya 1'den büyük olmalıdır.
- Tüm giriş dizileri aynı boyutlara sahip olmalıdır.
N = 1iseCollate(T)Tolur.N > 1,Collate(T_0, ..., T_{N-1}),(T0,...T{N-1})türündeNöğelerden oluşan bir demettir.
StableHLO bilgileri için StableHLO - reduce_window başlıklı makaleyi inceleyin.
ReduceWindow - Example 1
Giriş, [4x6] boyutunda bir matristir ve hem window_dimensions hem de window_stride_dimensions [2x3] boyutundadır.
// 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);

Bir boyuttaki 1 adımlık ilerleme, bir pencerenin boyuttaki konumunun bitişik penceresinden 1 öğe uzakta olduğunu belirtir. Pencerelerin birbirleriyle çakışmadığını belirtmek için window_stride_dimensions, window_dimensions ile eşit olmalıdır. Aşağıdaki şekilde iki farklı adım değerinin kullanımı gösterilmektedir. Girişin her boyutuna dolgu uygulanır ve hesaplamalar, girişin dolgudan sonraki boyutlarıyla gelmiş gibi yapılır.

Önemsiz olmayan bir dolgu örneği için, [10000, 1000, 100, 10, 1] giriş dizisi üzerinde 3 boyutu ve 2 adımıyla reduce-window minimum(başlangıç değeri MAX_FLOAT) hesaplamayı düşünün. Doldurma kValid, iki geçerli pencere ([10000, 1000, 100] ve [100, 10, 1]) için minimum değerleri hesaplayarak [100, 1] çıkışını oluşturur. Doldurma kSame, önce diziyi doldurur. Böylece, reduce-window işleminden sonraki şekil, her iki tarafa başlangıç öğeleri eklenerek [MAX_VALUE, 10000, 1000, 100, 10, 1,
MAX_VALUE] elde edilen, bir adımlık girişle aynı olur. Doldurulmuş dizide reduce-window çalıştırmak üç pencerede ([MAX_VALUE, 10000, 1000], [1000, 100, 10], [10, 1, MAX_VALUE]) işlem yapar ve [1000, 10, 1] sonucunu verir.
İndirgeme işlevinin değerlendirme sırası rastgeledir ve belirleyici olmayabilir. Bu nedenle, indirgeme işlevi yeniden ilişkilendirmeye karşı aşırı hassas olmamalıdır. Daha fazla bilgi için Reduce bağlamında birleşme özelliğiyle ilgili tartışmaya bakın.
ReduceWindow - Örnek 2 - StableHLO
Yukarıdaki örnekte:
Giriş) İşlenen, S32[3,2] giriş şekline sahiptir. Değerleri
[[1,2],[3,4],[5,6]] olan
1. adım) Satır boyutu boyunca 2 faktörüyle temel genişletme, işlenenin her satırı arasına boşluklar ekler. Genişletme işleminden sonra üstte 2 satır, altta 1 satır dolgu uygulanır. Bu nedenle tensör daha uzun hale gelir.
2. adım) [3,1] pencere genişlemesiyle [2,1] şeklindeki bir pencere tanımlanır. Bu, her pencerenin aynı sütundan iki öğe seçtiği ancak ikinci öğenin doğrudan ilk öğenin altında değil, üç satır aşağıda alındığı anlamına gelir.
3. adım) Pencereler daha sonra [4,1] adımıyla işlenen üzerinde kaydırılır. Bu işlem, pencerenin her seferinde dört satır aşağı hareket etmesine ve her seferinde bir sütun yatay olarak kaymasına neden olur. Doldurma hücreleri init_value ile doldurulur (bu örnekte init_value = 0). Genişleme hücrelerine "giren" değerler yoksayılır.
Adım ve dolgu nedeniyle bazı pencereler yalnızca sıfırlarla ve boşluklarla çakışırken diğerleri gerçek giriş değerleriyle çakışır.
4. adım) Her pencerede, öğeler 0 başlangıç değeriyle başlayarak azaltma işlevi (a, b) → a + b kullanılarak birleştirilir. En üstteki iki pencere yalnızca dolgu ve delik gördüğünden sonuçları 0 olur. Alttaki pencereler, girişteki 3 ve 4 değerlerini yakalar ve bunları sonuç olarak döndürür.
Sonuçlar) Nihai çıkışın şekli S32[2,2] olup değerleri şunlardır: [[0,0],[3,4]]
Rem
Ayrıca XlaBuilder::Rem başlıklı makaleyi inceleyin.
Bölünen lhs ve bölen rhs değerlerinin öğe bazında kalanını hesaplar.
Sonucun işareti, bölenden alınır ve sonucun mutlak değeri her zaman bölenin mutlak değerinden küçüktür.
Rem(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Rem için farklı boyutlu yayın desteği olan alternatif bir varyant mevcuttur:
Rem(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - remainder başlıklı makaleyi inceleyin.
ReplicaId
Ayrıca XlaBuilder::ReplicaId başlıklı makaleyi inceleyin.
Replikanın benzersiz kimliğini (U32 skaler) döndürür.
ReplicaId()
Her replikanın benzersiz kimliği, [0, N) aralığında işaretsiz bir tam sayıdır. Burada N, replika sayısıdır. Tüm kopyalar aynı programı çalıştırdığından, programdaki bir ReplicaId() çağrısı her kopyada farklı bir değer döndürür.
StableHLO bilgileri için StableHLO - replica_id başlıklı makaleyi inceleyin.
Yeniden şekillendirme
Ayrıca XlaBuilder::Reshape ve Collapse işlemine de bakın.
Bir dizinin boyutlarını yeni bir yapılandırmada yeniden şekillendirir.
Reshape(operand, dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
T türünde dizi |
dimensions |
int64 vektör |
yeni boyutların boyut vektörü |
Kavramsal olarak, yeniden şekillendirme önce bir diziyi veri değerlerinden oluşan tek boyutlu bir vektöre düzleştirir, ardından bu vektörü yeni bir şekle dönüştürür. Giriş bağımsız değişkenleri, T türünde rastgele bir dizi, derleme zamanında sabit boyutlu bir indeks vektörü ve sonuç için derleme zamanında sabit boyutlu bir boyut vektörüdür.
dimensions vektörü, çıkış dizisinin boyutunu belirler. dimensions içindeki 0 dizinindeki değer, 0 boyutunun boyutu, 1 dizinindeki değer ise 1 boyutunun boyutu vb. şeklindedir. dimensions boyutlarının çarpımı, işlenenin boyutlarının çarpımına eşit olmalıdır. Daraltılmış diziyi dimensions ile tanımlanan çok boyutlu diziye dönüştürürken dimensions içindeki boyutlar en yavaş değişenden (en büyük) en hızlı değişene (en küçük) doğru sıralanır.
Örneğin, v 24 öğeden oluşan bir dizi olsun:
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} };
Özel bir durum olarak, reshape işlevi tek öğeli bir diziyi skalere, skaleri de tek öğeli diziye dönüştürebilir. Örneğin,
Reshape(f32[1x1] { {5} }, {}) == 5;
Reshape(5, {1,1}) == f32[1x1] { {5} };
StableHLO bilgileri için StableHLO - reshape başlıklı makaleyi inceleyin.
Yeniden şekillendirme (açık)
Ayrıca XlaBuilder::Reshape başlıklı makaleyi inceleyin.
Reshape(shape, operand)
Açık hedef şekli kullanan yeniden şekillendirme işlemi.
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
shape |
Shape |
T türünün çıkış şekli |
operand |
XlaOp |
T türünde dizi |
Rev (ters)
Ayrıca XlaBuilder::Rev başlıklı makaleyi inceleyin.
Rev(operand, dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
T türünde dizi |
dimensions |
ArraySlice<int64> |
tersine çevrilecek boyutlar |
operand dizisindeki öğelerin sırasını belirtilen dimensions boyunca tersine çevirerek aynı şekle sahip bir çıkış dizisi oluşturur. Çok boyutlu dizindeki işlenen dizisinin her öğesi, dönüştürülmüş bir dizindeki çıkış dizisine depolanır. Çok boyutlu dizin, ters çevrilecek her boyuttaki dizin ters çevrilerek dönüştürülür (ör. N boyutlu bir boyut, ters çevrilecek boyutlardan biriyse dizini i, N - 1 - i olarak dönüştürülür).
Rev işleminin bir kullanım alanı, nöral ağlardaki gradyan hesaplaması sırasında evrişim ağırlık dizisini iki pencere boyutu boyunca tersine çevirmektir.
StableHLO hakkında bilgi için StableHLO - reverse başlıklı makaleyi inceleyin.
RngNormal
Ayrıca XlaBuilder::RngNormal başlıklı makaleyi inceleyin.
\(N(\mu, \sigma)\) Normal dağılım \(\mu\) izlenerek oluşturulan rastgele sayılarla belirli bir şekle sahip bir çıkış oluşturur. Parametreler \(\sigma\)ve \(\mu\) ile çıkış şeklinin kayan nokta türünde olması gerekir. Ayrıca parametrelerin skaler değerli olması gerekir.
RngNormal(mu, sigma, shape)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
mu |
XlaOp |
Oluşturulan sayıların ortalamasını belirten T türünde skaler |
sigma
|
XlaOp
|
Oluşturulan değerin standart sapmasını belirten T türünde skaler. |
shape |
Shape |
T türünün çıkış şekli |
StableHLO bilgileri için StableHLO - rng başlıklı makaleyi inceleyin.
RngUniform
Ayrıca XlaBuilder::RngUniform başlıklı makaleyi inceleyin.
Aralık üzerinde tek tip dağılımı izleyerek oluşturulan rastgele sayılarla belirli bir şekle sahip bir çıkış oluşturur. \([a,b)\)Parametreler ve çıkış öğesi türü, boole türü, tam sayı türü veya kayan nokta türü olmalıdır ve türler tutarlı olmalıdır. CPU ve GPU arka uçları şu anda yalnızca F64, F32, F16, BF16, S64, U64, S32 ve U32'yi desteklemektedir. Ayrıca, parametrelerin skaler değerli olması gerekir. Sonuç \(b <= a\) uygulamaya bağlıdır.
RngUniform(a, b, shape)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
a |
XlaOp |
Aralığın alt sınırını belirten T türünde skaler |
b |
XlaOp |
Aralığın üst sınırını belirten T türünde skaler |
shape |
Shape |
T türünün çıkış şekli |
StableHLO bilgileri için StableHLO - rng başlıklı makaleyi inceleyin.
RngBitGenerator
Ayrıca XlaBuilder::RngBitGenerator başlıklı makaleyi inceleyin.
Belirtilen algoritma (veya arka uç varsayılanı) kullanılarak tek tip rastgele bitlerle doldurulmuş, belirli bir şekle sahip bir çıkış oluşturur ve güncellenmiş bir durumu (başlangıç durumuyla aynı şekle sahip) ve oluşturulan rastgele verileri döndürür.
Başlangıç durumu, mevcut rastgele sayı oluşturma işleminin başlangıç durumudur. Gerekli şekil ve geçerli değerler, kullanılan algoritmaya bağlıdır.
Çıkışın, başlangıç durumunun deterministik bir işlevi olduğu garanti edilir ancak arka uçlar ve farklı derleyici sürümleri arasında deterministik olduğu garanti edilmez.
RngBitGenerator(algorithm, initial_state, shape)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
algorithm |
RandomAlgorithm |
Kullanılacak PRNG algoritması. |
initial_state |
XlaOp |
PRNG algoritması için başlangıç durumu. |
shape |
Shape |
Oluşturulan verilerin çıkış şekli. |
algorithm için kullanılabilir değerler:
rng_default: Arka uca özgü şekil gereksinimlerine sahip, arka uca özgü algoritma.rng_three_fry: ThreeFry sayaç tabanlı PRNG algoritması.initial_stateşekli, rastgele değerlerleu64[2]. Salmon et al. SC 2011. Paralel rastgele sayılar: 1, 2, 3 kadar kolay.rng_philox: Rastgele sayıları paralel olarak oluşturmak için kullanılan Philox algoritması.initial_stateşekli, rastgele değerlerleu64[3]'dir. Salmon et al. SC 2011. Paralel rastgele sayılar: 1, 2, 3 kadar kolay.
StableHLO bilgileri için StableHLO - rng_bit_generator başlıklı makaleyi inceleyin.
RngGetAndUpdateState
Ayrıca HloInstruction::CreateRngGetAndUpdateState başlıklı makaleyi inceleyin.
Çeşitli Rng işlemlerin API'si, RngGetAndUpdateState dahil olmak üzere HLO talimatlarına dahili olarak ayrıştırılır.
RngGetAndUpdateState, HLO'da temel olarak kullanılır. Bu işlem, HLO dökümlerinde görünebilir ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
Yuvarlak
Ayrıca XlaBuilder::Round başlıklı makaleyi inceleyin.
Öğe bazında yuvarlama, sıfırdan uzaklaştırma.
Round(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
RoundNearestAfz
Ayrıca XlaBuilder::RoundNearestAfz başlıklı makaleyi inceleyin.
En yakın tam sayıya doğru öğe bazında yuvarlama işlemi gerçekleştirir ve eşitlikleri sıfırdan uzaklaştırarak bozar.
RoundNearestAfz(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO bilgileri için StableHLO - round_nearest_afz başlıklı makaleyi inceleyin.
RoundNearestEven
Ayrıca XlaBuilder::RoundNearestEven başlıklı makaleyi inceleyin.
Öğeler en yakın çift sayıya yuvarlanır.
RoundNearestEven(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO bilgileri için StableHLO - round_nearest_even başlıklı makaleyi inceleyin.
Rsqrt
Ayrıca XlaBuilder::Rsqrt başlıklı makaleyi inceleyin.
Karekök işleminin öğe bazında karşılığı x -> 1.0 / sqrt(x).
Rsqrt(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Rsqrt, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Rsqrt(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO hakkında bilgi için StableHLO - rsqrt başlıklı makaleye bakın.
Dijital izler
Ayrıca XlaBuilder::Scan başlıklı makaleyi inceleyin.
Belirli bir boyutta bir diziye azaltma işlevi uygulayarak son durum ve ara değerler dizisi oluşturur.
Scan(inputs..., inits..., to_apply, scan_dimension,
is_reverse, is_associative)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
inputs |
m XlaOp'lerinin sırası |
Taranacak diziler. |
inits |
k XlaOp'lerinin sırası |
İlk taşıma işlemleri. |
to_apply |
XlaComputation |
i_0, ..., i_{m-1}, c_0, ..., c_{k-1} -> (o_0, ..., o_{n-1}, c'_0, ..., c'_{k-1}) türünün hesaplanması. |
scan_dimension |
int64 |
Taranacak boyut. |
is_reverse |
bool |
Doğruysa ters sırada tarayın. |
is_associative |
bool (üç durumlu) |
Doğruysa işlem birleştiricidir. |
to_apply işlevi, inputs içindeki öğelere scan_dimension boyunca sırayla uygulanır. is_reverse yanlışsa öğeler 0 ile N-1 arasında sırayla işlenir. Burada N, scan_dimension boyutudur. is_reverse doğruysa öğeler N-1 ile 0 arasında işlenir.
to_apply işlevi m + k işlenen alır:
inputsöğesindenmmevcut öğe.k, önceki adımdaki değerleri (veya ilk öğe içininits) taşır.
to_apply işlevi, n + k değerlerinden oluşan bir demet döndürür:
nöğesioutputs.kyeni taşıma değerleri.
Tarama işlemi, n + k değerlerinden oluşan bir demet üretir:
- Her adımın çıkış değerlerini içeren
nçıkış dizileri. - Tüm öğeler işlendikten sonra nihai
ktaşıma değerleri.
m girişlerinin türleri, to_apply öğesinin ilk m parametrelerinin türleriyle eşleşmelidir. n çıkışlarının türleri, to_apply öğesinin ilk n dönüş değerlerinin türleriyle eşleşmelidir. Tüm girişler ve çıkışlar arasındaki ek tarama boyutu aynı boyuta N sahip olmalıdır. to_apply öğesinin son k parametrelerinin ve dönüş değerlerinin türleri ile k başlatma işlemleri eşleşmelidir.
Örneğin (m, n, k == 1, N == 3), ilk taşıma i için [a, b, c], f(x, c) -> (y, c') işlevi ve scan_dimension=0, is_reverse=false değerlerini girin:
- 0. adım:
f(a, i) -> (y0, c0) - 1. adım:
f(b, c0) -> (y1, c1) - 2. adım:
f(c, c1) -> (y2, c2)
Scan çıkışı ([y0, y1, y2], c2) olur.
Dağılım
Ayrıca XlaBuilder::Scatter başlıklı makaleyi inceleyin.
XLA dağıtma işlemi, giriş dizisi operands değerlerinden oluşan bir sonuç dizisi oluşturur. Bu dizide, scatter_indices tarafından belirtilen dizinlerdeki birkaç dilim, update_computation kullanılarak updates içindeki değer dizisiyle güncellenir.
Scatter(operands..., scatter_indices, updates..., update_computation,
dimension_numbers, indices_are_sorted, unique_indices)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operands |
N dizisi XlaOp |
T_0, ..., T_N türünde N dizinin içine dağıtılacak. |
scatter_indices |
XlaOp |
Dağıtılması gereken dilimlerin başlangıç dizinlerini içeren dizi. |
updates |
N dizisi XlaOp |
T_0, ..., T_N türünde N dizi. updates[i], operands[i] dağıtımı için kullanılması gereken değerleri içerir. |
update_computation |
XlaComputation |
Giriş dizisindeki mevcut değerleri ve dağıtma sırasındaki güncellemeleri birleştirmek için kullanılacak hesaplama. Bu hesaplama T_0, ..., T_N, T_0, ..., T_N -> Collate(T_0, ..., T_N) türünde olmalıdır. |
index_vector_dim |
int64 |
Başlangıç dizinlerini içeren scatter_indices boyutudur. |
update_window_dims |
ArraySlice<int64> |
updates şeklindeki pencere boyutları. |
inserted_window_dims |
ArraySlice<int64> |
updates şekline eklenmesi gereken pencere boyutları kümesi. |
scatter_dims_to_operand_dims |
ArraySlice<int64> |
Dağıtma dizinlerinden işlenen dizin alanına giden bir boyut haritası. Bu dizi, i ile scatter_dims_to_operand_dims[i] arasındaki eşleme olarak yorumlanır . Bire bir ve toplam olmalıdır. |
dimension_number |
ScatterDimensionNumbers |
Dağıtma işlemi için boyut numaraları |
indices_are_sorted |
bool |
Dizinlerin arayan tarafından sıralanmasının garanti edilip edilmediği. |
unique_indices |
bool |
Dizinlerin arayan tarafından benzersiz olması garanti edilip edilmediği. |
Burada:
- N, 1'e eşit veya daha büyük olmalıdır.
operands[0], ...,operands[N-1] öğelerinin tümü aynı boyutta olmalıdır.updates[0], ...,updates[N-1] öğelerinin tümü aynı boyutta olmalıdır.N = 1iseCollate(T)Tolur.N > 1,Collate(T_0, ..., T_N),TtüründeNöğeden oluşan bir demettir.
index_vector_dim, scatter_indices.rank değerine eşitse scatter_indices değerinin sonunda 1 boyutu olduğunu varsayarız.
update_scatter_dims türündeki ArraySlice<int64>'yi, updates şeklindeki ve update_window_dims'de bulunmayan boyutlar kümesi olarak tanımlarız (artan sırada).
Saçılımın bağımsız değişkenleri şu kısıtlamalara uymalıdır:
Her
updatesdizisiupdate_window_dims.size + scatter_indices.rank - 1boyutlu olmalıdır.Her
updatesdizisindekiiboyutunun sınırları aşağıdakilere uygun olmalıdır:i,update_window_dimsiçinde varsa (yani bazıkiçinupdate_window_dims[k] değerine eşitse)updatesiçindekiiboyutunun sınırı,inserted_window_dimsdikkate alındıktan sonraoperandboyutunun karşılık gelen sınırını aşmamalıdır (yaniadjusted_window_bounds[k]; buradaadjusted_window_bounds,inserted_window_dimsdizinlerindeki sınırlar kaldırılmış şekildeoperandboyutunun sınırlarını içerir).i,update_scatter_dimsiçinde varsa (yani bazıkiçinupdate_scatter_dims[k] öğesine eşitse)updatesiçindekiiboyutunun sınırı,index_vector_dimatlanarakscatter_indicesöğesinin karşılık gelen sınırına eşit olmalıdır (yanik<index_vector_dimisescatter_indices.shape.dims[k], aksi takdirdescatter_indices.shape.dims[k+1]).
update_window_dims, artan sırada olmalı, yinelenen boyut numaraları içermemeli ve[0, updates.rank)aralığında olmalıdır.inserted_window_dims, artan sırada olmalı, yinelenen boyut numaraları içermemeli ve[0, operand.rank)aralığında olmalıdır.operand.rank,update_window_dims.sizeveinserted_window_dims.sizedeğerlerinin toplamına eşit olmalıdır.scatter_dims_to_operand_dims.size,scatter_indices.shape.dims[index_vector_dim] değerine eşit olmalı ve değerleri[0, operand.rank)aralığında olmalıdır.
Her updates dizisindeki belirli bir U dizini için, bu güncellemenin uygulanması gereken ilgili operands dizisindeki karşılık gelen I dizini aşağıdaki şekilde hesaplanır:
G= {U[k] forkinupdate_scatter_dims} olsun.G'yı kullanarakscatter_indicesdizisindeS[i] =scatter_indices[Combine(G,i)] olacak şekilde bir dizin vektörüSarayın. Burada Combine(A, b), b'yi A'yaindex_vector_dimkonumlarında ekler.Sinöğesiniscatter_dims_to_operand_dimsharitasını kullanarakSile dağıtarakoperandiçinde bir dizin oluşturun.SDaha resmi bir şekilde:Sin[scatter_dims_to_operand_dims[k]] =S[k] ifk<scatter_dims_to_operand_dims.size.- Aksi durumda
Sin[_] =0.
Win,operandsdizisinin her birindeupdate_window_dimskonumundaki dizinleriinserted_window_dims'ye göreU'ye dağıtarak bir dizin oluşturur. Daha resmi bir şekilde: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. (Örneğin,update_window_dims.size4,operand.rank6veinserted_window_dims{0,2} isewindow_dims_to_operand_dims{0→1,1→3,2→4,3→5} olur.)- Aksi durumda
Win[_] =0.
I, + öğe bazında toplama işlemi olmak üzereWin+Sin'dir.
Özetle, dağıtma işlemi aşağıdaki şekilde tanımlanabilir.
outputöğesinioperandsile başlatın. Örneğin, tümJdizinleri için,operands[J] dizisindeki tümOdizinleri için:
output[J][O] =operands[J][O]updates[J] dizisindeki herUdizini veoperand[J] dizisindeki karşılık gelenOdizini için,O,outputiçin geçerli bir dizinse:
(output[0][O], ...,output[N-1][O]) =update_computation(output[0][O], ..., ,output[N-1][O],updates[0][U], ...,updates[N-1][U])
Güncellemelerin uygulanma sırası belirsizdir. Bu nedenle, updates içindeki birden fazla dizin operands içindeki aynı dizine referans verdiğinde output içindeki ilgili değer belirsiz olur.
update_computation işlevine iletilen ilk parametrenin her zaman output dizisindeki mevcut değer, ikinci parametrenin ise her zaman updates dizisindeki değer olacağını unutmayın. Bu, özellikle update_computation işleminin değişme özelliği olmadığı durumlarda önemlidir.
indices_are_sorted doğru olarak ayarlanırsa XLA, scatter_indices değerlerinin kullanıcı tarafından sıralandığını (değerleri scatter_dims_to_operand_dims'e göre dağıtıldıktan sonra artan sırada) varsayabilir. Sıralanmamışlarsa anlamsal yapı uygulamaya göre tanımlanır.
unique_indices doğru değerine ayarlanırsa XLA, dağıtılan tüm öğelerin benzersiz olduğunu varsayabilir. Bu nedenle XLA, atomik olmayan işlemleri kullanabilir. unique_indices doğru olarak ayarlanırsa ve dağıtılan dizinler benzersiz değilse semantik, uygulamaya göre tanımlanır.
Gayri resmi olarak, dağıtma işlemi toplama işleminin tersi olarak görülebilir. Yani dağıtma işlemi, karşılık gelen toplama işlemi tarafından çıkarılan giriş öğelerini günceller.
Ayrıntılı bir resmi olmayan açıklama ve örnekler için Gather bölümündeki "Resmi Olmayan Açıklama" bölümüne bakın.
StableHLO hakkında bilgi için StableHLO - scatter başlıklı makaleyi inceleyin.
Scatter - Example 1 - StableHLO
Yukarıdaki resimde, tablonun her satırı bir update index örneğidir. Soldan(Dizini Güncelle) sağa(Sonuç Dizini) doğru adım adım inceleyelim:
Giriş) input, S32[2,3,4,2] şeklindedir. scatter_indices şekli S64[2,2,3,2] olmalıdır. updates S32[2,2,3,1,2] şeklindedir.
Güncelleme dizini) Girişin bir parçası olarak update_window_dims:[3,4] verilir. Bu, updates'nin 3. ve 4. boyutunun pencere boyutları olduğunu gösterir ve sarı renkle vurgulanır. Bu, update_scatter_dims = [0,1,2] sonucunu çıkarmamıza olanak tanır.
Dağılım dizinini güncelleme) Her biri için ayıklanan updated_scatter_dims değerini gösterir.
(Dizini güncelle sütununun sarı olmayan kısmı)
Başlangıç dizini) scatter_indices tensör resmine baktığımızda, önceki adımdaki (Saçılım dizinini güncelle) değerlerimizin başlangıç dizininin konumunu verdiğini görüyoruz. index_vector_dim, başlangıç dizinlerini içeren starting_indices'nin boyutunu da bize bildiriyor. scatter_indices için bu, 2 boyutlu 3. boyuttur.
Tam Başlangıç Dizini) scatter_dims_to_operand_dims = [2,1] ifadesi, dizin vektörünün ilk öğesinin operand boyutu 2'ye gittiğini gösterir. Dizin vektörünün ikinci öğesi, operand boyutu 1'e gider. Kalan işlenen boyutları 0 ile doldurulur.
Tam Toplu İşleme Dizini) Mor renkle vurgulanan alanın bu sütunda(tam toplu işleme dizini), güncelleme dağılımı dizini sütununda ve güncelleme dizini sütununda gösterildiğini görüyoruz.
Tam Pencere Dizini) update_window_dimensions [3,4] değerinden hesaplanır.
Sonuç dizini) operand tensörüne tam başlangıç dizini, tam toplu iş dizini ve tam pencere dizininin eklenmesi. Yeşille vurgulanan bölgelerin operand şekline de karşılık geldiğini unutmayın. Son satır, operand tensörünün dışında kaldığı için atlanır.
Seç
Ayrıca XlaBuilder::Select başlıklı makaleyi inceleyin.
Bir yüklem dizisinin değerlerine göre iki giriş dizisinin öğelerinden bir çıkış dizisi oluşturur.
Select(pred, on_true, on_false)
| Bağımsız değişkenler | Tür | Anlam Bilimi (Semantik) |
|---|---|---|
pred |
XlaOp |
PRED türünde dizi |
on_true |
XlaOp |
T türünde dizi |
on_false |
XlaOp |
T türünde dizi |
on_true ve on_false dizileri aynı şekle sahip olmalıdır. Bu, çıkış dizisinin şeklidir. pred dizisi, on_true ve on_false ile aynı boyuta ve PRED öğe türüne sahip olmalıdır.
pred dizisindeki her P öğesi için, P öğesinin değeri true ise çıkış dizisinin karşılık gelen öğesi on_true dizisinden, P öğesinin değeri false ise on_false dizisinden alınır. Yayınlamanın kısıtlanmış bir biçimi olarak,
pred, PRED türünde bir skaler olabilir. Bu durumda, pred true ise çıkış dizisi tamamen on_true'dan, pred false ise on_false'den alınır.
Ölçeklendirilmemiş pred içeren örnek:
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};
Skaler pred içeren örnek:
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};
Demetler arasında seçim desteklenir. Bu amaçla, demetler skaler türler olarak kabul edilir. on_true ve on_false demet ise (aynı şekle sahip olmalıdır!) pred, PRED türünde bir skaler olmalıdır.
StableHLO hakkında bilgi için StableHLO - select başlıklı makaleyi inceleyin.
SelectAndScatter
Ayrıca XlaBuilder::SelectAndScatter başlıklı makaleyi inceleyin.
Bu işlem, önce her pencereden bir öğe seçmek için operand dizisinde ReduceWindow hesaplayan, ardından da seçilen öğelerin dizinlerine source dizisini dağıtarak işlenen dizisiyle aynı şekle sahip bir çıkış dizisi oluşturan bir bileşik işlem olarak kabul edilebilir. İkili select işlevi, her pencereye uygulanarak her pencereden bir öğe seçmek için kullanılır ve ilk parametrenin dizin vektörünün ikinci parametrenin dizin vektöründen sözlükbilimsel olarak daha küçük olduğu özellik ile çağrılır. select işlevi, ilk parametre seçiliyse true, ikinci parametre seçiliyse false değerini döndürür.İşlevin, seçilen öğenin belirli bir pencere için geçilen öğelerin sırasına bağlı olmaması amacıyla geçişliliği koruması gerekir (ör. select(a, b) ve select(b, c) true ise select(a, c) da true'dir).
scatter işlevi, çıkış dizisindeki seçili her dizinde uygulanır. İki skaler parametre alır:
- Çıkış dizisinde seçilen dizindeki geçerli değer
- Seçili dizin için geçerli olan
sourcedağılım değeri
Bu işlev, iki parametreyi birleştirir ve çıkış dizisindeki seçili dizindeki değeri güncellemek için kullanılan bir skaler değer döndürür. Başlangıçta, çıkış dizisinin tüm dizinleri init_value olarak ayarlanır.
Çıkış dizisi, operand dizisiyle aynı şekle sahiptir ve source dizisi, operand dizisine ReduceWindow işlemi uygulandığında elde edilen sonuçla aynı şekle sahip olmalıdır. SelectAndScatter, bir sinir ağındaki havuz oluşturma katmanının gradyan değerlerini geriye yaymak için kullanılabilir.
SelectAndScatter(operand, select, window_dimensions, window_strides, padding,
source, init_value, scatter)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand
|
XlaOp
|
pencerelerin kaydığı T türünde dizi |
select
|
XlaComputation
|
T, T
-> PRED türünde ikili hesaplama. Her penceredeki tüm öğelere uygulanır. İlk parametre seçilirse true, ikinci parametre seçilirse false değerini döndürür. |
window_dimensions
|
ArraySlice<int64>
|
pencere boyutu değerleri için tam sayı dizisi |
window_strides
|
ArraySlice<int64>
|
pencere adımı değerleri için tam sayı dizisi |
padding
|
Padding
|
pencere için dolgu türü (Padding::kSame veya Padding::kValid) |
source
|
XlaOp
|
Dağıtılacak değerleri içeren T türünde dizi |
init_value
|
XlaOp
|
Çıkış dizisinin başlangıç değeri için T türünde skalar değer |
scatter
|
XlaComputation
|
Her bir dağıtma kaynağı öğesini hedef öğesiyle uygulamak için T, T
-> T türünde ikili hesaplama |
Aşağıdaki şekilde, parametreleri arasındaki maksimum değeri hesaplayan select işleviyle birlikte SelectAndScatter kullanımına ilişkin örnekler gösterilmektedir. Aşağıdaki şekil (2)'de gösterildiği gibi pencereler çakıştığında operand dizisinin bir dizininin farklı pencereler tarafından birden çok kez seçilebileceğini unutmayın. Şekilde, değeri 9 olan öğe hem üstteki pencereler (mavi ve kırmızı) tarafından seçilir ve ikili toplama scatter işlevi, değeri 8 olan (2 + 6) çıkış öğesini üretir.

scatter işlevinin değerlendirme sırası rastgeledir ve belirleyici olmayabilir. Bu nedenle, scatter işlevi yeniden ilişkilendirmeye karşı aşırı hassas olmamalıdır. Daha fazla bilgi için Reduce bağlamında ilişkilendirme hakkındaki tartışmaya bakın.
StableHLO bilgileri için StableHLO - select_and_scatter başlıklı makaleyi inceleyin.
Gönder
Ayrıca XlaBuilder::Send başlıklı makaleyi inceleyin.
Send, SendWithTokens ve SendToHost, HLO'da iletişim temel öğeleri olarak işlev gören işlemlerdir. Bu işlemler genellikle HLO dökümlerinde düşük seviyeli giriş/çıkış veya cihazlar arası aktarımın bir parçası olarak görünür ancak son kullanıcılar tarafından manuel olarak oluşturulması amaçlanmamıştır.
Send(operand, handle)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
Gönderilecek veriler (T türünde dizi) |
handle |
ChannelHandle |
Her gönderme/alma çifti için benzersiz tanımlayıcı |
Belirtilen işlenen verilerini, aynı kanal adını paylaşan başka bir hesaplamadaki Recv talimatına gönderir. Herhangi bir veri döndürmez.
Recv işlemine benzer şekilde, Send işleminin istemci API'si senkron iletişimi temsil eder ve eşzamansız veri aktarımlarını etkinleştirmek için dahili olarak 2 HLO talimatına (Send ve SendDone) ayrıştırılır. Ayrıca
HloInstruction::CreateSend ve HloInstruction::CreateSendDone başlıklı makalelere göz atın.
Send(HloInstruction operand, int64 channel_id)
İşlenenin, aynı kanal kimliğine sahip Recv talimatıyla ayrılan kaynaklara eşzamansız aktarımını başlatır. Veri aktarımının tamamlanmasını beklemek için sonraki bir SendDone talimatı tarafından kullanılan bir bağlam döndürür. Bağlam, {işlenen (şekil), istek tanımlayıcısı (U32)} demetidir ve yalnızca bir SendDone talimatı tarafından kullanılabilir.
StableHLO hakkında bilgi için StableHLO - send başlıklı makaleyi inceleyin.
SendDone
Ayrıca HloInstruction::CreateSendDone başlıklı makaleyi inceleyin.
SendDone(HloInstruction context)
Send talimatıyla oluşturulan bir bağlam verildiğinde, veri aktarımının tamamlanmasını bekler. Talimat herhangi bir veri döndürmüyor.
Kanal talimatlarının planlanması
Her kanal için 4 talimatın (Recv, RecvDone, Send, SendDone) yürütülme sırası aşağıdaki gibidir.

Recv,Sendtarihinden önce gerçekleşirSend,RecvDonetarihinden önce gerçekleşirRecv,RecvDonetarihinden önce gerçekleşirSend,SendDonetarihinden önce gerçekleşir
Arka uç derleyiciler, kanal talimatları aracılığıyla iletişim kuran her hesaplama için doğrusal bir plan oluşturduğunda hesaplamalar arasında döngü olmamalıdır. Örneğin, aşağıdaki zamanlamalar kilitlenmelere yol açar.

SetDimensionSize
Ayrıca XlaBuilder::SetDimensionSize başlıklı makaleyi inceleyin.
XlaOp'un belirtilen boyutunun dinamik boyutunu ayarlar. İşlenen, dizi şeklinde olmalıdır.
SetDimensionSize(operand, val, dimension)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
n boyutlu giriş dizisi. |
val |
XlaOp |
Çalışma zamanı dinamik boyutunu temsil eden int32. |
dimension
|
int64
|
Boyutu belirten [0, n) aralığındaki bir değer. |
Derleyici tarafından izlenen dinamik boyutla birlikte, sonucu işlenen olarak iletin.
Doldurulmuş değerler, sonraki azaltma işlemleri tarafından yok sayılır.
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
Ayrıca XlaBuilder::ShiftLeft başlıklı makaleyi inceleyin.
lhs üzerinde rhs bit sayısı kadar öğe bazında sola kaydırma işlemi gerçekleştirir.
ShiftLeft(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
ShiftLeft için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
ShiftLeft(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO bilgileri için StableHLO - shift_left başlıklı makaleye bakın.
ShiftRightArithmetic
Ayrıca XlaBuilder::ShiftRightArithmetic başlıklı makaleyi inceleyin.
lhs üzerinde rhs bit sayısı kadar öğe bazında aritmetik sağa kaydırma işlemi gerçekleştirir.
ShiftRightArithmetic(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
ShiftRightArithmetic için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:
ShiftRightArithmetic(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO hakkında bilgi için StableHLO - shift_right_arithmetic başlıklı makaleyi inceleyin.
ShiftRightLogical
Ayrıca XlaBuilder::ShiftRightLogical başlıklı makaleyi inceleyin.
lhs üzerinde rhs bit sayısı kadar öğe bazında mantıksal sağa kaydırma işlemi gerçekleştirir.
ShiftRightLogical(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
ShiftRightLogical için farklı boyutlu yayın desteği olan alternatif bir varyant mevcuttur:
ShiftRightLogical(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO bilgileri için StableHLO - shift_right_logical başlıklı makaleyi inceleyin.
İmzala
Ayrıca XlaBuilder::Sign başlıklı makaleyi inceleyin.
Sign(operand) İşaret işlemi x -> sgn(x) burada
\[\text{sgn}(x) = \begin{cases} -1 & x < 0\\ -0 & x = -0\\ NaN & x = NaN\\ +0 & x = +0\\ 1 & x > 0 \end{cases}\]
operand öğe türünün karşılaştırma operatörünü kullanarak.
Sign(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
StableHLO hakkında bilgi için StableHLO - sign başlıklı makaleyi inceleyin.
Sin
Sin(operand) Öğeler bazında sinüs x -> sin(x).
Ayrıca XlaBuilder::Sin başlıklı makaleyi inceleyin.
Sin(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Sin, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Sin(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO hakkında bilgi edinmek için StableHLO - sine başlıklı makaleyi inceleyin.
Dilim
Ayrıca XlaBuilder::Slice başlıklı makaleyi inceleyin.
Dilimleme, giriş dizisinden bir alt dizi çıkarır. Alt dizi, girişle aynı sayıda boyuta sahiptir ve sınırlayıcı kutunun boyutları ile dizinlerinin dilimleme işlemine bağımsız değişken olarak verildiği giriş dizisindeki sınırlayıcı kutunun içindeki değerleri içerir.
Slice(operand, start_indices, limit_indices, strides)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
T türünde N boyutlu dizi |
start_indices
|
ArraySlice<int64>
|
Her boyut için dilimin başlangıç dizinlerini içeren N tam sayılık liste. Değerler sıfır veya sıfırdan büyük olmalıdır. |
limit_indices
|
ArraySlice<int64>
|
Her boyut için dilimin bitiş dizinlerini (hariç) içeren N tam sayının listesi. Her değer, boyutun ilgili start_indices değerinden büyük veya bu değere eşit, boyutun boyutundan ise küçük ya da bu boyuta eşit olmalıdır. |
strides
|
ArraySlice<int64>
|
Dilimin giriş adımını belirleyen N tam sayısının listesi. Dilim, d boyutunda her strides[d] öğeyi seçer. |
1 boyutlu örnek:
let a = {0.0, 1.0, 2.0, 3.0, 4.0}
Slice(a, {2}, {4})
// Result: {2.0, 3.0}
2 boyutlu örnek:
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 bilgileri için StableHLO - slice başlıklı makaleyi inceleyin.
Sırala
Ayrıca XlaBuilder::Sort başlıklı makaleyi inceleyin.
Sort(operands, comparator, dimension, is_stable)
| Bağımsız değişkenler | Tür | Anlam Bilimi (Semantik) |
|---|---|---|
operands |
ArraySlice<XlaOp> |
Sıralanacak işlenenler. |
comparator |
XlaComputation |
Kullanılacak karşılaştırıcı hesaplaması. |
dimension |
int64 |
Sıralama ölçütü olarak kullanılacak boyut. |
is_stable |
bool |
Kararlı sıralamanın kullanılıp kullanılmayacağı. |
Yalnızca bir işlenen sağlanırsa:
İşlenen 1 boyutlu bir tensörse (dizi), sonuç sıralanmış bir dizidir. Diziyi artan düzende sıralamak istiyorsanız karşılaştırıcı, "küçüktür" karşılaştırması yapmalıdır. Resmi olarak, dizi sıralandıktan sonra
i, jilei < jolan tüm dizin konumları için geçerlidir. Bu konumlarcomparator(value[i], value[j]) = comparator(value[j], value[i]) = falseveyacomparator(value[i], value[j]) = trueolabilir.İşlenenin boyut sayısı daha fazlaysa işlenen, sağlanan boyuta göre sıralanır. Örneğin, 2 boyutlu bir tensör (matris) için
0boyut değeri her sütunu bağımsız olarak sıralar ve1boyut değeri her satırı bağımsız olarak sıralar. Boyut numarası sağlanmazsa varsayılan olarak son boyut seçilir. Sıralanan boyut için 1 boyutlu durumda olduğu gibi aynı sıralama düzeni geçerlidir.
n > 1 işlenen sağlanırsa:
Tüm
nişlenenleri aynı boyutlara sahip tensörler olmalıdır. Tensörlerin öğe türleri farklı olabilir.Tüm işlenenler ayrı ayrı değil, birlikte sıralanır. Kavramsal olarak işlenenler, demet olarak ele alınır.
ivejdizin konumlarındaki her işlenenin öğelerinin değiştirilip değiştirilmeyeceği kontrol edilirken karşılaştırıcı,2 * nskaler parametrelerle çağrılır. Burada2 * kparametresi,k-thişlenenindekiikonumundaki değere,2 * k + 1parametresi isek-thişlenenindekijkonumundaki değere karşılık gelir. Bu nedenle, karşılaştırıcı genellikle2 * kve2 * k + 1parametrelerini karşılaştırır ve eşitlik bozucu olarak başka parametre çiftlerini kullanabilir.Sonuç, sıralı düzende işlenenlerden oluşan bir demettir (yukarıda belirtildiği gibi, sağlanan boyut boyunca). Demetin
i-thişleneni, Sırala'nıni-thişlenenine karşılık gelir.
Örneğin, operand0 = [3, 1], operand1 = [42, 50], operand2 = [-3.0, 1.1] olmak üzere üç işlenen varsa ve karşılaştırıcı yalnızca operand0 değerlerini "küçüktür" ile karşılaştırıyorsa sıralamanın çıkışı ([1, 3], [50, 42], [1.1, -3.0]) demeti olur.
is_stable doğru olarak ayarlanırsa sıralamanın kararlı olduğu garanti edilir. Yani karşılaştırıcı tarafından eşit kabul edilen öğeler varsa eşit değerlerin göreli sırası korunur. İki öğe (e1 ve e2) ancak ve ancak comparator(e1, e2) = comparator(e2, e1) = false ise eşittir. Varsayılan olarak is_stable yanlış (false) olarak ayarlanır.
StableHLO hakkında bilgi için StableHLO - sort başlıklı makaleyi inceleyin.
Sqrt
Ayrıca XlaBuilder::Sqrt başlıklı makaleyi inceleyin.
Öğe bazında karekök işlemi x -> sqrt(x).
Sqrt(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Karekök, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Sqrt(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO bilgileri için StableHLO - sqrt başlıklı makaleyi inceleyin.
Alt
Ayrıca XlaBuilder::Sub başlıklı makaleyi inceleyin.
lhs ve rhs değerlerini öğe bazında çıkarır.
Sub(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Sub için farklı boyutlu yayın desteği içeren alternatif bir varyant mevcuttur:
Sub(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO bilgileri için StableHLO - subtract başlıklı makaleyi inceleyin.
Ten Rengi
Ayrıca XlaBuilder::Tan başlıklı makaleyi inceleyin.
Öğe bazında tanjant x -> tan(x).
Tan(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Tan, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Tan(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO hakkında bilgi için StableHLO - tan başlıklı makaleyi inceleyin.
Tanh
Ayrıca XlaBuilder::Tanh başlıklı makaleyi inceleyin.
Öğe bazında hiperbolik tanjant x -> tanh(x).
Tanh(operand)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
Tanh, isteğe bağlı result_accuracy bağımsız değişkenini de destekler:
Tanh(operand, result_accuracy)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
İşlevin işleneni |
result_accuracy
|
isteğe bağlı ResultAccuracy
|
Kullanıcının, birden fazla uygulaması olan tekli işlemler için isteyebileceği doğruluk türleri |
result_accuracy hakkında daha fazla bilgi için Sonuç Doğruluğu başlıklı makaleyi inceleyin.
StableHLO bilgileri için StableHLO - tanh başlıklı makaleyi inceleyin.
TopK
Ayrıca XlaBuilder::TopK başlıklı makaleyi inceleyin.
TopK, verilen tensörün son boyutu için k en büyük veya en küçük öğelerin değerlerini ve dizinlerini bulur.
TopK(operand, k, largest)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand
|
XlaOp
|
En üstteki k öğelerin ayıklanacağı tensör.
Tensörün bir veya daha fazla boyutu olmalıdır. Tensörün son boyutunun boyutu k veya daha büyük olmalıdır. |
k |
int64 |
Ayıklanacak öğe sayısı. |
largest
|
bool
|
En büyük veya en küçük k öğelerinin çıkarılıp çıkarılmayacağı. |
1 boyutlu bir giriş tensörü (dizi) için dizideki ken büyük veya en küçük
girişleri bulur ve iki diziden oluşan bir demet (values, indices) çıkarır. Dolayısıyla values[j], operand içindeki j. en büyük/en küçük giriş, dizini ise indices[j] olur.
1'den fazla boyutu olan bir giriş tensörü için, son boyuttaki en iyi k girişleri hesaplanır ve çıkışta diğer tüm boyutlar (satırlar) korunur. Bu nedenle, [A, B, ..., P, Q] şeklindeki bir işlenen için (burada Q >= k) çıkış, (values, indices) demetidir.
values.shape = indices.shape = [A, B, ..., P, k]
Bir satırdaki iki öğe eşitse daha düşük endeksli öğe önce görünür.
Transpoze
tf.reshape işlemine de bakın.
Transpose(operand, permutation)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
operand |
XlaOp |
Transpozu alınacak işlenen. |
permutation |
ArraySlice<int64> |
Boyutların nasıl değiştirileceği. |
İşlenen boyutları verilen permütasyonla permüte eder. Bu nedenle, ∀ i . 0 ≤ i < number of dimensions ⇒
input_dimensions[permutation[i]] = output_dimensions[i].
Bu, Reshape(operand, permutation, Permute(permutation, operand.shape.dimensions)) ile aynıdır.
StableHLO bilgileri için StableHLO - transpose başlıklı makaleyi inceleyin.
TriangularSolve
Ayrıca XlaBuilder::TriangularSolve başlıklı makaleyi inceleyin.
Doğrusal denklem sistemlerini, ileri veya geri yerine koyma yöntemiyle alt ya da üst üçgen katsayı matrisleriyle çözer. Önde gelen boyutlar boyunca yayın yapan bu rutin, op(a) * x =
b veya x * op(a) = b matris sistemlerinden birini a ve b verildiğinde x değişkeni için çözer. Burada op(a), op(a) = a, op(a) = Transpose(a) veya op(a) = Conj(Transpose(a))'dır.
TriangularSolve(a, b, left_side, lower, unit_diagonal, transpose_a)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
a
|
XlaOp
|
Şekli [..., M,
M] olan karmaşık veya kayan nokta türünde 2'den fazla boyutlu bir dizi. |
b
|
XlaOp
|
[..., M, K] şekline sahip aynı türden 2'den fazla boyutlu bir dizi, left_side doğruysa, aksi takdirde [..., K, M]. |
left_side
|
bool
|
op(a) * x = b (true) veya x *
op(a) = b (false) biçimindeki bir sistemin çözülüp çözülmeyeceğini gösterir. |
lower
|
bool
|
a sembolünün üst veya alt üçgeninin kullanılıp kullanılmayacağı. |
unit_diagonal
|
bool
|
true ise a öğesinin köşegen öğelerinin 1 olduğu varsayılır ve bunlara erişilmez. |
transpose_a
|
Transpose
|
a değerinin olduğu gibi mi kullanılacağını, transpozesinin mi alınacağını yoksa eşlenik transpozesinin mi alınacağını belirtir. |
Giriş verileri, lower değerine bağlı olarak yalnızca a öğesinin alt/üst üçgeninden okunur. Diğer üçgendeki değerler yok sayılır. Çıkış verileri aynı üçgende döndürülür. Diğer üçgendeki değerler uygulamaya bağlıdır ve herhangi bir değer olabilir.
a ve b boyutlarının sayısı 2'den büyükse bunlar, matris grupları olarak değerlendirilir. Bu durumda, küçük 2 boyut hariç tüm boyutlar grup boyutlarıdır. a ve b eşit grup boyutlarına sahip olmalıdır.
StableHLO bilgileri için StableHLO - triangular_solve başlıklı makaleyi inceleyin.
Unsur
Ayrıca XlaBuilder::Tuple başlıklı makaleyi inceleyin.
Her biri kendi şekline sahip, değişken sayıda veri tutma birimi içeren bir demet.
Tuple(elements)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
elements |
XlaOp vektörü |
T türünde N dizisi |
Bu, C++'taki std::tuple ile benzerdir. Kavramsal olarak:
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);
Demetler, GetTupleElement işlemiyle ayrıştırılabilir (erişilebilir).
StableHLO bilgileri için StableHLO - tuple başlıklı makaleyi inceleyin.
Bu
Ayrıca XlaBuilder::While başlıklı makaleyi inceleyin.
While(condition, body, init)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
condition
|
XlaComputation
|
Döngünün sonlandırma koşulunu tanımlayan T -> PRED türünde XlaComputation. |
body
|
XlaComputation
|
Döngünün gövdesini tanımlayan T -> T türünde XlaComputation. |
init
|
T
|
condition ve body parametresinin başlangıç değeri. |
condition başarısız olana kadar body öğesini sırayla yürütür. Bu, aşağıda listelenen farklılıklar ve kısıtlamalar dışında birçok dildeki tipik bir while döngüsüne benzer.
- Bir
Whiledüğümü,bodyöğesinin son yürütülmesinden elde edilen sonuç olanTtüründe bir değer döndürür. Ttürünün şekli statik olarak belirlenir ve tüm yinelemelerde aynı olmalıdır.
Hesaplamaların T parametreleri, ilk yinelemede init değeriyle başlatılır ve sonraki her yinelemede body değerinden elde edilen yeni sonuçla otomatik olarak güncellenir.
While düğümünün temel kullanım alanlarından biri, sinir ağlarında eğitimin tekrar tekrar yürütülmesini sağlamaktır. Aşağıda, hesaplamayı temsil eden bir grafikle birlikte basitleştirilmiş sözde kod gösterilmektedir. Kod, while_test.cc içinde bulunabilir. Bu örnekteki T türü, yineleme sayısı için int32 ve biriktirici için vector[10] içeren bir Tuple'dir. 1.000 yineleme boyunca döngü, biriktiriciye sabit bir vektör eklemeye devam eder.
// 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 hakkında bilgi için StableHLO - while başlıklı makaleyi inceleyin.
Xor
Ayrıca XlaBuilder::Xor başlıklı makaleyi inceleyin.
lhs ve rhs üzerinde öğe bazında XOR işlemi gerçekleştirir.
Xor(lhs, rhs)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın belgelerine bakın. Bir işlemin sonucu, iki giriş dizisinin yayınlanmasıyla elde edilen bir şekle sahiptir. Bu varyantta, işlenenlerden biri skaler olmadığı sürece farklı sıralardaki diziler arasındaki işlemler desteklenmez.
Xor için farklı boyutlu yayın desteği olan alternatif bir varyant mevcuttur:
Xor(lhs,rhs, broadcast_dimensions)
| Bağımsız değişkenler | Tür | Anlamsal Yapı |
|---|---|---|
| lhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| rhs | XlaOp | Sol taraftaki işlenen: T türünde dizi |
| broadcast_dimension | ArraySlice |
Hedef şeklindeki hangi boyut, işlenen şeklinin her bir boyutuna karşılık geliyor? |
Bu işlem varyantı, farklı sıralardaki diziler arasında aritmetik işlemler (ör. matrise vektör ekleme) için kullanılmalıdır.
Ek broadcast_dimensions işleneni, işlenenlerin yayınlanması için kullanılacak boyutları belirten bir tam sayı dilimidir. Semantikler, yayın sayfasında ayrıntılı olarak açıklanmaktadır.
StableHLO bilgileri için StableHLO - xor başlıklı makaleyi inceleyin.