استفاده از TensorFlow 2.8 در تراشه Apple Silicon arm64

رایانه من اخیراً یک رابط ناخوشایند با دی هیدروژن مونوکسید داشت. برای تعیین اینکه آیا دوباره به زندگی باز می گردد اما ظاهر خوبی ندارد. بنابراین، من یک مک بوک جدید خریدم، یعنی چیپ M3 (arm64). من تجربه خوبی با استفاده از M1 در کار قبلی خود داشتم، بنابراین مشتاقانه منتظر آن بودم.
البته 😩 x86
در مقابل arm
مشکلات معماری بلافاصله با استفاده از TensorFlow شروع شد.
در اینجا نحوه رفع آن است. درخواست کشش: تصویربرداری سلول عمیق #229
DeepCell از TF 2.8 استفاده می کند، بنابراین ما باید از آن استفاده کنیم. متأسفانه بسته 2.8.4 با باینری های ARM ارائه نمی شود. اتفاقا TF 2.16.1 میکند دارای باینری arm64 … اما من نمی توانم از آن در اینجا استفاده کنم 😑
اپل مدارکی برای نصب TensorFlow و پلاگین “فلزی” دارد. به خصوص،
برای TensorFlow نسخه 2.12 یا قبل از آن:
python -m pip install tensorflow-macos
در مورد ما به tensorflow-macos==2.8.0 نیاز داریم که در تاریخچه انتشار tensorflow-macos یافت می شود. متأسفانه لیست فایل ها نشان می دهد که هیچ توزیع پایتون 3.10 وجود ندارد، بنابراین باید به پایتون 3.9 تنزل بدهم.
در مورد tensorflow-metal مستندات بسته می گوید که ما به نسخه 0.4.0 نیاز داریم.
من یک فایل مورد نیاز جدید را برای کاربران Mac arm64 بسته بندی کردم:
$ cat requirements-mac-arm64.txt
tensorflow-macos==2.8.0
tensorflow-metal==0.4.0
سپس الزامات مک را نصب می کنید:
pip install -r requirements-mac-arm64.txt
البته هذیان ها متوقف نمی شوند! در حال دویدن pip install -r requirements.txt
DeepCell را نصب نمی کند، زیرا بستگی دارد tensorflow
– نه tensorflow-macos
(که همان ماژول پایتون را فراهم می کند tensorflow
).
بنابراین من آن را به این ترتیب اجرا کردم تا پس از نصب وابستگیهایی که میتوانیم، از وابستگیها رد شوم:
pip install -r requirements-mac-arm64.txt
pip install -r requirements.txt
pip install -r requirements.txt --no-deps
سپس یک شکست جالب پروتوباف گرفتم.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
1. Downgrade the protobuf package to 3.20.x or lower.
2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).
More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates
رفع سریع: جدیدترین نسخه 3.20.x protobuf، 3.20.3 را بگیرید.
اپل یک اسکریپت آزمایشی ارائه می دهد:
import tensorflow as tf
cifar = tf.keras.datasets.cifar100
(x_train, y_train), (x_test, y_test) = cifar.load_data()
model = tf.keras.applications.ResNet50(
include_top=True,
weights=None,
input_shape=(32, 32, 3),
classes=100,)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])
model.fit(x_train, y_train, epochs=5, batch_size=64)
یک مدل 180 مگابایتی دانلود بعدا… ما طلایی شدیم.
2024-06-05 23:10:30.794862: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:113] Plugin optimizer for device_type GPU is enabled.
فقط برای تأیید، اجازه دهید Activity Monitor را بررسی کنیم – و بله، از gpu استفاده می کند. 🎉 😤
فوو خوب، امیدوارم این یک مورد یک بار باشد. بیشتر توسعه ما ابر است که x86 است، فرمت باینری رایج تر.
تا ماجراجویی بعدی ما با باینری ها ✌
تصویر جلد توسط Kari Shea در Unsplash