Hasonlítsa össze az Apple Silicon M1 CPU és GPU teljesítményét az MLP, CNN és LSTM modellek csúcskategóriás konfigurációival
Novemberi bevezetésük óta az Apple Silicon M1 Mac-ek számos benchmarkban lenyűgöző teljesítményt mutatnak. Ezek az új processzorok olyan gyorsak, hogy sok teszt a MacBook Airt vagy a Pro-t csúcskategóriás asztali számítógépekkel hasonlítja össze, ahelyett, hogy a laptoppalettán maradna. Ennek általában nincs értelme a benchmarkban. De itt a dolgok másként működnek, mivel az M1 az energiafogyasztásuk töredékéért gyorsabb, mint a legtöbb.
Az Apple a TensorFlow „Apple Silicon natív verzióján” dolgozik, amely képes kihasználni az M1-ben rejlő lehetőségeket. November 18-án a Google közzétett egy „benchmark”-ot, amely a TensorFlow korábbi verzióihoz képest a teljesítmény növekedését mutatja Mac számítógépeken.
Ennek következtében a gépi tanulási mérnökök most nagyon magas elvárásokat támasztanak az Apple Siliconnal szemben.
De nem szabad megfeledkeznünk egy fontos tényről: az M1 Macek ára 1000 dollár alatt kezdődik, így ésszerű összehasonlítani őket az 5000 dolláros Xeon(R) Platinum processzorokkal? vagy egy 2000 dolláros Nvidia GPU-val kell versenyezni?
Beállít
Ebben a cikkben összehasonlítom az M1 MacBook Air-emet a gépi tanuláshoz használt mindennapi munkám során használt konfigurációkkal.
Az M1-en telepítettem a TensorFlow 2.4-et Conda környezetben, sok más csomaggal, mint például a pandas, a scikit-learn, a numpy és a JupyterLab, amint azt az előző cikkemben leírtam.
Ez a benchmark egy python programból áll, amely egy sorozatot futtat MLP, CNN és LSTM modellek sorozatában, amelyek a következő témában oktatnak: Fashion MNIST¹három különböző tételmérethez, 32, 128 és 512 mintához.
Validálási készletet is használ, hogy összhangban legyen azzal, ahogy a legtöbb képzést a valós alkalmazásokban hajtják végre. Ezután egy tesztkészlet segítségével értékelik a modellt a képzés után, meggyőződve arról, hogy minden jól működik. Tehát a képzési, érvényesítési és tesztkészlet mérete rendre 50000, 10000, 10000.
Megoldások a TensorFlow 2.4 0.1alpha1 verziójával kapcsolatos problémákra az M1-en
Ma a TensorFlow 2.4 alfa verziója még mindig problémákkal küzd, és bizonyos helyzetekben megfelelő megoldásokra van szükség.
Az „buzgó mód” csak CPU-n működik. A GPU-n való képzéshez ki kell kényszeríteni a grafikon módot. Ezt a következő kód hajtja végre
from tensorflow.python.compiler.mlcompute import mlcompute from tensorflow.python.framework.ops import disable_eager_execution disable_eager_execution() mlcompute.set_mlc_device(device_name='gpu') print(tf.executing_eagerly())
A betanított modell értékelése két esetben nem sikerül:
- Grafikon módban (CPU vagy GPU), ha a köteg mérete eltér a betanítási köteg méretétől (kivételt jelent)
- Mindenesetre az LSTM esetében, ha a köteg mérete kisebb, mint a betanítási köteg mérete (nagyon alacsony pontosságot ad vissza eger módban)
A megoldás egyszerűen abból áll, hogy mindig ugyanazt a kötegméretet állítjuk be a képzéshez és az értékeléshez, mint a következő kódban.
model.evaluate(test_images, test_labels, batch_size=128)
Modellek
A három modell meglehetősen egyszerű, és az alábbiakban foglaljuk össze.
MLP
model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=X_train.shape[1:]), tf.keras.layers.Dense(512,activation='relu'), tf.keras.layers.Dropout(rate=0.2), tf.keras.layers.Dense(64,activation='relu'), tf.keras.layers.Dense(10,activation='softmax') ])
CNN
model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32,(3,3),activation = 'relu',input_shape=X_train.shape[1:]), tf.keras.layers.MaxPooling2D((2,2)), tf.keras.layers.Conv2D(64,(3,3),activation = 'relu'), tf.keras.layers.MaxPooling2D((2,2)), tf.keras.layers.Conv2D(64,(3,3),activation = 'relu'), tf.keras.layers.Flatten(), tf.keras.layers.Dense(64,activation='relu'), tf.keras.layers.Dense(10,activation='softmax') ])
LSTM
model = tf.keras.models.Sequential([ tf.keras.layers.LSTM(128,input_shape=X_train.shape[1:]), tf.keras.layers.Dense(10,activation='softmax') ])
Mindegyik a következő optimalizáló és veszteség funkciót használja.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
A tf.keras.dataset
divatos MNIST-je egész számmal rendelkezik, ezért ahelyett, hogy "egy forró tenzorra" konvertálnám őket, közvetlenül egy "ritka kategorikus keresztentrópia" veszteségfüggvényt használok.
Eredmények
A következő diagramok a CPU-on végzett képzések eredményeit mutatják.
A CPU képzésben a MacBook Air M1 minden helyzetben felülmúlja a 8 magos Intel(R) Xeon(R) Platinum példány és az iMac 27 teljesítményét.
A következő diagram megmutatja, hogy más eszközök hányszor lassabbak, mint az M1 CPU.
MLP és LSTM esetén az M1 körülbelül 2-4-szer gyorsabb, mint az iMac 27' Core i5 és 8 magos Xeon(R) Platinum példány. A CNN esetében az M1 nagyjából 1,5-szer gyorsabb.
Íme az M1 GPU eredményei az Nvidia Tesla K80 és T4-hez képest.
A GPU-képzésben a helyzet nagyon eltérő, mivel az M1 sokkal lassabb, mint a két GPU, kivéve egy esetben a K80-on betanított, 32-es kötegmérettel rendelkező convnet-et.
A következő diagram azt mutatja, hogy más eszközök hányszor gyorsabbak, mint az M1 CPU (hogy jobban olvasható legyen, megfordítottam az ábrázolást a CPU hasonló előző diagramjához képest).
Itt a K80 és T4 példányok szinte minden helyzetben sokkal gyorsabbak, mint az M1 GPU. A különbség a tétel méretével még nő is. A K80 körülbelül 2-8-szor gyorsabb, mint az M1, míg a T4 3-13-szor gyorsabb az esettől függően.
Tehát valóban az M1 GPU-t használják, amikor grafikon módban kényszerítjük?
A válasz Igen. Ha megnézzük a GPU-használatot az M1-en edzés közben, az előzmények 70–100%-os GPU-terhelés átlagot mutatnak, míg a CPU soha nem haladja meg a 20–30%-ot csak egyes magokon.
Nem szabad elfelejtenünk, hogy az M1 egy integrált 8 GPU-mag 128 végrehajtási egységgel 2,6 TFlop-hoz (FP32), míg a T4-ben 2560 Cuda mag van 8,1 TFlops-hoz (FP32). Az ár szintén egyáltalán nem ugyanaz.
Meg kell várnunk, hogy az Apple befejezze az „ML Compute” integrációját a TensorFlow-ba, mielőtt levonnánk a következtetéseket, de még ha a közeljövőben is kapunk némi fejlesztést, nagyon kicsi az esélye, hogy az M1 felvegye a versenyt az ilyen csúcskategóriás kártyákkal. De méltán számíthatunk arra, hogy a következő Apple Silicon processzorok csökkentik ezt a különbséget.
Érdekes tény ezeknél a teszteknél, hogy a GPU-n történő edzés szinte mindig sokkal lassabb, mint a CPU-n történő edzés. A következő grafikonok ezeket a különbségeket mutatják be minden esetben.
Ahogy itt megfigyeljük, a CPU-n való betanítás sokkal gyorsabb, mint a GPU-n az MLP és az LSTM esetében, míg a CNN-n, a 128 minta kötegméretétől kezdve a GPU valamivel gyorsabb.
Az utolsó két diagram összehasonlítja az M1 CPU-n végzett képzést a K80 és T4 GPU-kkal.
Következtetés
Ezekből a tesztekből úgy tűnik
- MLP képzéséhez az M1 CPU a legjobb megoldás
- Az LSTM képzéséhez az M1 CPU egy nagyon jó lehetőség, veri a K80-at, és csak kétszer lassabb, mint egy T4, ami nem is olyan rossz, tekintve ennek a csúcskategóriás kártya erejét és árát
- a CNN edzéshez az M1 a K80 leszállási alternatívájaként használható, csak 2-3 tényezővel, de a T4 még mindig sokkal gyorsabb
Természetesen ezek a mérőszámok csak az ebben a tesztben használt, hasonló típusú és mélységű neurális hálózatok esetén vehetők figyelembe.
Gépi tanulási mérnökként a mindennapi személyes kutatásomhoz a TensorFlow használata a MacBook Air M1-emen valóban nagyon jó lehetőség.
Kutatásaim leginkább a strukturált adatokra és idősorokra koncentrálnak, így még ha néha használok is CNN 1D egységeket, az általam készített modellek többsége Dense, GRU vagy LSTM egységeken alapul, így számomra egyértelműen az M1 a legjobb választás.
A főként convnet-tel dolgozók számára az Apple Silicon M1 jelenleg nem meggyőző, így a dedikált GPU továbbra is járható út.
Az Apple még mindig dolgozik az ML Compute integráción a TensorFlow-ba. Ha valamelyik új kiadás jelentős teljesítménynövekedést mutat valamikor, ennek megfelelően frissítem ezt a cikket.
Köszönöm hogy elolvastad.
Frissítés
Egy olvasó megjegyzése után kétszer is ellenőriztem a 8 magos Xeon(R) példányt. Többszálú feldolgozást használ.
A cikk 2. része elérhető itt.
Források
[1] Han Xiao és Kashif Rasul és Roland Vollgraf, "Fashion-MNIST: új képadatkészlet a gépi tanulási algoritmusok teljesítményértékeléséhez" (2017)