Google baru-baru ini memberikan akses gratis ke unit pemrosesan
tensor (TPU) pada
platform pembelajaran mesin berbasis cloud
Colaboratory . Prosesor tensor adalah sirkuit terintegrasi khusus (ASIC) yang dikembangkan oleh Google untuk tugas pembelajaran mesin menggunakan perpustakaan TensorFlow. Saya memutuskan untuk mencoba mempelajari jaringan convolutional TPU pada Keras, yang mengenali objek dalam gambar CIFAR-10. Kode solusi lengkap dapat dilihat dan dijalankan di
laptop .
Foto cloud.google.comProsesor tensor
Pada Habré sudah menulis bagaimana TPU disusun (di
sini , di
sini dan di
sini ), dan juga
mengapa TPU cocok untuk melatih jaringan saraf . Oleh karena itu, saya tidak akan menyelidiki detail arsitektur TPU, tetapi hanya mempertimbangkan fitur-fitur yang perlu dipertimbangkan ketika melatih jaringan saraf.
Sekarang ada tiga generasi prosesor tensor, kinerja TPU generasi ketiga terakhir adalah 420 TFlop (triliunan operasi floating point per detik), berisi 128 GB Memori Bandwidth Tinggi. Namun, hanya TPU generasi kedua yang tersedia di Colaboratory, yang memiliki 180 TFlop kinerja dan 64 GB memori. Di masa depan, saya akan mempertimbangkan TPU ini.
Prosesor tensor terdiri dari empat chip, yang masing-masing berisi dua core, total delapan core di TPU. Pelatihan TPU dilakukan secara paralel pada semua inti menggunakan replikasi: setiap inti menjalankan salinan grafik TensorFlow dengan seperdelapan volume data.
Dasar dari prosesor tensor adalah unit matriks (MXU). Ia menggunakan struktur data licik dari
array sistolik 128x128 untuk implementasi operasi matriks yang efisien. Oleh karena itu, untuk memaksimalkan penggunaan sumber daya peralatan TPU, dimensi sampel mini atau fitur harus kelipatan 128 (
sumber ). Juga, karena sifat dari sistem memori TPU, diinginkan bahwa dimensi sampel-mini dan fitur-fiturnya menjadi kelipatan dari 8.
Platform Kolaboratori
Colaboratory adalah platform cloud Google untuk memajukan teknologi pembelajaran mesin. Anda bisa mendapatkan mesin virtual dengan pustaka populer yang diinstal TensorFlow, Keras, sklearn, panda, dll. Secara gratis. Yang paling nyaman adalah Anda bisa menjalankan laptop yang mirip dengan Jupyter di Colaboratory. Laptop disimpan di Google Drive, Anda dapat mendistribusikannya dan bahkan mengatur kolaborasi. Seperti inilah bentuk laptop di Colaboratory (
gambar dapat diklik ):

Anda menulis kode di browser di laptop, itu berjalan di mesin virtual di Google Cloud. Mobil dikeluarkan untuk Anda selama 12 jam, setelah itu berhenti. Namun, tidak ada yang mencegah Anda memulai mesin virtual lain dan bekerja 12 jam lagi. Perlu diingat bahwa setelah mesin virtual berhenti, semua data darinya dihapus. Karena itu, jangan lupa untuk menyimpan data yang diperlukan ke komputer Anda atau Google Drive, dan setelah memulai ulang mesin virtual, unduh lagi.
Instruksi terperinci untuk bekerja pada platform Kolaborator ada di
sini , di
sini dan di
sini .
Hubungkan prosesor tensor ke Colaboratory
Secara default, Colaboratory tidak menggunakan akselerator perhitungan GPU atau TPU. Anda dapat menghubungkan mereka di menu Runtime -> Ubah jenis runtime -> Akselerator perangkat keras. Di daftar yang muncul, pilih "TPU":

