İşlem anlamı

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 Anlam bilimi
operand XlaOp İşlevin işleneni

StableHLO hakkında bilgi 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 Anlam bilimi
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 dokümanlarına 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.

Reklam için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:

Add(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
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 Anlam bilimi
operand XlaOp Kopyalar arasında birleştirilecek dizi
all_gather_dimension int64 Birleştirme boyutu
shard_count int64 Her bir kopya grubunun boyutu
replica_groups int64 vektörlerinin vektörü 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ği ReplicaId kullanılarak alınabilir). Her gruptaki kopyaların sırası, girişlerinin sonuçtaki sırasını belirler. replica_groups boş olmalıdır (bu durumda tüm replikalar tek bir gruba aittir ve 0 ile N - 1 arasında sıralanır) veya replika sayısı ile aynı sayıda öğe içermelidir. Örneğin, replica_groups = {0, 2}, {1, 3}, 0 ve 2 ile 1 ve 3 replikaları arasında birleştirme işlemi gerçekleştirir.
  • shard_count, her çoğaltma grubunun boyutudur. Bu bilgi, replica_groups boş olduğunda gereklidir.
  • channel_id modüller arası iletişim için kullanılır: Yalnızca aynı all-gather işlemler birbirleriyle iletişim kurabilir.channel_id
  • use_global_device_ids ReplicaGroup yapılandırmasındaki kimlikler, kopya kimliği yerine (replica_id * partition_count + partition_id) değerinin genel kimliğini temsil ediyorsa doğru değerini döndürür. Bu, tüm azaltma hem bölümler arası hem de kopyalar arası olduğunda cihazların daha esnek bir şekilde gruplandırılmasını sağlar.

Çıkış şekli, giriş şeklinin all_gather_dimension katı büyüklüğündedir.shard_count Ö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şlemden elde edilen çı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 Anlam bilimi
operand XlaOp Kopyalar arasında indirgenecek dizi veya boş olmayan dizi demeti
computation XlaComputation İndirim hesaplaması
replica_groups ReplicaGroup vektör İndirimlerin yapıldığı 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.
  • operand, 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 (mevcut kopyanın kopya kimliği ReplicaId kullanılarak alınabilir). replica_groups boş 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}, 0 ve 2 ile 1 ve 3 kopyaları arasında azaltma işlemi gerçekleştirir.
  • channel_id modüller arası iletişim için kullanılır: Yalnızca aynı all-reduce işlemler birbirleriyle iletişim kurabilir.channel_id
  • shape_with_layout: AllReduce'un düzenini belirtilen düzene zorlar. Bu, ayrı ayrı derlenen bir grup AllReduce işlemi için aynı düzenin kullanılmasını sağlamak amacıyla kullanılır.
  • use_global_device_ids ReplicaGroup yapılandırmasındaki kimlikler, kopya kimliği yerine (replica_id * partition_count + partition_id) değerinin genel kimliğini temsil ediyorsa doğru değerini döndürür. Bu, tüm azaltma hem bölümler arası hem de kopyalar arası olduğunda 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şlenen, iki kopyada sırasıyla [1.0, 2.5] ve [3.0, 5.25] değerine sahipse 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şme olasılığı düşüktür. Ancak bir while döngüsünün koşulu infeed verilerine bağlıysa ve infeed verileri while döngüsünün bir kopyada diğerinden daha fazla kez tekrarlanmasına neden oluyorsa bu durum gerçekleşebilir.

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ş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.

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 Anlam bilimi
operand XlaOp Kopyalar arasında indirgenecek dizi veya boş olmayan bir dizi demeti
replica_groups int64 vektörlerinin vektörü İndirimlerin yapıldığı gruplar

Her bir 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:

  1. Dağılma aşaması. Her çekirdekte, işlenen split_dimensions boyunca split_count sayı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.
  2. Toplama aşaması. Her çekirdek, alınan blokları concat_dimension boyunca 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 (geçerli kopyanın kimliği ReplicaId kullanılarak alınabilir). AllToAll, belirtilen sırayla alt gruplar içinde uygulanır. Örneğin, replica_groups = { {1,2,3}, {4,5,0} }, kopyalar {1, 2, 3} içinde ve toplama aşamasında bir AllToAll uygulanacağı ve alınan blokların 1, 2, 3 sırasıyla birleştirileceği anlamına gelir. Ardından, 4, 5, 0 numaralı kopyalarda başka bir AllToAll uygulanır ve birleştirme sırası da 4, 5, 0 olur. replica_groups boşsa tüm kopyalar, görünme sırasına göre birleştirilmiş şekilde tek bir gruba aittir.

Ön koşullar:

  • split_dimension üzerindeki işlenenin boyut boyutu, split_count ile 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 Anlam bilimi
operand XlaOp n boyutlu giriş dizisi
split_dimension int64 Aralıktaki bir değer. [0,n) İşlemin 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önderme/alma ç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 boyut 0 boyunca birleştirir. Bu nedenle, her çekirdekteki çıkışın şekli f32[16,4] olur.

AllToAll - Example 2 - StableHLO

StableHLO için AllToAll veri akışı örneği

Yukarıdaki örnekte, AllToAll'a katılan 2 kopya var. Her kopyada 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 Anlam bilimi
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önderme/alma ç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: offsets tensörü, data tensörünün en dıştaki boyutunu indeksler ve data tensörünün her düzensiz öğesinin başlangıç ofsetini temsil eder.
  • sizes: sizes tensörü, data tensö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.
  • offsets ve sizes tensö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, input[input_offsets[i]:input_offsets[i]+input_sizes[i]] güncellemesini i. kopyaya 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ş verileri 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 kopya çı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], burada ragged-all-to-all, num_updates güncellemesini aynı uzak cihaza (her biri farklı uzaklıklarda) gönderebilir. Bu, kopya grubundaki her uzak cihaz için geçerlidir.

Ö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 Anlam bilimi
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 dokümanlarına 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.

