HomeKomputerTensorStore untuk Penyimpanan Array Berperforma Tinggi dan Dapat Diskalakan – Blog Google...

TensorStore untuk Penyimpanan Array Berperforma Tinggi dan Dapat Diskalakan – Blog Google AI

Facebook
Twitter
Pinterest
WhatsApp

[ad_1]


Banyak aplikasi kontemporer yang menarik dari ilmu komputer dan pembelajaran mesin (ML) memanipulasi kumpulan data multidimensi yang menjangkau satu sistem koordinat besar, misalnya, pemodelan cuaca dari pengukuran atmosfer melalui grid spasial atau pencitraan medis prediksi dari nilai intensitas gambar multisaluran dalam pemindaian 2d atau 3d. Dalam pengaturan ini, bahkan satu kumpulan data mungkin memerlukan penyimpanan data terabyte atau petabyte. Kumpulan data tersebut juga menantang untuk digunakan karena pengguna dapat membaca dan menulis data pada interval yang tidak teratur dan skala yang bervariasi, dan sering kali tertarik untuk melakukan analisis menggunakan banyak mesin yang bekerja secara paralel.

Toko Tensorpustaka perangkat lunak C++ dan Python open-source yang dirancang untuk penyimpanan dan manipulasi n-data dimensi yang:

  • Menyediakan API seragam untuk membaca dan menulis berbagai format array, termasuk dadu dan N5.
  • Secara asli mendukung beberapa sistem penyimpanantermasuk Penyimpanan Google Cloud, sistem file lokal dan jaringan, Server HTTPdan penyimpanan dalam memori.
  • Mendukung caching dan transaksi baca/tulis balik, dengan kuat atomisitas, isolasi, konsistensi, dan daya tahan (ACID) jaminan.
  • Mendukung akses yang aman dan efisien dari berbagai proses dan mesin melalui konkurensi optimis.
  • Menawarkan API asinkron untuk mengaktifkan akses throughput tinggi bahkan ke penyimpanan jarak jauh latensi tinggi.
  • Menyediakan canggih, sepenuhnya dapat dikomposisi pengindeksan operasi dan tampilan virtual.

TensorStore telah digunakan untuk memecahkan tantangan rekayasa utama dalam komputasi ilmiah (misalnya, manajemen dan pemrosesan kumpulan data besar dalam ilmu saraf, seperti data mikroskop elektron 3d skala peta dan “4d” video aktivitas saraf). TensorStore juga telah digunakan dalam pembuatan model pembelajaran mesin skala besar seperti Telapak dengan mengatasi masalah pengelolaan parameter model (pos pemeriksaan) selama pelatihan terdistribusi.

API yang familier untuk Akses dan Manipulasi Data

TensorStore menyediakan API Python sederhana untuk memuat dan memanipulasi data array besar. Dalam contoh berikut, kami membuat objek TensorStore yang mewakili 56 triliun voxel gambar 3d otak lalat dan akses tambalan kecil 100×100 data sebagai JumlahPy Himpunan:

>>> import tensorstore as ts
>>> import numpy as np

# Create a TensorStore object to work with fly brain data.
>>> dataset = ts.open({
...     'driver':
...         'neuroglancer_precomputed',
...     'kvstore':
...         'gs://neuroglancer-janelia-flyem-hemibrain/' + 
...         'v1.1/segmentation/',
... }).result()

# Create a 3-d view (remove singleton 'channel' dimension):
>>> dataset_3d = dataset[ts.d['channel'][0]]
>>> dataset_3d.domain
{ "x": [0, 34432), "y": [0, 39552), "z": [0, 41408) }

# Convert a 100x100x1 slice of the data to a numpy ndarray
>>> slice = np.array(dataset_3d[15000:15100, 15000:15100, 20000])

See also  Tablet ONYX BOOX Tab Ultra ePaper Diluncurkan dengan Qualcomm Snapdragon 662

Yang terpenting, tidak ada data aktual yang diakses atau disimpan dalam memori sampai potongan 100×100 tertentu diminta; karenanya kumpulan data dasar yang besar dan sewenang-wenang dapat dimuat dan dimanipulasi tanpa harus menyimpan seluruh kumpulan data dalam memori, menggunakan sintaks pengindeksan dan manipulasi yang sebagian besar identik dengan operasi NumPy standar. TensorStore juga menyediakan dukungan ekstensif untuk fitur pengindeksan lanjutantermasuk transformasi, penyelarasan, penyiarandan tampilan virtual (konversi tipe data, downsampling, array yang dihasilkan dengan malas-malasan).

Contoh berikut menunjukkan bagaimana TensorStore dapat digunakan untuk membuat larik zarr, dan bagaimana API asinkronnya memungkinkan throughput yang lebih tinggi:

>>> import tensorstore as ts
>>> import numpy as np

>>> # Create a zarr array on the local filesystem
>>> dataset = ts.open({
...     'driver': 'zarr',
...     'kvstore': 'file:///tmp/my_dataset/',
... },
... dtype=ts.uint32,
... chunk_layout=ts.ChunkLayout(chunk_shape=[256, 256, 1]),
... create=True,
... shape=[5000, 6000, 7000]).result()

>>> # Create two numpy arrays with example data to write.
>>> a = np.arange(100*200*300, dtype=np.uint32).reshape((100, 200, 300))
>>> b = np.arange(200*300*400, dtype=np.uint32).reshape((200, 300, 400))

>>> # Initiate two asynchronous writes, to be performed concurrently.
>>> future_a = dataset[1000:1100, 2000:2200, 3000:3300].write(a)
>>> future_b = dataset[3000:3200, 4000:4300, 5000:5400].write(b)

>>> # Wait for the asynchronous writes to complete
>>> future_a.result()
>>> future_b.result()

Penskalaan yang Aman dan Berkinerja

Memproses dan menganalisis kumpulan data numerik yang besar membutuhkan sumber daya komputasi yang signifikan. Ini biasanya dicapai melalui paralelisasi di berbagai inti CPU atau akselerator yang tersebar di banyak mesin. Oleh karena itu, tujuan mendasar TensorStore adalah memungkinkan pemrosesan paralel set data individual yang aman (yaitu, menghindari korupsi atau inkonsistensi yang timbul dari pola akses paralel) dan kinerja tinggi (yaitu, membaca dan menulis ke TensorStore bukanlah hambatan selama komputasi) . Faktanya, dalam pengujian di pusat data Google, kami menemukan penskalaan kinerja baca dan tulis yang hampir linier karena jumlah CPU ditingkatkan:

Performa baca dan tulis untuk set data TensorStore di format zarr berada di Google Cloud Storage (GCS) yang diakses secara bersamaan menggunakan sejumlah variabel tugas komputasi inti tunggal di pusat data Google. Baik kinerja baca dan tulis meningkat hampir secara linier dengan jumlah tugas komputasi.

Kinerja dicapai dengan mengimplementasikan operasi inti dalam C++, penggunaan multithreading secara ekstensif untuk operasi seperti encoding/decoding dan I/O jaringan, dan mempartisi kumpulan data besar menjadi unit yang jauh lebih kecil melalui chunking untuk memungkinkan pembacaan dan penulisan subset dari keseluruhan kumpulan data secara efisien. TensorStore juga menyediakan caching dalam memori yang dapat dikonfigurasi (yang mengurangi interaksi sistem penyimpanan yang lebih lambat untuk data yang sering diakses) dan API asinkron yang memungkinkan operasi baca atau tulis untuk melanjutkan di latar belakang sementara program menyelesaikan pekerjaan lain.

See also  Perpaduan Pakar dengan Perutean Pilihan Pakar – Google AI Blog

Keamanan operasi paralel ketika banyak mesin mengakses dataset yang sama dicapai melalui penggunaan konkurensi optimisyang menjaga kompatibilitas dengan beragam lapisan penyimpanan dasar (termasuk platform penyimpanan Cloud, seperti GCS, serta sistem file lokal) tanpa memengaruhi kinerja secara signifikan. TensorStore juga memberikan jaminan ACID yang kuat untuk semua operasi individual yang dijalankan dalam satu runtime.

Untuk membuat komputasi terdistribusi dengan TensorStore kompatibel dengan banyak alur kerja pemrosesan data yang ada, kami juga telah mengintegrasikan TensorStore dengan pustaka komputasi paralel seperti Apache Beam (contoh kode) dan Dasbor (contoh kode).

Kasus Penggunaan: Model Bahasa

Perkembangan terbaru yang menarik di ML adalah munculnya model bahasa yang lebih canggih seperti Telapak. Jaringan saraf ini berisi ratusan miliar parameter dan pameran beberapa kemampuan yang mengejutkan dalam pemahaman dan generasi bahasa alami. Model-model ini juga mendorong batas infrastruktur komputasi; khususnya, melatih model bahasa seperti PaLM membutuhkan ribuan TPU yang bekerja secara paralel.

Salah satu tantangan yang muncul selama proses pelatihan ini adalah membaca dan menulis parameter model secara efisien. Pelatihan didistribusikan ke banyak mesin terpisah, tetapi parameter harus disimpan secara teratur ke satu objek (“pos pemeriksaan”) pada sistem penyimpanan permanen tanpa memperlambat proses pelatihan secara keseluruhan. Pekerjaan pelatihan individu juga harus dapat membaca hanya serangkaian parameter spesifik yang mereka perhatikan untuk menghindari overhead yang diperlukan untuk memuat seluruh rangkaian parameter model (yang bisa mencapai ratusan gigabyte).

