Tutorial

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

By Arnon Puitrakul - 02 ธันวาคม 2021

ติดตั้ง 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

Read Next...

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

นอกจากการทำให้ Application รันได้แล้ว อีกเรื่องที่สำคัญไม่แพ้กันคือการวางระบบ Monitoring ที่ดี วันนี้เราจะมาแนะนำวิธีการ Monitor การทำงานของ MySQL ผ่านการสร้าง Dashboard บน Grafana กัน...

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

จากตอนที่แล้ว เราเล่าในเรื่องของการ Harden Security ของ SSH Service ของเราด้วยการปรับการตั้งค่าบางอย่างเพื่อลด Attack Surface ที่อาจจะเกิดขึ้นได้ หากใครยังไม่ได้อ่านก็ย้อนกลับไปอ่านกันก่อนเด้อ วันนี้เรามาเล่าวิธีการที่มัน Advance มากขึ้น อย่างการใช้ fail2ban...