Android 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 Anlam bilimi
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 yayın_boyutları 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 sayfalarına da 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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
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 Renk geçişleri BatchNormTraining (\(\nabla y\)) öğesine aktarıldı
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 (4 boyutlu bir dizinin operand olduğu ve özellik boyutu dizininin l, toplu iş boyutunun m, uzamsal boyutların 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 Anlam bilimi
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 ve uzamsal boyutlarda normalleştirir.

BatchNormInference(operand, scale, offset, mean, variance, epsilon, feature_index)

Bağımsız değişkenler Tür Anlam bilimi
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 değerleri hesaplanmadan BatchNormTraining işlevini çağırmaya eş değerdir. Bunun yerine, tahmini değerler olarak giriş mean ve variance kullanılır. Bu işlemin amacı, çıkarım sürecindeki gecikmeyi azaltmaktır. Bu nedenle BatchNormInference olarak adlandırılır.

Çıkış, girişle operand aynı şekle sahip n boyutlu, normalleştirilmiş bir dizidir.

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 ve uzamsal boyutlarda normalleştirir.

BatchNormTraining(operand, scale, offset, epsilon, feature_index)

Bağımsız değişkenler Tür Anlam bilimi
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 l iç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'dan oluşan bir demettir:

Çıkışlar Tür Anlam bilimi
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 işlevine 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üştürülü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 Anlam bilimi
operand XlaOp boyutları D olan T türünde dizi
new_element_type PrimitiveType U tipi

İşlenen ve hedef şeklin boyutları, son boyut hariç eşleşmelidir. Son boyut, dönüştürmeden önce ve sonraki temel boyutun oranıyla değişir.

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 boyutunun T' giriş öğesinin boyutuna T eşit olmadığı durumu destekler. İşlemin tamamı kavramsal olarak bir bit yayın 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ı kalı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 boyutlar ekler.

Broadcast(operand, broadcast_sizes)

Bağımsız değişkenler Tür Anlam bilimi
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ışın ş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, 2.0f değeriyle bir skaler f32 ise 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 Anlam bilimi
operand XlaOp Kopyalanacak dizi
out_dim_size ArraySlice<int64> Hedef şeklin boyutlarının büyüklükleri
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. Semantikler, 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 Anlam bilimi
computation XlaComputation T_0, T_1, ..., T_{N-1} -> S türünde, rastgele türde N parametreli 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 (oluşturulan) bir işlemi kapsar, girişleri ve composite_attributes'i alır ve sonuçlar üretir. İşlemin semantiği, ayrıştırma özelliğiyle uygulanır. Birleşik işlem, program semantiğini değiştirmeden ayrıştırılmış haliyle değiştirilebilir. Ayrıştırmanın satır içine yerleştirilmesinin aynı işlem anlamlarını sağlamadığı durumlarda custom_call kullanmayı tercih edin.

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ğine sahip bir 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 Anlam bilimi
computation XlaComputation T_0, T_1, ..., T_{N-1} -> S türünde, rastgele türde N parametreli hesaplama
operands N XlaOp dizisi değişken sayıda değer
name string birleşik öğ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 semantiğine 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 Anlam bilimi
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 Anlam bilimi
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ı makaleye bakın.

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 Anlam bilimi
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 Anlam bilimi
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$. 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 yoksayı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. Burada, küçük 2 boyut hariç tüm boyutlar grup boyutlarıdır.

a simetrik (Hermitian) pozitif tanımlı değilse sonuç uygulamaya bağlıdı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 Anlam bilimi
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 başlıklı makaleyi inceleyin. ve tf.reshape işlemi.

Bir dizinin boyutlarını tek boyutta daraltır.

Collapse(operand, dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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, yeni boyutun boyutu orijinal boyutların çarpımına eşit olacak şekilde tek bir yeni boyutla değiştirilir. dimensions içindeki en düşük boyut numarası, bu boyutları daraltan döngü yuvasında en yavaş değişen boyuttur (en büyük), en yüksek boyut numarası ise en hızlı değişen boyuttur (en küçük). Daha fazla genel sıralama daraltma işlemi 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 Anlam bilimi
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 Anlam bilimi
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önderme/alma ç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, inplace)

Bağımsız değişkenler Tür Anlam bilimi
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şlenen, 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
inplace isteğe bağlı bool permütasyonun yerinde yapılıp yapılmayacağını belirten işaret

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şittir karşılaştırması yapar.

\(lhs = rhs\)

Eq(lhs, rhs)

Bağımsız değişkenler Tür Anlam bilimi
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 dokümanlarına 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 olan alternatif bir varyant mevcuttur:

Eq(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 yayın_boyutları 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.

Şunlar zorunlu kılınarak Eq için kayan noktalı sayılardan büyük toplam sipariş desteklenir:

\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]

EqTotalOrder(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 daha yüksek toplam sipariş desteklenir:

\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]

NeTotalOrder(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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.

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 Anlam bilimi
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 dokümanlarına 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.

Almanca için farklı boyutlu yayın desteği sunan alternatif bir varyant mevcuttur:

Ge(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 yayın_boyutları 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 yüksek 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 Anlam bilimi
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 için öğ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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 için öğ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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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ından oluşan toplam siparişin desteklenmesi için şu işlemler uygulanır:

\[-NaN < -Inf < -Finite < -0 < +0 < +Finite < +Inf < +NaN.\]

LtTotalOrder(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 bir dizi oluşturur. Dizi, giriş dizisi işlenenlerinin her biriyle 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 Anlam bilimi
operands N dizisi XlaOp Boyutları [L0, L1, ...] olan T türünde N diziler. N >= 1 olmalıdır.
dimension int64 [0, N) aralığında, operands arasında birleştirilecek boyuta ad veren 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 boyuta ad vermek 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 Anlam bilimi
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\)

true_computation, predicate değeri true ise, false_computation, predicate değeri false ise yürütülür ve sonuç döndürülü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 ve false_computation değerlerinden birinin yürütüleceğini unutmayın.

Conditional(branch_index, branch_computations, branch_operands)

Bağımsız değişkenler Tür Anlam bilimi
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 hakkında bilgi 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 değeri üretir.

Constant(literal)

Bağımsız değişkenler Tür Anlam bilimi
literal LiteralSlice Mevcut bir Literal öğesinin 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, veri şeklinden hedef şekle öğe bazında dönüştürme işlemi gerçekleştirir. Boyutlar eşleşmelidir ve dönüşüm öğe bazında yapılır. Örneğin, s32 öğeleri, s32-to-f32 dönüşüm rutiniyle f32 öğelerine dönüştürülür.

ConvertElementType(operand, new_element_type)

Bağımsız değişkenler Tür Anlam bilimi
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 dönüşüm 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 (Convolution)

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 dolgu, 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 Anlam bilimi
lhs XlaOp (n+2) boyutlu giriş dizisi
rhs XlaOp (n+2) boyutlu çekirdek ağırlıkları dizisi
window_strides ArraySlice<int64> n boyutlu çekirdek adımları dizisi
padding Padding dolgu enum'ı
feature_group_count int64 özellik gruplarının 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 skaler öğe türünün enum'ı

Conv için artan düzeylerde kontroller mevcuttur:

n, uzamsal boyut 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ıradadır:

  • 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ımlayan n uzamsal boyutlarını açıklar.

rhs bağımsız değişkeni, evrişimli filtre/çekirdek/pencereyi açıklayan (n+2) boyutlu bir dizidir. Boyutlar şu sıradadır:

  • output-z: Çıkışın z boyutu.
  • input-z: Bu boyutun feature_group_count ile çarpımı, lhs'deki z boyutunun boyutuna eşit olmalıdır.
  • spatial_dims: Taban alan üzerinde hareket eden n boyutlu pencereyi tanımlayan n uzamsal boyutlarını 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 işlemi 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 çiftte, ilk öğe olarak düşük dolgu, ikinci öğe olarak yüksek dolgu bulunur. 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 biri arasına örtülü olarak d-1 boşluk yerleştirilir ve dizinin boyutu artar. Boşluklar, hiçbir işlem yapmayan bir değerle doldurulur. Bu değer, evrişim için sıfır anlamına gelir.

Sağ taraftaki genişlemeye atrous convolution da denir. Daha fazla bilgi için tf.nn.atrous_conv2d başlıklı makaleyi inceleyin. Sol tarafın genişletilmesine transpoze edilmiş konvolüsyon da 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üğü anlamına gelir. Her grup, ardışık bir özellik alt dizisinden oluşur. 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ş özelliklerinden oluşan bir grubun boyutuna sahiptir). i'inci gruplar, birçok ayrı evrişim için feature_group_count değerini hesaplamak üzere birlikte kullanılır. Bu evrişimlerin sonuçları, çıkış özelliği boyutunda birleştirilir.

Derinlemesine 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 başlıklı makaleyi inceleyin.

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 ile batch_group_count çarpıldığında, lhs'deki batch boyutunun boyutu elde edilmelidir.
  • z: Çekirdekteki output-z ile aynı boyutta (rhs).
  • spatial_dims: Evrişimli pencerenin geçerli her yerleşimi için bir değer.

Yukarıdaki şekilde batch_group_count alanının işleyiş şekli gösterilmektedir. Aslında, her bir sol taraf toplu işini batch_group_count gruba ayırırız ve aynı işlemi çıkış özellikleri için de yaparız. Ardından, bu grupların her biri için ikili evrişimler yaparız ve çıkışı, çıkış özelliği boyutu boyunca birleştiririz. Diğer tüm boyutların (özellik ve mekansal) 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ı seçelim. Ardından (y,x), temel alan içindeki bir pencere köşesinin konumudur (ör. uzamsal boyutları nasıl yorumladığınıza bağlı olarak sol üst köşe). Artık taban alanından alınmış bir 2 boyutlu penceremiz var. Burada her 2 boyutlu nokta 1 boyutlu bir vektörle ilişkilendiriliyor. Böylece 3 boyutlu bir kutu elde ediyoruz. Evrişimli çekirdekten, çıkış koordinatını z düzelttiğimiz için 3 boyutlu bir kutumuz da var. İki kutunun boyutları aynı olduğundan, iki kutu arasındaki öğe bazında çarpımların toplamını alabiliriz (iç çarpıma benzer). Bu, çıkış değeridir.

output-z ö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ı evrişim 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 Anlam bilimi
lhs XlaOp (n+2) boyutlu giriş dizisi
rhs XlaOp (n+2) boyutlu çekirdek ağırlıkları dizisi
window_strides ArraySlice<int64> n boyutlu çekirdek adımları 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ş 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 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ça belirtildiği Conv ile aynıdır.

Bağımsız değişkenler Tür Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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-d rhs dilation factor array
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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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ı (işaretli/işaretsiz bölme/sıfıra bölme veya INT_SMIN ile -1'ın işaretli bölme/kalanı), uygulamaya bağlı bir değer üretir.

Bağımsız değişkenlerin şekilleri benzer veya uyumlu olmalıdır. Şekillerin uyumlu olmasıyla ilgili yayın dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
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ış Anlam bilimi
vektör [n] dot vektör [n] skaler vektör iç ç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 "kısaltı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 Anlam bilimi
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 parti boyut numaralarının belirtilmesine olanak tanır.

DotDimensionNumbers alanları Tür Anlam bilimi
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 numaraları
rhs_batch_dimensions repeated int64 rhs toplu boyut numaraları

DotGeneral, dimension_numbers içinde belirtilen daraltma boyutları üzerinden ürünlerin toplamını gerçekleştirir.

lhs ve rhs'den gelen ilişkili sözleşme boyutu numaralarının aynı olması gerekmez ancak aynı boyutlara sahip olması gerekir.

Sözleşme boyut 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 kaynaklı ilişkili parti boyut numaraları aynı boyutlara sahip olmalıdır.

Toplu boyut numaraları içeren örnek (toplu boyut 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ış Anlam bilimi
[b0, m, k] dot [b0, k, n] [b0, m, n] batch matmul
[b0, b1, m, k] dot [b0, b1, k, n] [b0, b1, m, n] batch 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 Anlam bilimi
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 benzerdir.

"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 Anlam bilimi
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 bir alt dizi çıkarır start_indices. Her boyuttaki dilimin boyutu, her boyutta özel dilim aralıklarının bitiş 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 Anlam bilimi
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.

Etkili 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üşüm uygulanmadan önce sınırlardaysa dönüşümün herhangi bir 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ış olarak bulunur. 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 Anlam bilimi
operand XlaOp T türünde N boyutlu dizi
update XlaOp Dilim güncellemesini içeren T türünde N boyutlu dizi. Sınırların dışında güncelleme dizinleri oluşturulmasını önlemek için güncelleme şeklinin her boyutu kesinlikle sıfırdan büyük olmalı ve 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.

Etkili 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 ilgili olarak sınırların içinde olmasını sağlar. Dilim, dönüşüm uygulanmadan önce sınırlardaysa dönüşümün herhangi bir 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 hakkında bilgi 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 Anlam bilimi
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 Anlam bilimi
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 eksponansiyel x -> e^x.

Exp(operand)

Bağımsız değişkenler Tür Anlam bilimi
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 Anlam bilimi
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.

Öğe bazında doğal eksponansiyel eksi bir x -> e^x - 1.

Expm1(operand)

Bağımsız değişkenler Tür Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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ı uzunlukları. Bu, özellikle RFFT(fft_length=[16]) ile RFFT(fft_length=[17]) aynı çıkış şekline sahip olduğundan IRFFT'nin en içteki ekseni doğru boyutlandırması için gereklidir.
FftType Anlam bilimi
FFT Karmaşık-karmaşık FFT'yi iletir. Şekil değişmedi.
IFFT Ters karmaşık-karmaşık FFT. Şekil değişmedi.
RFFT Gerçekten karmaşık FFT'ye iletme. En içteki eksenin şekli, fft_length[-1] sıfır olmayan bir değerse fft_length[-1] // 2 + 1 olarak azaltılır. Bu durumda, dönüştürülmüş sinyalin Nyquist frekansının ötesindeki ters eşlenik kısmı atlanır.
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, dönüştürülmüş sinyalin Nyquist frekansının ötesindeki 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 kademeli FFT işlemleri uygulamaya 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 Anlam bilimi
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şlem 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ı uzaklığında) birleştirir.

StableHLO hakkında bilgi edinmek için StableHLO - gather başlıklı makaleyi inceleyin.

Genel Semantik

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 Anlam bilimi
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 şekli [6,7] ise ve index_vector_dim değeri 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:

  1. i, batch_dims içinde varsa (yani bazı k için batch_dims[k] değerine eşitse) start_indices.shape içinden ilgili boyut sınırlarını seçeriz ve index_vector_dim'ı atlarız (yani k < index_vector_dim ise start_indices.shape.dims[k] değerini, aksi takdirde start_indices.shape.dims[k+1] değerini seçeriz).

  2. i, offset_dims içinde varsa (ör. bazı k için offset_dims[k] değerine eşitse) collapsed_slice_dims dikkate alındıktan sonra slice_sizes içinden ilgili sınır seçilir (ör. adjusted_slice_sizes[k] seçilir. Burada adjusted_slice_sizes, slice_sizes olup collapsed_slice_dims dizinlerindeki sınırlar kaldırılmıştır).

Resmi olarak, belirli bir çıkış dizinine Out karşılık gelen işlenen dizini In aşağıdaki şekilde hesaplanır:

  1. G = { Out[k] for k in batch_dims } olsun. G'yı kullanarak S[i] = start_indices[Combine(G, i)] olacak şekilde bir S vektörü oluşturun. Burada Combine(A, b), b'yi index_vector_dim konumunda A'ya ekler. G boş olsa bile bunun iyi tanımlandığını unutmayın: G boşsa S = start_indices olur.

  2. Sin kullanarak S dağıtarak start_index_map ile operand içinde başlangıç dizini oluşturun.S Daha açık şekilde belirtmek gerekirse:

    1. Sin[start_index_map[k]] = S[k] if k < start_index_map.size.

    2. Aksi durumda Sin[_] = 0.

  3. Dizinleri collapsed_slice_dims kümesine göre Out içindeki ofset boyutlarına dağıtarak Oin dizinini operand içine oluşturun. Daha açık şekilde belirtmek gerekirse:

    1. Oin[remapped_offset_dims(k)] = Out[offset_dims[k]] if k < offset_dims.size (remapped_offset_dims is defined below).

    2. Aksi durumda Oin[_] = 0.

  4. In, Oin + Sin şeklindedir. Burada + öğe bazında toplama anlamına gelir.

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, {01, 13, 24, 35} olur.

indices_are_sorted doğru değerine ayarlanırsa XLA, start_indices değerlerinin kullanıcı tarafından (değerleri start_index_map'e göre dağıtıldıktan sonra) sıralandığını (artana göre) varsayabilir. Aksi takdirde, semantikler 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:

  • Out içindeki toplu boyutları kullanarak start_indices içinden bir başlangıç dizini ararız.

  • start_index_map, başlangıç dizinini (boyutu operand.rank değerinden küçük olabilir) operand içindeki "tam" bir başlangıç diziniyle eşlemek için kullanılır.

  • Tam başlangıç dizinini kullanarak slice_sizes boyutunda bir dilimi dinamik olarak dilimliyoruz.

  • collapsed_slice_dims boyutlarını daraltarak dilimi yeniden şekillendiririz. Daraltılmış tüm dilim boyutlarının sınırı 1 olmalıdır. Bu nedenle, bu yeniden şekillendirme her zaman geçerlidir.

  • Out içindeki ofset boyutlarını kullanarak bu dilimi dizine ekleyip çıkış dizini Out'ya karşılık gelen giriş öğesi E'yi elde ederiz.

index_vector_dim, sonraki tüm örneklerde start_indices.rank - 1 olarak ayarlanmıştır. index_vector_dim için daha ilginç değerler, işlemi temelde değiştirmez ancak görsel temsili daha karmaşık 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 dizini ve bunu giriş dizisindeki bir öğeyle aşağıdaki şekilde eşleyen bir dizin dönüşümü olarak gösterilebilir:

Öncelikle G kullanarak gather_indices dizisinden bir (X,Y) vektörü seçeriz. Çı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:

  1. Çıkış şeklindeki hangi boyutların ofset boyutları (son örnekte O0, O1 içeren boyutlar) olduğunu yapılandırabiliriz. Çıkış toplu iş boyutları (son örnekte G0, G1 içeren boyutlar), kaydırılmış boyutlar olmayan çıkış boyutları olarak tanımlanır.

  2. Çıkış şeklindeki açıkça mevcut olan çıkış dengeleme boyutlarının sayısı, giriş boyutlarının sayısından daha az olabilir. collapsed_slice_dims olarak açıkça listelenen bu "eksik" boyutların dilim boyutu 1 olmalıdır. 1 dilim boyutuna sahip olduklarından, bunlar için geçerli tek dizin 0'dir ve bunları atlamak belirsizliğe yol açmaz.

  3. "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 gather_indices 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ş dizininde dizin olarak kullanılmadan önce bunlar sırasıyla "Toplama Dizini Eşleme" (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şletilir ve [X,O0] olarak toplanır. Diğer bir deyişle, çıkış dizini [G0,G1,O0], giriş dizini [GatherIndices[G0,G1,0],O0] ile eşlenir. Bu da bize tf.gather_nd için semantiği verir.

slice_sizes için [1,11]. Bu, sezgisel olarak, gather_indices dizisindeki her dizinin X bir satırın tamamını seçtiği ve sonucun tüm 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 Anlam bilimi
operand XlaOp n boyutlu giriş dizisi
dimension int64 [0, n) aralığında, boyutu belirten bir değer

StableHLO hakkında bilgi 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 değerle bir demeti dizine ekler.

Şekil çıkarımı, sonuçta elde edilen değerin türünü belirleyebilmesi için değer, derleme zamanı sabiti 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 Anlam bilimi
tuple_data XlaOP Unsur
index int64 Demet şeklinin indeksi

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 Anlam bilimi
operand XlaOp İşlevin işleneni

StableHLO hakkında bilgi için StableHLO - imag başlıklı makaleyi inceleyin.

Yayın içi

Ayrıca XlaBuilder::Infeed başlıklı makaleyi inceleyin.

Infeed(shape, config)

Bağımsız Değişken Tür Anlam bilimi
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 öğesi okur, verileri belirtilen şekil ve düzen olarak yorumlar ve verilerin XlaOp değerini döndürür. Bir hesaplamada birden fazla feed içi işleme izin verilir ancak feed içi işlemler arasında toplam bir sıra olmalıdır. Örneğin, aşağıdaki kodda iki Infeed, while döngüleri arasında bağımlılık olduğundan toplam sıraya sahiptir.

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 Anlam bilimi
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. Burada her öğe, yalnızca karşılık gelen giriş öğesi sonluysa true olur.

IsFinite(operand)

Bağımsız değişkenler Tür Anlam bilimi
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 Anlam bilimi
operand XlaOp İşlevin işleneni

Log, 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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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 ile 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

Belirli operands dizilerine bir skaler işlev uygulayarak aynı boyutlarda bir dizi oluşturur. Bu dizideki her öğe, giriş dizilerindeki karşılık gelen öğelere uygulanan eşlenmiş işlevin sonucudur.

Eşlenen işlev, N adet skaler türde T girişi ve tek bir S türünde çıkışı olan rastgele bir hesaplamadır. Çıkış, T öğe türü 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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 - 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 Anlam bilimi
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 Anlam bilimi
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.

Hesaplamaların bariyerin ötesine geçmesini engelleyen tüm optimizasyon geçişlerini engeller.

OptimizationBarrier(operand)

Bağımsız değişkenler Tür Anlam bilimi
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 Anlam bilimi
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 dokümanlarına 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 sunan alternatif bir varyant mevcuttur:

Or(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
operand XlaOp T türünde dizi
shape_with_layout Shape Aktarılan verilerin düzenini tanımlar.
outfeed_config string Feed dışı 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.

Ped

Ayrıca XlaBuilder::Pad başlıklı makaleyi inceleyin.

Pad(operand, padding_value, padding_config)

Bağımsız değişkenler Tür Anlam bilimi
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 dizi öğ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 öğesinin yinelenen bir alanıdır. Bu alan, 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 dizininin 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 önce mantıksal olarak 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) ve iç dolgu değerlerinin tümü 0 ise bu işlem hiçbir şey yapmaz. Aşağıdaki şekilde, iki boyutlu bir dizi için farklı edge_padding ve interior_padding değerlerine ilişkin örnekler 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 Anlam bilimi
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 hakkında bilgi 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 Anlam bilimi
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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
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 birimleri olarak kullanılan işlemlerdir. Bu işlemler genellikle HLO dökümlerinde düşük düzeyli 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 Anlam bilimi
shape Shape Alınacak verilerin şekli
handle ChannelHandle Her gönderme/alma çifti için benzersiz tanımlayıcı

Aynı kanal herkese açık adını paylaşan başka bir hesaplamadaki Send talimatından belirtilen şekle ait verileri alır. Alınan veriler için bir XlaOp döndürür.

StableHLO hakkında bilgi 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 Anlam bilimi
operands N dizisi XlaOp T_0,..., T_{N-1} türünde N dizi.
init_values N dizisi XlaOp T_0,..., T_{N-1} türünde N skaler.
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 1'den büyük olmalıdır.
  • Hesaplama "kabaca" birleştirici olmalıdır (aşağıya bakın).
  • Tüm giriş dizileri aynı boyutlara sahip olmalıdır.
  • Tüm başlangıç değerleri, computation altında bir kimlik oluşturmalıdır.
  • N = 1 ise Collate(T) T olur.
  • N > 1, Collate(T_0, ..., T_{N-1}), T türünde N öğeli 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, çoğu pratik kullanım için yeterince ilişkilidir.

StableHLO hakkında bilgi için StableHLO - reduce başlıklı makaleyi inceleyin.

Örnekler

Değerleri [10, 11, 12, 13] olan tek bir 1 boyutlu dizide tek bir boyut boyunca indirgeme yapıldığında ve indirgeme işlevi f (bu computation) kullanıldığında 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, indirgemenin nasıl uygulanabileceğine dair kaba bir sözde kod örneği verilmiştir. Bu örnekte, indirgeme hesaplaması olarak toplama işlemi kullanılır ve başlangıç değeri 0'dır.

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:

"Ekleme" işleviyle 0 veya 1 boyutunu azaltmanın 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 için 3 boyutlu bir diziye göz atın. Boyut sayısı 3'tür. Boyut 0'ın boyutu 4, boyut 1'in boyutu 2 ve boyut 2'nin boyutu 3'tür. Kolay anlaşılması için 1-6 arasındaki değerler 0. boyutta tekrarlanır.

2D örneğine benzer şekilde, yalnızca bir boyutu azaltabiliriz. Örneğin, 0. boyutu küçültürsek 0. boyuttaki tüm değerlerin tek bir değere indirgendiği 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.

Ayrıca birden fazla boyutu da azaltabiliriz. 0 ve 1 boyutlarını azaltarak [20, 28, 36] 1 boyutlu dizisi elde edilir.

3D diziyi tüm boyutları üzerinde küçültmek, skaler 84 değerini üretir.

Variadic Reduce

N > 1 olduğunda, tüm girişlere aynı anda uygulandığı için azaltma 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ırma
  • ...
  • N. işlenen için azaltılmış değer çalıştırma
  • İ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 argmaks 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ğerlerinin daha düşük hassasiyetli bir biçime (ör. IEEE-FP16) ve tekrar orijinal biçime dönüştürülmesinin 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 Anlam bilimi
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 ikisinin de mantisası sıfırdır) ve negatif olmayan sayıda mantisa biti olmalıdır. Üs veya mantis bitlerinin sayısı, T türünün karşılık gelen değerini aşabilir. Bu durumda, dönüşümün ilgili kısmı basitçe 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 bloğa 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 Anlam bilimi
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 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 kullanıcı tarafından belirtilen bellek düzeni
use_global_device_ids isteğe bağlı bool kullanıcı tarafından belirtilen işaret
  • operand bir 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ği ReplicaId kullanılarak alınabilir). Her gruptaki kopyaların sırası, tüm azaltma sonucunun dağıtılacağı sırayı belirler. replica_groups boş olmalıdır (bu durumda tüm kopyalar tek bir gruba aittir) veya kopya sayısı kadar öğe içermelidir. Birden fazla kopya grubu olduğunda hepsinin aynı boyutta olması gerekir. Örneğin, replica_groups = {0, 2}, {1, 3}, 0 ve 2 ile 1 ve 3 kopyaları arasında azaltma işlemi gerçekleştirir ve sonucu dağıtır.
  • shard_count, her çoğaltma grubunun boyutudur. Bu bilgi, replica_groups boş olduğunda gereklidir. replica_groups boş değilse shard_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_id ile yapılan reduce-scatter işlemleri birbirleriyle iletişim kurabilir.
  • layout Dü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) replica_groups içindeki sayılar true olduğunda ReplicaId olur. true replica_groups, (ReplicaID*partition_count + partition_id) değerinin 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 kat küçültülmüş halidir. Örneğin, iki kopya varsa ve işlenenin iki kopyada sırasıyla [1.0, 2.25] ve [3.0, 5.25] değerleri varsa scatter_dim değerinin 0 olduğu bu işlemden elde edilen çı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ı makaleyi inceleyin.

ReduceScatter - Example 1 - StableHLO

StableHLO için ReduceScatter Dataflow örneği

Yukarıdaki örnekte, ReduceScatter'a katılan 2 kopya vardır. Her replikada işlenen, f32[2,4] şeklindedir. Replikalar arasında bir all-reduce (toplama) işlemi gerçekleştirilir ve her replikada f32[2,4] şeklindeki indirgenmiş bir değer üretilir. 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 grubundaki 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. Havuzlama katmanı, ReduceWindow olarak ifade edilebilir. Reduce'ye benzer şekilde, uygulanan computation her zaman soldaki init_values'den geçirilir.

ReduceWindow(operands..., init_values..., computation, window_dimensions, window_strides, padding)

Bağımsız değişkenler Tür Anlam bilimi
operands N XlaOps Pencerenin yerleştirildiği taban alanını temsil eden, T_0,..., T_{N-1} türünde N çok boyutlu dizinin sırası.
init_values N XlaOps N işlemlinin her biri için birer tane olmak üzere, indirgeme için N başlangıç değeri. Ayrıntılar için Azaltma 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 doldurur 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 = 1 ise Collate(T) T olur.
  • N > 1, Collate(T_0, ..., T_{N-1}), (T0,...T{N-1}) türünde N öğeli bir demettir.

StableHLO bilgileri için StableHLO - reduce_window başlıklı makaleyi inceleyin.

ReduceWindow - Example 1

Giriş, [4x6] boyutunda bir matristir. window_dimensions ve window_stride_dimensions değerleri [2x3] şeklindedir.

// 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 boyutta 1 adım, bir pencerenin boyuttaki konumunun bitişik penceresinden 1 öğe uzakta olduğunu belirtir. Pencerelerin birbiriyle çakışmadığını belirtmek için window_stride_dimensions, window_dimensions değerine eşit olmalıdır. Aşağıdaki şekilde, iki farklı adım değeri kullanımı gösterilmektedir. Girişin her boyutuna dolgu uygulanır ve hesaplamalar, giriş 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. Padding 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.

Küçültme işlevinin değerlendirme sırası rastgeledir ve belirleyici olmayabilir. Bu nedenle, azaltma 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.

ReduceWindow - Example 2 - StableHLO

StableHLO için ReduceWindow Dataflow örneği

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 altındaki değil, ilk öğenin üç sıra altındaki öğe olduğu 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 pencerede yalnızca dolgu ve delikler göründüğünden sonuçları 0'dır. Alttaki pencereler, girişten 3 ve 4 değerlerini alır ve bunları sonuç olarak döndürür.

Son çıkış,değerleri [[0,0],[3,4]] olan S32[2,2] şeklindedir.

Rem

Ayrıca XlaBuilder::Rem başlıklı makaleyi inceleyin.

Bölünen lhs ve bölen rhs'in öğ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 Anlam bilimi
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 dokümanlarına 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 sunan alternatif bir varyant mevcuttur:

Rem(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 yayın_boyutları 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 başlıklı makaleyi inceleyin. ve Collapse işlemi.

Bir dizinin boyutlarını yeni bir yapılandırmada yeniden şekillendirir.

Reshape(operand, dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 bir boyut dizinleri vektörü ve sonuç için derleme zamanında sabit 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 bir 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 Anlam bilimi
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 Anlam bilimi
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, tersine çevrilecek her boyuttaki dizin tersine çevrilerek dönüştürülür (ör. N boyutlu bir boyut, tersine çevirme boyutlarından biriyse dizin 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 iki pencere boyutu boyunca evrişim ağırlık dizisini 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.

Normal dağılımı \(N(\mu, \sigma)\) izleyerek oluşturulan rastgele sayılarla belirli bir şekle sahip bir çıkış oluşturur. Parametreler \(\mu\) ve \(\sigma\)ile çıkış şekli, kayan nokta öğe türüne sahip olmalıdır. Ayrıca parametreler, skaler değerli olmalıdır.

RngNormal(mu, sigma, shape)

Bağımsız değişkenler Tür Anlam bilimi
mu XlaOp Oluşturulan sayıların ortalamasını belirten T türünde skaler
sigma XlaOp Oluşturulan değerlerin standart sapmasını belirten T türünde skaler.
shape Shape T türünün çıkış şekli

StableHLO hakkında bilgi 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 izlenerek 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 Anlam bilimi
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 hakkında bilgi 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 Anlam bilimi
algorithm RandomAlgorithm Kullanılacak PRNG algoritması.
initial_state XlaOp PRNG algoritmasının başlangıç durumu.
shape Shape Oluşturulan verilerin çıkış şekli.

algorithm için kullanılabilir değerler:

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 Anlam bilimi
operand XlaOp İşlevin işleneni

RoundNearestAfz

Ayrıca XlaBuilder::RoundNearestAfz başlıklı makaleyi inceleyin.

Bağlantıları sıfırdan uzaklaştırarak, öğe bazında en yakın tam sayıya yuvarlama işlemi gerçekleştirir.

RoundNearestAfz(operand)

Bağımsız değişkenler Tür Anlam bilimi
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 Anlam bilimi
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.

Kare kök işleminin x -> 1.0 / sqrt(x) öğe bazında karşılığı.

Rsqrt(operand)

Bağımsız değişkenler Tür Anlam bilimi
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 Anlam bilimi
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 bir 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 Anlam bilimi
inputs m XlaOp dizisi Taranacak diziler.
inits k XlaOp dizisi İ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ünde hesaplama.
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'den 0'ye doğru işlenir.

to_apply işlevi m + k işlenen alır:

  1. inputs öğesinden m mevcut öğe.
  2. k, önceki adımdaki değerleri (veya ilk öğe için inits) taşır.

to_apply işlevi, n + k değerlerinden oluşan bir demet döndürür:

  1. n öğesi outputs.
  2. k yeni taşıma değerleri.

Tarama işlemi, n + k değerlerinden oluşan bir demet üretir:

  1. Her adımın çıkış değerlerini içeren n çıkış dizileri.
  2. Tüm öğeler işlendikten sonra nihai k taşıma değerleri.

m girişlerinin türleri, ek bir tarama boyutuyla to_apply işlevinin ilk m parametrelerinin türleriyle eşleşmelidir. n çıkışlarının türleri, to_apply'nin ilk n dönüş değerlerinin türleriyle eşleşmelidir. Tüm giriş ve çıkışlar arasındaki fazladan tarama boyutu aynı boyutta N olmalıdır. Son k parametrelerin türleri ve to_apply'nin dönüş değerlerinin yanı sıra k başlatmaları eşleşmelidir.

Örneğin (m, n, k == 1, N == 3), ilk elde i için [a, b, c], f(x, c) -> (y, c') işlevi ve scan_dimension=0, is_reverse=false 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 işlevinin çı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'nın değerlerinden oluşan bir sonuç dizisi oluşturur. Bu dizide, scatter_indices tarafından belirtilen dizinlerdeki birkaç dilim, update_computation kullanılarak updates'daki 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 Anlam bilimi
operands N dizisi XlaOp T_0, ..., T_N türünde, içine dağıtılacak N dizi.
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ğılım dizinlerinden işlenen dizin alanına giden bir boyut haritası. Bu dizi, i ile scatter_dims_to_operand_dims[i] eşlemesi 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ıralanacağı garanti edilip edilmediğini belirtir.
unique_indices bool Arayan tarafından dizinlerin benzersiz olması garanti edilip edilmediği.

Burada:

  • N, 1'e eşit veya 1'den büyük olmalıdır.
  • operands[0], ..., operands[N-1] öğelerinin tümü aynı boyutlara sahip olmalıdır.
  • updates[0], ..., updates[N-1] öğelerinin tümü aynı boyutlara sahip olmalıdır.
  • N = 1 ise Collate(T) T olur.
  • N > 1, Collate(T_0, ..., T_N), T türünde N öğeli 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'te bulunmayan boyutlar kümesi olarak tanımlarız (artan sırada).

Dağılımın bağımsız değişkenleri şu kısıtlamalara uymalıdır:

  • Her updates dizisi update_window_dims.size + scatter_indices.rank - 1 boyutlu olmalıdır.

  • Her updates dizisindeki i boyutunun sınırları aşağıdakilere uygun olmalıdır:

    • i, update_window_dims içinde varsa (yani bazı k için update_window_dims[k] değerine eşitse), updates içindeki i boyutunun sınırı, inserted_window_dims dikkate alındıktan sonra operand boyutunun karşılık gelen sınırını aşmamalıdır (yani adjusted_window_bounds[k]; burada adjusted_window_bounds, inserted_window_dims dizinlerindeki sınırlar kaldırılmış şekilde operand boyutunun sınırlarını içerir).
    • i, update_scatter_dims içinde varsa (yani bazı k için update_scatter_dims[k] öğesine eşitse) updates içindeki i boyutunun sınırı, index_vector_dim atlanarak scatter_indices öğesinin karşılık gelen sınırına eşit olmalıdır (yani k < index_vector_dim ise scatter_indices.shape.dims[k], aksi takdirde scatter_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.size ve inserted_window_dims.size değ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 bir 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:

  1. G = { U[k] for k in update_scatter_dims } olsun. G'yı kullanarak scatter_indices dizisinde S[i] = scatter_indices[Combine(G, i)] olacak şekilde bir dizin vektörü S arayın. Burada Combine(A, b), b'yi A'ya index_vector_dim konumlarında ekler.
  2. Sin öğesini scatter_dims_to_operand_dims haritasını kullanarak S öğesini dağıtarak operand içine bir dizin oluşturun.S Daha resmi bir şekilde:
    1. Sin[scatter_dims_to_operand_dims[k]] = S[k] if k < scatter_dims_to_operand_dims.size.
    2. Aksi durumda Sin[_] = 0.
  3. Win, U içindeki update_window_dims dizinlerini inserted_window_dims'ye göre dağıtarak her operands dizisine bir dizin oluşturur. Daha resmi bir şekilde:
    1. Win[window_dims_to_operand_dims(k)] = U[k] if k is in update_window_dims, where window_dims_to_operand_dims is the monotonic function with domain [0, update_window_dims.size) and range [0, operand.rank) \ inserted_window_dims. (Örneğin, update_window_dims.size 4, operand.rank 6 ve inserted_window_dims {0, 2} ise window_dims_to_operand_dims {01, 13, 24, 35} olur.)
    2. Aksi durumda Win[_] = 0.
  4. I, Win + Sin şeklindedir. Burada + öğe bazında toplama anlamına gelir.

Özetle, dağıtma işlemi aşağıdaki şekilde tanımlanabilir.

  • output'yı operands ile başlatın. Örneğin, tüm J dizinleri için, operands[J] dizisindeki tüm O dizinleri için:
    output[J][O] = operands[J][O]
  • updates[J] dizisindeki her U dizini ve operand[J] dizisindeki karşılık gelen O dizini için, O, output iç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ı belirlenemez. Bu nedenle, updates içindeki birden fazla dizin operands içindeki aynı dizine başvurduğunda output içindeki ilgili değer deterministik olmaz.

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 değerine ayarlanırsa XLA, scatter_indices değerlerinin kullanıcı tarafından (değerleri scatter_dims_to_operand_dims'ye göre dağıtıldıktan sonra artan sırada) sıralandığını varsayabilir. Aksi takdirde semantik, 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ı ve resmi olmayan bir 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

StableHLO için dağıtılmış veri akışı örneği

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.

Dizini güncelle) Bize verilen girişin bir parçası olarak update_window_dims:[3,4]. Bu, updates'nın 3. ve 4. boyutunun pencere boyutları olduğunu gösterir. Bu boyutlar sarı renkle vurgulanmıştır. Bu, update_scatter_dims = [0,1,2] sonucunu çıkarmamıza olanak tanır.

Update Scatter Index) 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 (Dağıtma dizinini güncelle) değerlerimizin başlangıç dizininin konumunu verdiğini görüyoruz. index_vector_dim ile başlangıç dizinlerini içeren starting_indices boyutunun da scatter_indices için 2 boyutlu 3. boyut olduğu belirtiliyor.

Full Start Index) 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şil renkle 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 koşul 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
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 öğesinin her P öğesi için, P öğesinin değeri true ise çıkış dizisinin karşılık gelen öğesi on_true öğesinden, P öğesinin değeri false ise on_false öğesinden 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çilirse true, ikinci parametre seçilirse false değerini döndürür.Ayrıca, seçilen öğenin belirli bir pencere için geçilen öğelerin sırasına bağlı olmaması amacıyla işlevin geçişlilik özelliği (ör. select(a, b) ve select(b, c) true ise select(a, c) da true'dir) taşıması gerekir.

scatter işlevi, çıkış dizisindeki seçili her indekste uygulanır. İki skaler parametre alır:

  1. Çıkış dizisinde seçilen dizindeki geçerli değer
  2. Seçili dizin için geçerli olan source dağı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 Anlam bilimi
operand XlaOp pencerelerin kaydığı T türünde dizi
select XlaComputation Her penceredeki tüm öğelere uygulanacak T, T -> PRED türünde ikili hesaplama; ilk 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ğerlerle birlikte 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 en yüksek 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 üstteki pencerelerin (mavi ve kırmızı) her ikisi tarafından da seçilir ve ikili toplama scatter işlevi, değeri 8 (2 + 6) olan çı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 birimleri olarak kullanılan işlemlerdir. Bu işlemler genellikle HLO dökümlerinde düşük düzeyli 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 Anlam bilimi
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 herkese açık kullanıcı 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 de 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)} öğelerinden oluşan bir demettir 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, Send tarihinden önce gerçekleşir
  • Send, RecvDone tarihinden önce gerçekleşir
  • Recv, RecvDone tarihinden önce gerçekleşir
  • Send, SendDone tarihinden ö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 Anlam bilimi
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 yoksayı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 Anlam bilimi
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 dokümanlarına 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 Anlam bilimi
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 yayın_boyutları 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ı makaleyi inceleyin.

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 Anlam bilimi
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 dokümanlarına 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 vardır:

ShiftRightArithmetic(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
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 dokümanlarına 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 vardır:

ShiftRightLogical(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 yayın_boyutları 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şlemini öğe bazında yapın x -> sgn(x).

\[\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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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 giriş dizisindeki sınırlayıcı kutunun içindeki değerleri içerir. Sınırlayıcı kutunun boyutları ve dizinleri, dilimleme işlemine bağımsız değişken olarak verilir.

Slice(operand, start_indices, limit_indices, strides)

Bağımsız değişkenler Tür Anlam bilimi
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ılık liste. 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ının listesi. Dilim, d boyutundaki her strides[d] öğesini 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
operands ArraySlice<XlaOp> Sıralanacak işlenenler.
comparator XlaComputation Kullanılacak karşılaştırıcı hesaplama.
dimension int64 Sıralama yapı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, j ile i < j olan tüm dizin konumları için geçerlidir. Bu konumlar comparator(value[i], value[j]) = comparator(value[j], value[i]) = false veya comparator(value[i], value[j]) = true'dür.

  • İş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 0 boyut değeri her sütunu bağımsız olarak sıralar ve 1 boyut 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 n iş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 kabul edilir. i ve j dizin konumlarındaki her işlenenin öğelerinin değiştirilip değiştirilmeyeceği kontrol edilirken karşılaştırıcı, 2 * n skaler parametrelerle çağrılır. Burada 2 * k parametresi, k-th işlenenindeki i konumundaki değere, 2 * k + 1 parametresi ise k-th işlenenindeki j konumundaki değere karşılık gelir. Bu nedenle, karşılaştırıcı genellikle 2 * k ve 2 * k + 1 parametrelerini karşılaştırır ve eşitlik bozucu olarak başka parametre çiftlerini kullanabilir.

  • Sonuç, sıralı düzende (yukarıdaki gibi, sağlanan boyut boyunca) işlenenlerden oluşan bir demettir. Demetin i-th işleneni, Sırala'nın i-th iş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ı olması 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 değeri false olarak ayarlanır.

StableHLO hakkında bilgi için StableHLO - sort başlıklı makaleyi inceleyin.

Karekök

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 Anlam bilimi
operand XlaOp İşlevin işleneni

Karekök işlevi, 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 Anlam bilimi
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 öğeleri arasında çıkarma işlemi yapar.

Sub(lhs, rhs)

Bağımsız değişkenler Tür Anlam bilimi
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 dokümanlarına 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 sunan alternatif bir varyant mevcuttur:

Sub(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 yayın_boyutları 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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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 Anlam bilimi
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 en büyük veya en küçük k öğelerin değerlerini ve dizinlerini bulur.

TopK(operand, k, largest)

Bağımsız değişkenler Tür Anlam bilimi
operand XlaOp En üstteki k öğelerin ayıklanacağı tensör. Tensörün boyutu bir veya daha fazla 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ğını belirler.

1 boyutlu bir giriş tensörü (dizi) için dizideki k en büyük veya en küçük girişleri bulur ve iki diziden oluşan bir demet (values, indices) çıkarır. Bu nedenle, values[j], operand içindeki en büyük/küçük j. giriş ve dizini indices[j]'dir.

1'den fazla boyutu olan bir giriş tensörü için son boyuttaki en iyi k girişleri hesaplar ve çıkışta diğer tüm boyutları (satırları) korur. Bu nedenle, [A, B, ..., P, Q] şeklindeki bir işlenen için Q >= k çıkış, aşağıdakilerin geçerli olduğu bir (values, indices) demetidir:

values.shape = indices.shape = [A, B, ..., P, k]

Bir satırdaki iki öğe eşitse daha düşük dizine sahip öğ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 Anlam bilimi
operand XlaOp Transpozu alınacak işlenen.
permutation ArraySlice<int64> Boyutları nasıl değiştireceğiniz.

İş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. Bu rutin, önde gelen boyutlar boyunca yayın yaparak op(a) * x = b veya x * op(a) = b matris sistemlerinden birini x değişkeni için çözer. Burada a ve b verilmiştir. op(a) ise 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 Anlam bilimi
a XlaOp Şekli [..., M, M] olan karmaşık veya kayan nokta türünde 2'den fazla boyutlu bir dizi.
b XlaOp [..., M, K] doğruysa left_side şekline sahip, aksi takdirde [..., K, M] şekline sahip aynı türde 2'den büyük boyutlu bir dizi.
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 simgesinin ü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 bu öğelere 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 yoksayı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 bu boyutlar, matris grupları olarak değerlendirilir. Bu durumda, küçük 2 boyut hariç tüm boyutlar grup boyutlarıdır. a ve b eşit toplu boyutlara 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 olan, değişken sayıda veri tutma birimi içeren bir demet.

Tuple(elements)

Bağımsız değişkenler Tür Anlam bilimi
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.

While

Ayrıca XlaBuilder::While başlıklı makaleyi inceleyin.

While(condition, body, init)

Bağımsız değişkenler Tür Anlam bilimi
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 diğer birçok dildeki tipik bir while döngüsüne benzer.

  • Bir While düğümü, body öğesinin son yürütülmesinden elde edilen sonuç olan T türünde bir değer döndürür.
  • T tü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, nöral ağlarda 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 adresinde 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 Anlam bilimi
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 dokümanlarına 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 sunan alternatif bir varyant mevcuttur:

Xor(lhs,rhs, broadcast_dimensions)

Bağımsız değişkenler Tür Anlam bilimi
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 yayın_boyutları 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.