Setelah memilih jenis akselerator, mesin virtual yang terhubung dengan laptop Colaboratory akan dimulai ulang dan TPU akan tersedia.
Jika Anda mengunduh data apa pun ke mesin virtual, maka selama proses restart itu akan dihapus. Anda harus mengunduh data lagi.
Keras Neural Network untuk CIFAR-10 Recognition
Sebagai contoh, mari kita coba latih jaringan saraf Keras pada TPU yang mengenali gambar dari
dataset CIFAR-10 . Ini adalah set data populer yang berisi gambar kecil dari objek 10 kelas: pesawat terbang, mobil, burung, kucing, rusa, anjing, katak, kuda, kapal dan truk. Kelas tidak berpotongan, setiap objek dalam gambar hanya milik satu kelas.
Unduh dataset CIFAR-10 menggunakan Keras:
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
Untuk membuat jaringan saraf, saya mendapat fungsi terpisah. Kami akan membuat model yang sama dua kali: versi pertama model untuk TPU, yang akan kami latih, dan yang kedua untuk CPU, tempat kami akan mengenali objek.
def create_model(): input_layer = Input(shape=(32, 32, 3), dtype=tf.float32, name='Input') x = BatchNormalization()(input_layer) x = Conv2D(32, (3, 3), padding='same', activation='relu')(x) x = Conv2D(32, (3, 3), activation='relu', padding='same')(x) x = MaxPooling2D(pool_size=(2, 2))(x) x = Dropout(0.25)(x) x = BatchNormalization()(x) x = Conv2D(64, (3, 3), padding='same', activation='relu')(x) x = Conv2D(64, (3, 3), activation='relu')(x) x = MaxPooling2D(pool_size=(2, 2))(x) x = Dropout(0.25)(x) x = Flatten()(x) x = Dense(512, activation='relu')(x) x = Dropout(0.5)(x) output_layer = Dense(10, activation='softmax')(x) model = Model(inputs=[input_layer], outputs=[output_layer]) model.compile( optimizer=tf.train.AdamOptimizer(0.001), loss=tf.keras.losses.sparse_categorical_crossentropy, metrics=['sparse_categorical_accuracy']) return model
Sejauh ini, pengoptimal Keras tidak dapat digunakan pada TPU, oleh karena itu, ketika menyusun model, pengoptimal dari TensorFlow ditentukan.
Kami membuat model Keras untuk CPU, yang pada langkah berikutnya kami akan mengonversi menjadi model untuk TPU:
cpu_model = create_model()
Ubah jaringan neural Keras menjadi model TPU
Model pada Keras dan TensorFlow dapat dilatih pada GPU tanpa perubahan. Anda tidak dapat melakukan ini di TPU sejauh ini, jadi Anda harus mengubah model yang kami buat menjadi model untuk TPU.
Pertama, Anda perlu mencari tahu di mana TPU tersedia bagi kami. Pada platform Kolaboratori, ini dapat dilakukan dengan perintah berikut:
TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR']
Dalam kasus saya, alamat TPU ternyata seperti ini -
grpc://10.102.233.146:8470
. Alamat berbeda untuk peluncuran yang berbeda.
Sekarang Anda bisa mendapatkan model untuk TPU menggunakan fungsi
keras_to_tpu_model
:
tf.logging.set_verbosity(tf.logging.INFO) tpu_model = tf.contrib.tpu.keras_to_tpu_model( cpu_model, strategy=tf.contrib.tpu.TPUDistributionStrategy( tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)))
Baris pertama termasuk logging di tingkat Info. Berikut adalah log konversi model:
INFO:tensorflow:Querying Tensorflow master (b'grpc://10.102.233.146:8470') for TPU system metadata.
INFO:tensorflow:Found TPU system:
INFO:tensorflow:*** Num TPU Cores: 8
INFO:tensorflow:*** Num TPU Workers: 1
INFO:tensorflow:*** Num TPU Cores Per Worker: 8
...
WARNING:tensorflow:tpu_model (from tensorflow.contrib.tpu.python.tpu.keras_support) is experimental and may change or be removed at any time, and without warning.
Anda dapat melihat bahwa TPU ditemukan di alamat yang kami tentukan sebelumnya, memiliki 8 core. Kami juga melihat peringatan bahwa
tpu_model
bersifat eksperimental dan dapat diubah atau dihapus kapan saja. Saya berharap bahwa seiring waktu dimungkinkan untuk melatih model Keras langsung di TPU tanpa konversi apa pun.
Kami melatih model di TPU
Model untuk TPU dapat dilatih dengan cara biasa untuk Keras dengan memanggil metode
fit
:
history = tpu_model.fit(x_train, y_train, batch_size=128*8, epochs=50, verbose=2)
Apa saja fiturnya di sini. Kami ingat bahwa agar dapat menggunakan TPU secara efisien, ukuran sampel mini harus kelipatan 128. Selain itu, pelatihan tentang seperdelapan dari semua data dalam sampel mini dilakukan pada setiap inti TPU. Oleh karena itu, kami mengatur ukuran sampel mini selama pelatihan menjadi 128 * 8, kami mendapatkan 128 gambar untuk setiap inti TPU. Anda dapat menggunakan ukuran yang lebih besar, misalnya 256 atau 512, maka kinerjanya akan lebih tinggi.
Dalam kasus saya, pelatihan satu era membutuhkan rata-rata 6 detik.
Kualitas pendidikan di era ke-50:
Epoch 50/50
- 6s - loss: 0.2727 - sparse_categorical_accuracy: 0.9006
Bagian jawaban yang benar untuk data untuk pelatihan adalah 90,06%. Kami memeriksa kualitas data uji menggunakan TPU:
scores = tpu_model.evaluate(x_test, y_test, verbose=0, batch_size=batch_size * 8) print(" : %.2f%%" % (scores[1]*100))
: 80.79%
Sekarang simpan bobot model yang terlatih:
tpu_model.save_weights("cifar10_model.h5")
TensorFlow akan memberi kita pesan bahwa bobot dipindahkan dari TPU ke CPU:
INFO:tensorflow:Copying TPU weights to the CPU
Perlu dicatat bahwa bobot jaringan yang terlatih disimpan pada disk mesin virtual Colaboratory. Ketika mesin virtual dihentikan, maka semua data dari itu akan terhapus. Jika Anda tidak ingin kehilangan bobot yang terlatih, simpanlah ke komputer Anda:
from google.colab import files files.download("cifar10_model.h5")
Mengenali objek pada CPU
Sekarang mari kita coba menggunakan model yang dilatih tentang TPU untuk mengenali objek dalam gambar menggunakan CPU. Untuk melakukan ini, buat model lagi dan muat bobot yang dilatih pada TPU ke dalamnya:
model = create_model() model.load_weights("cifar10_model.h5")
Model ini siap digunakan pada prosesor pusat. Mari kita coba mengenali dengan bantuannya salah satu gambar dari test suite CIFAR-10:
index=111 plt.imshow(toimage(x_test[index])) plt.show()