TensorStore telah digunakan untuk mengatasi tantangan ini. Ini telah diterapkan untuk mengelola pos pemeriksaan yang terkait dengan skala besar (“multipoda”) model yang dilatih dengan JAX (contoh kode) dan telah terintegrasi dengan kerangka kerja seperti T5X (contoh kode) dan jalur. Paralelisme model digunakan untuk mempartisi set parameter lengkap, yang dapat menempati lebih dari satu terabyte memori, lebih dari ratusan TPU. Pos pemeriksaan disimpan dalam format zarr menggunakan TensorStore, dengan struktur potongan yang dipilih untuk memungkinkan partisi untuk setiap TPU dibaca dan ditulis secara independen secara paralel.

Saat menyimpan pos pemeriksaan, setiap parameter model ditulis menggunakan TensorStore dalam format zarr menggunakan kisi potongan yang selanjutnya membagi lagi kisi yang digunakan untuk mempartisi parameter melalui TPU. Mesin host menulis secara paralel potongan zarr untuk setiap partisi yang ditetapkan ke TPU yang dilampirkan ke host tersebut. Dengan menggunakan API asinkron TensorStore, pelatihan tetap berjalan meskipun data masih ditulis ke penyimpanan persisten. Saat melanjutkan dari pos pemeriksaan, setiap host hanya membaca potongan yang membentuk partisi yang ditetapkan untuk host tersebut.
See also  Pendekatan Pemodelan Bahasa untuk Generasi Audio – Google AI Blog

Kasus Penggunaan: Pemetaan Otak 3D

Bidang resolusi sinapsis penghubung bertujuan untuk memetakan pengkabelan satwa dan manusia otak pada tingkat rinci koneksi sinaptik individu. Ini membutuhkan pencitraan otak pada resolusi sangat tinggi (nanometer) di atas bidang pandang hingga milimeter atau lebih, yang menghasilkan kumpulan data yang dapat menjangkau ukuran petabyte. Di masa depan, kumpulan data ini dapat meluas hingga exabyte saat para ilmuwan merenungkan pemetaan seluruh tikus atau otak primata. Namun, bahkan kumpulan data saat ini menimbulkan tantangan signifikan terkait penyimpanan, manipulasi, dan pemrosesan; khususnya, bahkan satu sampel otak mungkin memerlukan jutaan gigabyte dengan sistem koordinat (ruang piksel) ratusan ribu piksel di setiap dimensi.

Kami telah menggunakan TensorStore untuk menyelesaikan tantangan komputasi yang terkait dengan set data konektivitas skala besar. Secara khusus, TensorStore telah mengelola beberapa kumpulan data konektivitas terbesar dan paling banyak diakses, dengan Google Cloud Storage sebagai sistem penyimpanan objek yang mendasarinya. Misalnya, telah diterapkan pada kumpulan data korteks manusia “h01”, yang merupakan gambar resolusi 3d nanometer dari jaringan otak manusia. Data pencitraan mentah berukuran 1,4 petabyte (kira-kira 500.000 * 350.000 * 5.000 piksel besar, dan selanjutnya dikaitkan dengan konten tambahan seperti segmentasi 3d dan anotasi yang berada dalam sistem koordinat yang sama. Data mentah dibagi lagi menjadi potongan individu berukuran 128x128x16 piksel dan disimpan di “Neuroglancer diperhitungkan sebelumnya”, yang dioptimalkan untuk tampilan interaktif berbasis web dan bisa dengan mudah dimanipulasi dari TensorStore.

Mulai

Untuk mulai menggunakan TensorStore Python API, Anda dapat menginstal paket PyPI tensorstore menggunakan:

pip install tensorstore

Mengacu kepada tutorial dan dokumentasi API untuk detail penggunaan. Untuk opsi penginstalan lainnya dan untuk menggunakan C++ API, lihat instruksi instalasi.

Ucapan Terima Kasih

Terimakasih untuk Tim Blakely, Viren Jain, Yash Katariya, Jan-Matthias Luckmann, Michał Januszewski, Peter Li, Adam Roberts, Otak Williamsdan Hector Yee dari Google Research, dan Davis Bennett, Stuart Berg, Eric Perlman, Stephen Plazadan Juan Nunez-Iglesias dari komunitas ilmiah yang lebih luas untuk umpan balik yang berharga tentang desain, pengujian awal, dan debugging.

[ad_2]

Facebook
Twitter
Pinterest
WhatsApp
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments