Google ने हाल ही में
कोलैबोरेटरी क्लाउड-आधारित मशीन लर्निंग
प्लेटफ़ॉर्म पर अपनी
टेंसोर प्रोसेसिंग यूनिट (TPU) की मुफ्त पहुँच प्रदान की
है । टेन्सर प्रोसेसर एक विशेष एकीकृत सर्किट (ASIC) है जिसे Google द्वारा मशीन लर्निंग कार्यों के लिए TensorFlow लाइब्रेरी का उपयोग करके विकसित किया गया है। मैंने केरस पर टीपीयू के कन्वेन्शनल नेटवर्क को सीखने का प्रयास करने का निर्णय लिया, जो कि CIFAR-10 छवियों में वस्तुओं को पहचानता है। संपूर्ण समाधान कोड को
लैपटॉप पर देखा और चलाया जा सकता है।
फोटो Cloud.google.comटेंसर प्रोसेसर
Habré पर पहले से ही लिखा है कि कैसे TPU की व्यवस्था की जाती है (
यहां ,
यहां और
यहां ), और यह भी
कि TPUs तंत्रिका नेटवर्क के प्रशिक्षण के लिए अच्छी तरह से अनुकूल क्यों हैं । इसलिए, मैं टीपीयू वास्तुकला के विवरण में नहीं तल्लीन करूंगा, लेकिन केवल उन विशेषताओं पर विचार करेगा जिन्हें तंत्रिका नेटवर्क को प्रशिक्षित करने पर विचार करने की आवश्यकता है।
अब टेनसर प्रोसेसर की तीन पीढ़ियां हैं, अंतिम, तीसरी पीढ़ी के टीपीयू का प्रदर्शन 420 TFlops (प्रति सेकंड फ्लोटिंग पॉइंट ऑपरेशंस का खरब) है, इसमें 128 जीबी की हाई बैंडविड्थ मेमोरी है। हालाँकि, केवल दूसरी पीढ़ी के टीपीयू कोलैबोरेटरी पर उपलब्ध हैं, जिनमें 180 टीएफएलोप प्रदर्शन और 64 जीबी मेमोरी है। भविष्य में, मैं इन टीपीयू पर विचार करूंगा।
टेंसर प्रोसेसर में चार चिप्स होते हैं, जिनमें से प्रत्येक में दो कोर होते हैं, टीपीयू में कुल आठ कोर होते हैं। TPU प्रशिक्षण प्रतिकृति का उपयोग करके सभी कोर पर समानांतर में आयोजित किया जाता है: प्रत्येक कोर डेटा वॉल्यूम के एक-आठवें के साथ TensorFlow ग्राफ की एक प्रति चलाता है।
टेंसर प्रोसेसर का आधार एक मैट्रिक्स यूनिट (एमएक्सयू) है। यह मैट्रिक्स ऑपरेशन के कुशल कार्यान्वयन के लिए एक 128x128
सिस्टोलिक सरणी की चालाक डेटा संरचना का उपयोग करता है। इसलिए, TPU उपकरण संसाधनों के उपयोग को अधिकतम करने के लिए, मिनी-नमूना या सुविधाओं का आयाम 128 (
स्रोत ) का एक से अधिक होना चाहिए। इसके अलावा, टीपीयू मेमोरी सिस्टम की प्रकृति के कारण, यह वांछनीय है कि मिनी-नमूना और सुविधाओं का आयाम 8 के एक से अधिक हो।
सहयोगी मंच
मशीन सीखने की तकनीक को आगे बढ़ाने के लिए
सहयोगात्मक Google का क्लाउड प्लेटफ़ॉर्म है। आप मुफ्त में स्थापित लोकप्रिय पुस्तकालयों TensorFlow, Keras, sklearn, पांडा, आदि के साथ एक आभासी मशीन प्राप्त कर सकते हैं। सबसे सुविधाजनक बात यह है कि आप कोलैबोरेटरी पर जुपिटर के समान लैपटॉप चला सकते हैं। लैपटॉप Google ड्राइव पर संग्रहीत हैं, आप उन्हें वितरित कर सकते हैं और सहयोग भी व्यवस्थित कर सकते हैं। यह वह है जो लैपटॉप पर विस्तृत रूप में दिखता है (
चित्र क्लिक करने योग्य है ):

आप लैपटॉप पर एक ब्राउज़र में कोड लिखते हैं, यह Google क्लाउड में एक वर्चुअल मशीन पर चलता है। कार आपको 12 घंटे के लिए जारी की जाती है, जिसके बाद वह रुक जाती है। हालांकि, कुछ भी आपको एक और वर्चुअल मशीन शुरू करने और 12 घंटे काम करने से रोकता है। बस इस बात का ध्यान रखें कि वर्चुअल मशीन बंद होने के बाद, इससे सभी डेटा हटा दिए जाते हैं। इसलिए, अपने कंप्यूटर या Google ड्राइव पर आवश्यक डेटा सहेजना न भूलें, और वर्चुअल मशीन को पुनरारंभ करने के बाद, फिर से डाउनलोड करें।
विस्तृत प्लेटफॉर्म पर काम करने के लिए विस्तृत निर्देश
यहां ,
यहां और
यहां दिए गए हैं ।
टैंसर प्रोसेसर को कोलैबोरेटरी से कनेक्ट करें
डिफ़ॉल्ट रूप से, Colaboratory GPU या TPU गणना त्वरक का उपयोग नहीं करता है। आप उन्हें मेन्यू में कनेक्ट कर सकते हैं रनटाइम -> रनटाइम प्रकार बदलें -> हार्डवेयर त्वरक। दिखाई देने वाली सूची में, "TPU" चुनें:

एक्सेलेरेटर के प्रकार को चुनने के बाद, वर्चुअल मशीन जिसमें कोलैबोरेटरी लैपटॉप जुड़ा हुआ है, पुनः आरंभ करेगा और टीपीयू उपलब्ध होगा।
यदि आपने वर्चुअल मशीन में कोई डेटा डाउनलोड किया है, तो पुनरारंभ प्रक्रिया के दौरान इसे हटा दिया जाएगा। आपको फिर से डेटा डाउनलोड करना होगा।
CIFAR-10 मान्यता के लिए केरस न्यूरल नेटवर्क
एक उदाहरण के रूप में, आइए TPU पर एक केरस तंत्रिका नेटवर्क को प्रशिक्षित करने का प्रयास करें जो
CIFAR-10 डेटासेट से छवियों को पहचानता है। यह एक लोकप्रिय डेटासेट है जिसमें 10 वर्गों की वस्तुओं की छोटी छवियां हैं: हवाई जहाज, कार, पक्षी, बिल्ली, हिरण, कुत्ता, मेंढक, घोड़ा, जहाज और ट्रक। कक्षाएं प्रतिच्छेद नहीं करती हैं, चित्र में प्रत्येक वस्तु केवल एक वर्ग की है।
Keras का उपयोग करके CIFAR-10 डेटासेट डाउनलोड करें:
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
एक तंत्रिका नेटवर्क बनाने के लिए, मुझे एक अलग फ़ंक्शन मिला। हम एक ही मॉडल दो बार बनाएंगे: टीपीयू के लिए मॉडल का पहला संस्करण, जिस पर हम प्रशिक्षित होंगे, और दूसरा सीपीयू के लिए, जहां हम वस्तुओं को पहचानेंगे।
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
अब तक, केएआर ऑप्टिमाइज़र का उपयोग टीपीयू पर नहीं किया जा सकता है, इसलिए, जब एक मॉडल का संकलन किया जाता है, तो टेनसॉरफ्लो से ऑप्टिमाइज़र निर्दिष्ट किया जाता है।
हम सीपीयू के लिए एक केरस मॉडल बनाते हैं, जिसे अगले चरण में हम टीपीयू के लिए एक मॉडल में बदल देंगे:
cpu_model = create_model()
कन्वर्ट करेस तंत्रिका नेटवर्क को टीपीयू मॉडल
Keras और TensorFlow के मॉडल को बिना किसी बदलाव के GPU पर प्रशिक्षित किया जा सकता है। आप टीपीयू पर अब तक ऐसा नहीं कर सकते, इसलिए आपको टीपीयू के लिए बनाए गए मॉडल को मॉडल में बदलना होगा।
पहले आपको यह पता लगाना होगा कि हमारे पास उपलब्ध टीपीयू कहां है। सहयोगी प्लेटफॉर्म पर, यह निम्नलिखित कमांड के साथ किया जा सकता है:
TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR']
मेरे मामले में, TPU पता इस तरह निकला -
grpc://10.102.233.146:8470
। अलग-अलग लॉन्च के लिए पते अलग-अलग थे।
अब आप
keras_to_tpu_model
फ़ंक्शन का उपयोग करके TPU के लिए मॉडल प्राप्त कर सकते हैं:
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)))
पहली पंक्ति में जानकारी स्तर पर लॉगिंग शामिल है। यहाँ मॉडल रूपांतरण लॉग है:
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.
आप देख सकते हैं कि टीपीयू हमें उस पते पर मिला था जिसे हमने पहले निर्दिष्ट किया था, इसमें 8 कोर हैं। हम एक चेतावनी भी देखते हैं कि
tpu_model
प्रयोगात्मक है और इसे किसी भी समय बदला या हटाया जा सकता है। मुझे उम्मीद है कि समय के साथ टीएआरयू पर सीधे केरस मॉडल को बिना किसी रूपांतरण के प्रशिक्षित करना संभव होगा।
हम टीपीयू पर मॉडल को प्रशिक्षित करते हैं
fit
विधि कहकर टीपीयू के मॉडल को केरस के लिए सामान्य तरीके से प्रशिक्षित किया जा सकता है:
history = tpu_model.fit(x_train, y_train, batch_size=128*8, epochs=50, verbose=2)
यहां क्या विशेषताएं हैं हमें याद है कि टीपीयू का प्रभावी ढंग से उपयोग करने के लिए, मिनी-नमूना का आकार 128 का एक होना चाहिए। इसके अलावा, मिनी-सैंपल में सभी डेटा के एक-आठवें का उपयोग करके प्रत्येक टीपीयू कोर पर प्रशिक्षण दिया जाता है। इसलिए, हम प्रशिक्षण के दौरान मिनी-नमूना का आकार 128 * 8 पर सेट करते हैं, हमें प्रत्येक TPU कोर के लिए 128 चित्र मिलते हैं। आप बड़े आकार का उपयोग कर सकते हैं, उदाहरण के लिए, 256 या 512, फिर प्रदर्शन अधिक होगा।
मेरे मामले में, एक युग के प्रशिक्षण के लिए औसतन 6 s की आवश्यकता होती है।
50 वें युग में शिक्षा की गुणवत्ता:
Epoch 50/50
- 6s - loss: 0.2727 - sparse_categorical_accuracy: 0.9006
प्रशिक्षण के लिए डेटा के सही उत्तर का हिस्सा 90.06% था। हम TPU का उपयोग करके परीक्षण डेटा पर गुणवत्ता की जांच करते हैं:
scores = tpu_model.evaluate(x_test, y_test, verbose=0, batch_size=batch_size * 8) print(" : %.2f%%" % (scores[1]*100))
: 80.79%
अब प्रशिक्षित मॉडल के वजन को बचाएं:
tpu_model.save_weights("cifar10_model.h5")
TensorFlow हमें एक संदेश देगा कि वजन TPU से सीपीयू में स्थानांतरित किया गया है:
INFO:tensorflow:Copying TPU weights to the CPU
यह ध्यान दिया जाना चाहिए कि प्रशिक्षित नेटवर्क के भार को कोलैबोरेटरी वर्चुअल मशीन की डिस्क पर सहेजा गया था। जब वर्चुअल मशीन बंद हो जाएगी, तो उससे सभी डेटा मिटा दिए जाएंगे। यदि आप प्रशिक्षित वजन कम नहीं करना चाहते हैं, तो उन्हें अपने कंप्यूटर पर सहेजें:
from google.colab import files files.download("cifar10_model.h5")
सीपीयू पर वस्तुओं को पहचानना
अब सीपीयू का उपयोग करके छवियों में वस्तुओं को पहचानने के लिए टीपीयू पर प्रशिक्षित मॉडल का उपयोग करने का प्रयास करें। ऐसा करने के लिए, मॉडल को फिर से बनाएं और TPU में प्रशिक्षित भार को इसमें लोड करें:
model = create_model() model.load_weights("cifar10_model.h5")
मॉडल केंद्रीय प्रोसेसर पर उपयोग के लिए तैयार है। आइए इसकी मदद से CIFAR-10 टेस्ट सूट की छवियों में से एक को पहचानने की कोशिश करें:
index=111 plt.imshow(toimage(x_test[index])) plt.show()

तस्वीर छोटी है, लेकिन आप समझ सकते हैं कि यह एक हवाई जहाज है। हम पहचान शुरू करते हैं:
हमें न्यूरॉन्स के आउटपुट मूल्यों की एक सूची मिलती है, उनमें से लगभग सभी शून्य के करीब हैं, पहले मूल्य को छोड़कर, जो विमान से मेल खाती है।
[[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]]
मान्यता सफल रही!
परिणाम
टीबीयू की कोलैबोरेटरी प्लेटफॉर्म पर संचालन को प्रदर्शित करना संभव था, इसका उपयोग केरस पर तंत्रिका नेटवर्क के प्रशिक्षण के लिए किया जा सकता है। हालाँकि, CIFAR-10 डेटासेट बहुत छोटा है; यह पूरी तरह से TPU संसाधनों को लोड करने के लिए पर्याप्त नहीं है। GPU की तुलना में त्वरण छोटा हो गया है (आप TPU के बजाय त्वरक के रूप में GPU को चुनकर और फिर से मॉडल को फिर से देख कर खुद की जाँच कर सकते हैं)।
Habré पर एक लेख है जिसमें
नेटवर्क ResNet-50 के प्रशिक्षण पर TPUs और GPUs V100 के प्रदर्शन को मापा गया है । इस कार्य पर, टीपीयू ने चार वी 100 जीपीयू के समान प्रदर्शन दिखाया। यह अच्छा है कि Google ऐसे शक्तिशाली न्यूरल नेटवर्क लर्निंग त्वरक को मुफ्त में प्रदान करता है!
टीपीयू पर केरस तंत्रिका नेटवर्क प्रशिक्षण का प्रदर्शन करने वाला वीडियो।
उपयोगी लिंक
- पूर्ण केरस टीपीयू मॉडल लर्निंग कोड के साथ सहयोगी लैपटॉप ।
- फैशन MNIST से कपड़े और जूते पहचानने के लिए केरस TPU प्रशिक्षण उदाहरण के साथ सहयोगात्मक नोटबुक ।
- Google क्लाउड में सेंसर प्रोसेसर ।
- दसियों प्रोसेसर की वास्तुकला और उपयोग की विशेषताएं ।