Gambarannya kecil, tetapi Anda dapat memahami bahwa ini adalah pesawat terbang. Kami mulai pengakuan:
Kami mendapatkan daftar nilai output neuron, hampir semuanya mendekati nol, kecuali nilai pertama, yang sesuai dengan bidang.
[[9.81738389e-01 2.91262069e-07 1.82225723e-02 9.78524668e-07
5.89265142e-07 6.76223244e-10 1.03252004e-10 9.23009047e-09
3.71878523e-05 3.16599618e-08]]
Pengakuan berhasil!
Ringkasan
Itu mungkin untuk menunjukkan operabilitas TPU pada platform Colaboratory, dapat digunakan untuk pelatihan jaringan saraf pada Keras. Namun, dataset CIFAR-10 terlalu kecil, itu tidak cukup untuk memuat sumber daya TPU sepenuhnya. Akselerasi dibandingkan dengan GPU ternyata kecil (Anda dapat memeriksa diri Anda dengan memilih GPU sebagai akselerator, bukan TPU dan melatih kembali model).
Di Habré ada artikel yang
mengukur kinerja TPU dan GPU V100 dalam melatih jaringan ResNet-50 . Pada tugas ini, TPU menunjukkan kinerja yang sama dengan empat GPU V100. Sangat menyenangkan bahwa Google menyediakan akselerator pembelajaran jaringan saraf yang kuat secara gratis!
Video mendemonstrasikan pelatihan jaringan saraf Keras pada TPU.
Tautan yang bermanfaat
- Laptop kolaboratif dengan kode belajar model Keras TPU penuh .
- Notebook kolaboratif dengan contoh pelatihan Keras TPU untuk mengenali pakaian dan sepatu dari Fashion MNIST .
- Prosesor tensor di Google Cloud .
- Fitur arsitektur dan penggunaan prosesor tensor .