ติดตั้ง Tensorflow บน Apple Silicon เร็วทะลุจักรวาล

สำหรับคนที่ใช้งานพวก Deep Learning ทั้งหลายบน Mac เมื่อก่อน เราจะประสบปัญหากันว่า อ้าว ทำไมมันทำงานกับ GPU ของเราไม่ได้ แต่เพราะการมาของ Apple Silicon ทำให้ Apple ออก Version ที่รองรับการทำงานของ GPU บน macOS ผ่าน Graphic API อันเบาบางอย่าง Metal API แล้วบอกเลยว่า มันติดตั้งง่ายกว่าฝั่ง Nvidia เยอะมาก ๆ จากปวดหัวติดตั้ง 2 วันกลายเป็น 5 นาทีเท่านั้นเอง

ติดตั้ง Python

โดยปกติแล้วเราจะติดตั้ง Python อาจจะผ่านพวก Homebrew อะไรก็ว่ากันไป แต่ว่าพอมันเป็น Apple Silicon ที่เป็น ARM มันจะมีปัญหาเพราะพวก Library บางตัวที่มันจะต้องใช้แยกกันระหว่าง x86 กับ ARM ตัวที่เราติดตั้งผ่าน Homebrew มันจะแยกไม่ได้ ทำให้เราจะมีปัญหาในการติดตั้ง Library บางตัว

วิธีการแก้คือ เราจะต้องใช้ Package Manager ที่มี Channel ของ Repository ที่มี Library สำหรับ ARM หนึ่งในตัวที่แนะนำคือ miniforge ซึ่งพวกนี้มันจะคิดให้เราเสร็จหมดไม่ต้องกลัวเรื่องว่าติดตั้งมาแล้วจะใช้ได้มั้ยอะไรนั่นนี่

การติดตั้ง โดยทั่วไปเราจะติดตั้งได้จาก 2 ทางใหญ่ ๆ คือ การติดตั้งผ่าน Homebrew และการโหลด Installer มาลงเองเลย แต่ ๆ ณ วันที่เขียนเราลองติดตั้งผ่าน Homebrew แล้วมันจะมีปัญหากับการติดตั้ง Dependencies ของ Apple เอง เลยนะนำให้เข้าไปโหลด Installer Script จากหน้าเว็บของ Miniforge

sh ~/Downloads/Miniforge3-MacOSX-arm64.sh

เมื่อโหลดมาแล้วให้เขาเปิด Terminal แล้วรัน Script ด้านบน มันก็จะทำการติดตั้ง Miniforge ลงไปในเครื่องเราให้เลย เมื่อติดตั้งเสร็จแล้วมันจะถามว่า เราจะ Init Default Environment มั้ย ถ้าเอาง่ายให้เราตอบ Yes ไปจะง่ายกว่า เมื่อเราติดตั้งเรียบร้อย ที่ด้านหน้าของบรรทัดใน Command Line เราจะมี (base) เขียนอยู่ เป็นชื่อ Environment ที่เรากำลังทำงานอยู่

conda init {bash, fish, powershell, tcsh, xonsh, zsh}

หรือถ้ามันไม่ขึ้น อาจจะเพราะ Conda ไม่ได้ไปใส่ Init Script ที่ Shell ของเรา ถ้าเอาง่าย มันจะมีคำสั่งสำหรับการ Append พวก Init Script ให้เราเลย คือคำสั่งด้านบน แล้วเราก็เลือกว่า เราใช้ Shell อันไหน ถ้าเป็นปกติ Default ของ Mac จะเป็น bash แต่ถ้าใครที่ลงเพิ่มก็ต้องเลือกตามนั้นนะ

ติดตั้ง Tensorflow

conda install -c apple tensorflow-deps

จากนั้น เราจะมาเริ่มขั้นตอนการติดตั้ง Tensorflow กัน เริ่มจากการติดตั้งพวก Dependencies ต่าง ๆ ก่อน ผ่านคำสั่งด้านบนได้เลย

python -m pip install tensorflow-macos
python -m pip install tensorflow-metal

และท้ายสุด เราก็ทำการติดตั้ง Tensorflow และ PluggableDevice เพื่อให้เราสามารถเรียกใช้งาน GPU ได้ เท่านี้เองเราก็ติดตั้ง Tensorflow พร้อมกับการเรียกใช้งาน GPU ได้แล้ว

เช็คการทำงาน

>>> tf.config.list_physical_devices()
[PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

สุดท้าย เพื่อให้มั่นใจว่า Tensorflow กับ GPU ของเราแล้วจริง ๆ สิ่งที่เราติดตั้งลงไปมันจะมองเห็นว่าเป็น Plugable Device ตัวนึง ทำให้เราสามารถใช้ คำสั่งด้านบนในการเช็คได้ โดยเราจะต้องได้ 2 Device โดยเฉพาะ GPU ในตัวที่ 2 ถ้ามีครบเท่านี้ เราก็สามารถใช้งาน GPU บน Mac ผ่าน Tensorflow ได้เรียบร้อยแล้ว

สรุป

การติดตั้ง Tensorflow บน macOS เมื่อก่อนอาจจะเป็นเรื่องที่น่าปวดหัว เพราะมันใช้งานบน GPU ไม่ได้ ต้องใช้แต่บน CPU มาตลอด จนตอนนี้ Apple ทำให้รองรับ GPU เป็นที่เรียบร้อยแล้ว แล้วยังทำให้การติดตั้งมันง่ายมาก ๆ เราไม่ต้องไปตั้งค่า Environment อะไรเลย ติดตั้งครั้งแรก เราใช้เวลาน้อยมาก ๆ ไม่กี่นาทีเท่านั้นเอง วิธีที่เราเล่าในวันนี้ก็เป็นวิธีการติดตั้ง Tensorflow พร้อมกับการใช้งาน GPU อย่างง่าย ๆ แต่จะบอกว่า การติดตั้งที่เราเอาให้ดูวันนี้ ถ้าเราเอาไปรันมันจะยังไม่ได้ใช้ Neural Engine นะ พวกนั้น เราจะต้องมี Library เพิ่มเพื่อที่จะแปลง Model ให้รองรับ Neural Engine