Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Modul: tf.distribute

TensorFlow 1 versi

Perpustakaan untuk menjalankan perhitungan di beberapa perangkat.

Maksud dari perpustakaan ini adalah bahwa Anda dapat menulis sebuah algoritma dengan cara bergaya dan itu akan dapat digunakan dengan berbagai berbeda tf.distribute.Strategy implementasi. Setiap keturunan akan menerapkan strategi yang berbeda untuk mendistribusikan algoritma di beberapa perangkat / mesin. Selanjutnya, perubahan ini dapat disembunyikan di dalam lapisan tertentu dan kelas perpustakaan lain yang perlu perlakuan khusus untuk menjalankan dalam pengaturan didistribusikan, sehingga model kode definisi yang paling pengguna dapat menjalankan berubah. The tf.distribute.Strategy API bekerja dengan cara yang sama dengan bersemangat dan grafik eksekusi.

panduan

tutorial

Glosarium

  • Data paralelisme adalah di mana kita menjalankan beberapa salinan dari model pada irisan yang berbeda dari input data. Hal ini berbeda dengan model paralelisme di mana kita membagi satu salinan model di beberapa perangkat. Catatan: kami hanya mendukung data paralelisme untuk saat ini, tetapi harapan untuk menambahkan dukungan untuk model paralelisme di masa depan.
  • Sebuah perangkat adalah CPU atau akselerator (misalnya GPU, TPUs) pada beberapa mesin yang TensorFlow dapat menjalankan operasi pada (lihat misalnya tf.device ). Anda mungkin memiliki beberapa perangkat pada mesin tunggal, atau dihubungkan ke perangkat pada beberapa mesin. Perangkat yang digunakan untuk perhitungan jangka disebut perangkat pekerja. Perangkat yang digunakan untuk menyimpan variabel adalah perangkat parameter. Untuk beberapa strategi, seperti tf.distribute.MirroredStrategy , pekerja dan parameter perangkat akan sama (lihat variabel dicerminkan bawah). Bagi orang lain mereka akan berbeda. Misalnya, tf.distribute.experimental.CentralStorageStrategy menempatkan variabel pada satu perangkat (yang mungkin perangkat kerja atau mungkin CPU), dan tf.distribute.experimental.ParameterServerStrategy menempatkan variabel pada mesin terpisah yang disebut parameter server (lihat di bawah).
  • Sebuah replika adalah salah satu copy dari model, berjalan pada satu irisan input data. Sekarang setiap replika dijalankan pada perangkat pekerja sendiri, tapi setelah kami menambahkan dukungan untuk model paralelisme replika mungkin span beberapa perangkat pekerja.
  • Sebuah host adalah perangkat CPU pada mesin dengan perangkat pekerja, biasanya digunakan untuk menjalankan jaringan pipa masukan.
  • Seorang pekerja didefinisikan sebagai mesin fisik (s) yang berisi perangkat fisik (misalnya GPU, TPUs) di mana perhitungan direplikasi dijalankan. Seorang pekerja dapat mengandung satu atau lebih replika, tapi mengandung setidaknya satu replika. Biasanya satu pekerja akan sesuai dengan satu mesin, namun dalam kasus model yang sangat besar dengan model yang paralelisme, satu pekerja dapat span beberapa mesin. Kami biasanya menjalankan satu pipa masukan per pekerja, memberi makan semua replika pada pekerja itu.
  • Sinkron, atau lebih umum sync, pelatihan adalah di mana pembaruan dari masing-masing replika dikumpulkan bersama-sama sebelum memperbarui variabel model. Hal ini berbeda dengan asynchronous, atau async pelatihan, di mana masing-masing replika memperbarui variabel model independen. Anda juga mungkin memiliki replika dibagi menjadi kelompok-kelompok yang sinkron dalam setiap kelompok tapi async antar kelompok.
  • Server Parameter: Ini adalah mesin yang memegang satu salinan parameter / variabel, digunakan oleh beberapa strategi (sekarang hanya tf.distribute.experimental.ParameterServerStrategy ). Semua replika yang ingin beroperasi pada variabel mengambilnya pada awal langkah dan mengirim update untuk diterapkan pada akhir langkah. kaleng ini mendukung priniciple baik sync atau pelatihan async, tapi sekarang kita hanya memiliki dukungan untuk pelatihan async dengan server parameter. Bandingkan dengan tf.distribute.experimental.CentralStorageStrategy , yang menempatkan semua variabel pada satu perangkat pada mesin yang sama (dan tidak pelatihan sync), dan tf.distribute.MirroredStrategy , yang cermin variabel untuk beberapa perangkat (lihat di bawah).

  • Replika konteks vs Cross-replika konteks vs konteks Perbarui

    Sebuah konteks replika berlaku ketika Anda menjalankan fungsi perhitungan yang disebut dengan strategy.run . Secara konseptual, Anda dalam konteks replika ketika menjalankan fungsi perhitungan yang sedang direplikasi.

    Konteks pembaruan dimasukkan dalam tf.distribute.StrategyExtended.update panggilan.

    Konteks lintas-replika yang dimasukkan ketika Anda memasukkan strategy.scope . Hal ini berguna untuk memanggil tf.distribute.Strategy metode yang beroperasi di seluruh replika (seperti reduce_to() ). Secara default Anda mulai dalam konteks replika ( "default konteks replika tunggal") dan kemudian beberapa metode dapat beralih Anda kembali dan sebagainya.

  • Didistribusikan nilai: didistribusikan nilai diwakili oleh kelas dasar tf.distribute.DistributedValues . tf.distribute.DistributedValues berguna untuk mewakili nilai-nilai pada beberapa perangkat, dan berisi peta dari replika id dengan nilai-nilai. Dua jenis perwakilan dari tf.distribute.DistributedValues adalah "PerReplica" dan nilai-nilai "cermin".

    "PerReplica" nilai-nilai yang ada pada perangkat pekerja, dengan nilai yang berbeda untuk setiap replika. Mereka diproduksi oleh iterasi melalui dataset didistribusikan kembali oleh tf.distribute.Strategy.experimental_distribute_dataset dan tf.distribute.Strategy.experimental_distribute_datasets_from_function . Mereka juga hasil khas dikembalikan oleh tf.distribute.Strategy.run .

    "Cermin" nilai-nilai seperti nilai-nilai "PerReplica", kecuali kita tahu bahwa nilai pada semua replika yang sama. Kita dapat dengan aman membaca nilai "cermin" dalam konteks lintas replika dengan menggunakan nilai pada replika apapun.

  • Membuka bungkus dan penggabungan: Pertimbangkan memanggil fungsi fn pada beberapa replika, seperti strategy.run(fn, args=[w]) dengan argumen w yang merupakan tf.distribute.DistributedValues . Ini berarti w akan memiliki peta mengambil replika id 0 untuk w0 , replika id 1 untuk w1 , dll strategy.run() unwraps w sebelum memanggil fn , sehingga panggilan fn(w0) pada perangkat d0 , fn(w1) di perangkat d1 , dll kemudian menggabungkan kembali nilai-nilai dari fn() , yang mengarah ke salah satu objek umum jika nilai kembali adalah objek yang sama dari setiap replika, atau DistributedValues objek sebaliknya.

  • Pengurangan dan semua-mengurangi: pengurangan A adalah metode menggabungkan beberapa nilai dalam satu nilai, seperti "sum" atau "berarti". Jika strategi adalah melakukan pelatihan sync, kami akan melakukan pengurangan pada gradien untuk parameter dari semua replika sebelum menerapkan pembaruan. All-mengurangi merupakan algoritma untuk melakukan pengurangan pada nilai-nilai dari beberapa perangkat dan membuat hasil yang tersedia pada semua perangkat tersebut.

  • Variabel cermin: Ini adalah variabel yang dibuat pada beberapa perangkat, di mana kita menyimpan variabel sinkron dengan menerapkan update yang sama untuk setiap salinan. Variabel cermin diciptakan dengan tf.Variable(...synchronization=tf.VariableSynchronization.ON_WRITE...) . Biasanya mereka hanya digunakan dalam pelatihan sinkron.

  • variabel SyncOnRead

    Variabel SyncOnRead diciptakan oleh tf.Variable(...synchronization=tf.VariableSynchronization.ON_READ...) , dan mereka diciptakan pada beberapa perangkat. Dalam konteks replika, masing-masing variabel komponen pada replika lokal dapat melakukan membaca dan menulis tanpa sinkronisasi dengan satu sama lain. Ketika variabel SyncOnRead dibaca dalam konteks lintas replika, nilai-nilai dari variabel komponen dikumpulkan dan dikembalikan.

    Variabel SyncOnRead membawa banyak kesulitan konfigurasi kustom untuk logika yang mendasari, sehingga kita tidak mendorong pengguna untuk variabel instantiate dan menggunakan SyncOnRead sendiri. Kami telah terutama digunakan variabel SyncOnRead untuk kasus penggunaan seperti norma batch dan metrik. Untuk alasan performa, kita sering tidak perlu untuk menjaga statistik ini sinkron setiap langkah dan mereka dapat terakumulasi pada setiap replika secara independen. Satu-satunya waktu yang kita ingin menyelaraskannya melaporkan atau checkpointing, yang biasanya terjadi dalam konteks lintas replika. Variabel SyncOnRead juga sering digunakan oleh pengguna tingkat lanjut yang ingin mengontrol kapan nilai-nilai variabel dikumpulkan. Sebagai contoh, pengguna kadang-kadang ingin mempertahankan gradien independen pada setiap replika selama beberapa langkah tanpa agregasi.

  • Lapisan mendistribusikan-sadar

    Lapisan umumnya disebut dalam konteks replika, kecuali ketika mendefinisikan model fungsional Keras. tf.distribute.in_cross_replica_context akan membiarkan Anda menentukan hal ini Anda berada di. Jika dalam konteks replika, yang tf.distribute.get_replica_context fungsi akan mengembalikan konteks replika bawaan luar lingkup strategi, None dalam lingkup strategi, dan tf.distribute.ReplicaContext objek di dalam lingkup strategi dan dalam tf.distribute.Strategy.run fungsi. The ReplicaContext objek memiliki all_reduce metode untuk menggabungkan seluruh replika.

Perhatikan bahwa kami menyediakan versi default tf.distribute.Strategy yang digunakan bila tidak ada strategi lain dalam lingkup, yang menyediakan API yang sama dengan perilaku default yang wajar.

modul

cluster_resolver modul: impor Perpustakaan untuk ClusterResolvers.

experimental modul: Distribusi Experimental Strategi perpustakaan.

kelas-kelas

class CrossDeviceOps : kelas Base untuk pengurangan lintas-perangkat dan algoritma penyiaran.

class DistributedDataset : Merupakan dataset didistribusikan di antara perangkat dan mesin.

class DistributedIterator : Sebuah iterator lebih