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...

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

เวลาเราทำงานกับข้อมูลอย่าง Pandas DataFrame หนึ่งในงานที่เราเขียนลงไปให้มันทำคือ การ Apply Function เข้าไป ถ้าข้อมูลมีขนาดเล็ก มันไม่มีปัญหาเท่าไหร่ แต่ถ้าข้อมูลของเราใหญ่ มันอีกเรื่องเลย ถ้าเราจะเขียนให้เร็วที่สุด เราจะทำได้โดยวิธีใดบ้าง วันนี้เรามาดูกัน...

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

Python เป็นภาษาที่เราใช้งานกันเยอะมาก ๆ เพราะความยืดหยุ่นของมัน แต่ปัญหาของมันก็เกิดจากข้อดีของมันนี่แหละ ทำให้เมื่อเราต้องการ Performance แต่ถ้าเราจะบอกว่า เราสามารถทำได้ดีทั้งคู่เลยละ จะเป็นยังไง เราขอแนะนำ Numba ที่ใช้งาน JIT บอกเลยว่า เร็วขึ้นแบบ 700 เท่าตอนที่ทดลองกันเลย...

Humanise the Number in Python with "Humanize"

Humanise the Number in Python with "Humanize"

หลายวันก่อน เราทำงานแล้วเราต้องการทำงานกับตัวเลขเพื่อให้มันอ่านได้ง่ายขึ้น จะมานั่งเขียนเองก็เสียเวลา เลยไปนั่งหา Library มาใช้ จนไปเจอ Humanize วันนี้เลยจะเอามาเล่าให้อ่านกันว่า มันทำอะไรได้ แล้วมันล่นเวลาการทำงานของเราได้ยังไง...

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

การทำงานกับตัวเลขทศนิยมบนคอมพิวเตอร์มันมีความลับซ่อนอยู่ เราอาจจะเคยเจอเคสที่ เอา 0.3 + 0.6 แล้วมันได้ 0.899 ซ้ำไปเรื่อย ๆ ไม่ได้ 0.9 เพราะคอมพิวเตอร์ไม่ได้มองระบบทศนิยมเหมือนกับคนนั่นเอง บางตัวมันไม่สามารถเก็บได้ เลยจำเป็นจะต้องประมาณเอา เราเลยเรียกว่า Floating Point Approximation...