ต่อจากบทความก่อนหน้าที่พูดถึงแอพที่ใช้งานบนคอมพิวเตอร์ Surface Pro X
การพัฒนาแอพลิเคชันเพื่อใช้งานของเราที่กล่าวถึงจะเป็นการพัฒนาเว็บไซต์ รวมถึงพัฒนาโปรแกรมเพื่อใช้งานทางด้าน AI/ML (Artificial Intelligence/Machine Learning) เพื่อนำไปเทรนข้อมูล และทดสอบข้อมูลบนเครื่องคอมพิวเตอร์แม่ข่ายที่มีการ์ดจอเพื่อช่วยการประมวลผล
ในตอนนี้ เราจะพัฒนาบนเครื่อง Surface Pro X (คือมีเครื่องนี้อยู่แล้ว แต่จะเอาไปใช้กับคอมเครื่องอื่นที่ใช้ ARM ก็ได้) เพื่อทดสอบการใช้งานเบื้องต้น (Prototyping) ก่อนจะนำไปทำงานบนคอมพิวเตอร์เครื่องจริง
ก่อนอื่นเรามาพูดถึงปัญหาที่พบจากการใช้งานบนคอมพิวเตอร์ที่ใช้ซีพียู ARM ก่อน
ปัญหาจากการใช้งาน
การพัฒนาเว็บไซต์ รวมถึงเขียนโค้ดสำหรับเทรนและทดสอบอัลกอริทึม AI/ML ที่พัฒนาขึ้นจะมีเครื่องมือสำหรับการพัฒนาโปรแกรม ตัวอย่างเช่น Python, Node.js, Visual Studio, Nodepad++ เป็นต้น เครื่องมือเหล่านั้นบนระบบปฏิบัติการ Windows ได้รับการพัฒนาขึ้นให้ใช้งานบนซีพียูที่ใช้สถาปัตยกรรมแบบ x86 อย่าง Intel/AMD
จุดนี้เลยทำให้เกิดปัญหาขึ้นเมื่อนำโปรแกรมสำหรับการพัฒนาโปรแกรมไปใช้งานบนคอมพิวเตอร์ที่ใช้ซีพียูต่างสถาปัตยกรรมกัน เพราะเมื่อนำเครื่องมือไปเปิดใช้งานคนละสถาปัตยกรรมกัน เราจะใช้งานเครื่องมือนั้นไม่ได้ ตัว Windows จะแจ้งว่าเราไม่สามารถเปิดใช้งานโปรแกรมนี้ได้นะ แล้วเราจะทำอย่างไรดี?
ปัญหาที่กล่าวถึงนี้จะพบได้เมื่อเรานำเครื่องมือพัฒนาโปรแกรมที่รองรับซีพียูที่ใช้สถาปัตยกรรม x86 ที่รองรับ 64-bit เนื่องจาก Windows 10 สำหรับ ARM ที่ใช้งานอยู่ตอนนี้ยังไม่รองรับโปรแกรมประเภทนี้ ซึ่งไมโครซอฟท์กำลังพัฒนาอยู่ อ่านได้จากบทความของผู้พัฒนา
สำหรับผู้อ่านที่สนใจ สามารถดาวน์โหลด Windows 10 แบบ Insider มาใช้ก่อนได้ครับ
จากปัญหาที่กล่าวขึ้นมาตามข้างบนนี้ เราจะพบได้บ่อยเมื่อนำมาใช้งานคนละสถาปัตยกรรมกัน เราแก้ไขได้โดยคอมไพล์เครื่องมือพัฒนาโปรแกรมให้รองรับการทำงานบนซีพียู ARM หรือเปิดใช้งานเครื่องมือพัฒนาบน Windows Subsystem on Linux หรือว่าจะเปิดใช้งานผ่านเว็บเบราวเซอร์ก็ได้ ตัวอย่างเช่น Jupyter Notebook, Google Colab, Kaggle Notebooks หรืออื่น ๆ
วิธีแรกที่เรากล่าวถึง เรานำโค้ดที่ใช้มาใช้งานจริงแล้วจากการคอมไพล์โค้ดด้วยตัวเอง หรือนำตัวติดตั้งที่มีคนคอมไพล์มาติดตั้งแล้ว พบว่ามันใช้งานได้ในระดับหนึ่ง แต่ติดปัญหาตัวไลบรารีที่ติดตั้งผ่าน pip หรือ npm/yarn แล้วคอมไพล์ไลบรารีบางตัวไม่ได้ เพราะเครื่องมืออย่าง cmake, gcc, cygwin ไม่ได้รับการคอมไพล์ให้รองรับ เลยทำให้ใช้งานได้ไม่สะดวกครับ ในบทความนี้เราจะพูดถึงสองเทคนิคหลังที่เราใช้งานอยู่ครับ
ใช้งานผ่าน Windows Subsystem on Linux
วิธีนี้เป็นวิธีที่ไมโครซอฟท์อนุญาตให้เราเปิดใช้งานลินุกซ์ที่เรารู้จักกันอย่าง Ubuntu, OpenSUSE, Debian หรืออื่น ๆ มาใช้งานบนระบบปฏิบัติการวินโดว์ ซึ่งเป็นวิธีที่สะดวกมาก เนื่องจากระบบปฏิบัติการลินุกซ์ได้พอร์ตเพื่อใช้งานซีพียูสถาปัตยกรรม ARM/ARM64 มานานแล้ว และมีโปรแกรม เครื่องมือการพัฒนาโปรแกรมที่ได้รับการคอลไพล์ พร้อมใช้งานบนซีพียูแบบนี้มานานระดับหนึ่ง
วิธีทำวิธีนี้สามารถใช้งานกับคอมพิวเตอร์ทั่วไปได้ครับ เพียงแต่ตัวติดตั้งที่ได้ทำลิ้งค์ในบทความนี้รองรับสำหรับ ARM เท่านั้น เราสามารถดาวน์โหลดตัวติดตั้งที่รองรับ x86 ได้ตามเว็บผู้ผลิตได้เลยครับ
การติดตั้งเพื่อใช้งาน Windows Subsystem for Linux
ก่อนที่จะติดตั้ง Windows Subsystem for Linux (WSL) เราจะต้องเช็คก่อนว่าเครื่องเราใช้งานวินโดว์ Version 2004 หรือใหม่กว่า และ Build 19041 หรือใหม่กว่านั้นก่อน ถ้ายังไม่ใช่ ให้อัพเดทผ่าน Windows Update ให้เสร็จเรียบร้อย
เมื่อทำเสร็จแล้ว ขั้นตอนต่อไป เราสามารถติดตั้งได้ง่าย เพียงไม่กี่ขึ้นตอนตามเว็บไซต์ของไมโครซอฟท์ ตามนี้เลย
ขั้นตอนแรกคือ เปิดเข้าหน้า Settings จาก Start Menu จากนั้นเลือกไปที่หน้า Apps จะได้ตามภาพ
ให้เราเลือกหัวข้อบนขวาบริเวณ Programs and Feature เราจะพบหน้าจอที่คุ้นเคยตั้งแต่สมัย Windows 7 เป็นต้นมา ให้เลือก Turn Windows features on or off
เลือกติดตั้ง Windows Subsystem for Linux กับ Virtual Machine Platform ตามภาพ แล้วรอให้วินโดว์ติดตั้งจนเสร็จเรียบร้อย แล้วสั่งให้รีสตาร์ทคอมพิวเตอร์
เมื่อคอมพิวเตอร์เปิดเข้ามาหน้าจอหลักแล้ว เราอัพเกรตให้เป็น WSL 2 โดยดาวน์โหลด WSL 2 ก่อน รอให้คอมพิวเตอร์ติดตั้งแพคเกจให้เสร็จเรียบร้อย รีสตาร์ทเครื่อง รอจนคอมพิวเตอร์เข้ามาหน้าหลัก
เราตั้งค่าให้ระบบใช้งาน WSL 2 โดยพิมพ์คำสั่งลงในหน้าจอ Command Line (cmd.exe) ว่า
wsl.exe --set-default-version 2
ตัวโปรแกรมจะตั้งค่าเสร็จเรียบร้อย จากนั้นติดตั้งระบบปฏิบัติการลินุกซ์ตามที่ต้องการตามภาพด้านล่าง ซึ่งในบทความนี้ใช้ระบบปฏิบัติการ Ubuntu 20.04 LTS รอให้วินโดว์ดาวน์โหลดและติดตั้งสร็จเรียบร้อย
จากนั้นผู้อ่านสามารถเปิดใช้งาน Windows Subsystem for Linux ได้เลย
การใช้งาน
กดที่ Start Menu เลือก Ubuntu 20.04 LTS เพื่อเปิดใช้งาน เราจะพบหน้าจอรับคำสั่งคอมมานไลน์ของลินุกซ์ เราสามารถติดตั้งเครื่องมือพัฒนาโปรแกรมอย่าง Python, Node.js หรืออื่น ๆ ผ่าน APT ได้เลยครับ
แต่ถ้าเราต้องการเขียนโค้ดโดยใช้ IDE ในระบบปฏิบัติการนี้มีคำสั่ง vim ให้ใช้งาน แต่ถ้าจะเอาง่ายกว่านี้ ก็มีเครื่องมือที่รองรับวินโดว์บน ARM อยู่ที่มีชื่อว่า Visual Studio Code เราสามารถดาวน์โหลดมาติดตั้ง ร่วมกันกับติดตั้ง Extensions อย่าง Remote – WSL เพื่อใช้งาน Surface Pro X ได้เลย
เวลาที่เปิดใช้งาน Visual Studio Code บน WSL เราสามารถพิมพ์คำสั่ง
code .
เราจะเปิดใช้งานโปรแกรม Visual Studio Code บน Windows Subsystem for Linux ได้แล้วตามภาพ ส่วนตัวจุดที่พิมพ์ไว้ข้างบนหมายถึงเราเปิดใช้ให้โปรแกรมเปิดโฟลเดอร์ที่เราใช้งานอยู่ในขณะนี้ครับ
หลังจากการใช้งาน
เราสามารถพัฒนาได้สะดวกขึ้นมาก เพราะเราสามารถพัฒนาผ่าน Visual Studio Code ที่เราใช้งานกันอยู่บ่อย ๆ ร่วมกันกับเครื่องมือพัฒนาที่เราคุ้นเคยอย่าง Python, Node.js บนลินุกซ์ได้เลย ทำให้เราทดสอบบนคอมพิวเตอร์เครื่องนี้ก่อน จากนั้นนำไปใช้งานจริงบนคอมพิวเตอร์บนคลาวด์ได้เลย ทำให้ใช้งานได้สะดวกขึ้น
ยิ่งกว่านั้น เมื่อเราใช้งานร่วมกันกับ Git เราสามารถแก้ไขโค้ดสั่ง commit และ push เพื่อนำโค้ดขึ้นบน Github จากนั้นเราเปิดบนคอมพิวเตอร์บนคลาด์เพื่อ pull โค้ดจากนั้นสั่งเปิดใช้งาน หรือสั่งทำให้เป็นคอนเทนเนอร์อย่าง Docker ได้เลย
ใช้งานผ่านเว็บเบราวเซอร์
นอกเหนือจากการใช้งานผ่าน Windows Subsystem on Linux แล้ว เราสามารถพัฒนาผ่านเว็บเบราวเซอร์ได้เลย โดยไม่จำกัดสถาปัตยกรรมของซีพียู (ก็ทำงานบนเว็บเบราวเซอร์ไงล่ะ)
วิธีนี้มีสองวิธีย่อย ได้แก่เปิดเข้าไปใช้งานเครื่องมือบนคลาวด์ที่มีอยู่แล้ว และติดตั้งใช้งานบนคลาวด์ด้วยตัวเอง
วิธีแรก เข้าไปใช้งานเครื่องมือพัฒนาโปรแกรมบนคลาวด์ที่มีอยู่แล้ว
เรามาพูดถึงวิธีแรกก่อน ในตอนนี้ มีผู้พัฒนาโปรแกรมหลายเจ้าพัฒนาให้พิมพ์โค้ด แก้ไขโค้ดบนเว็บเบราวเซอร์นี้ได้สะดวกมากขึ้น ซึ่งเครื่องมือเหล่านี้ได้แก่ Google Colab, Kaggle Notebooks, Github Codespaces, Amazon Sagemaker เป็นต้น
เครื่องมือเหล่านี้มีข้อดีคือ เราเปิดใช้งานผ่านเว็บเบราวเซอร์ ทำให้เราไม่จำเป็นต้องติดตั้งลงบนคอมพิวเตอร์ให้เสียพื้นที่ฮาร์ดดิสก์ที่มีอย่างจำกัด ไม่ต้องเช่าคลาวด์เพื่อติดตั้งเครื่องมือพัฒนาโปรแรกมอีกทีนึงแบบวิธีหลัง
อย่างไรก็ดีเครื่องมือบางอย่างนั้นมีระยะเวลาประมวลผลที่จำกัด ตัวอย่างเช่น
- Google Colab มีระยะเวลาประมวลผลประมาณ 12 ชั่วโมง (ถ้าสมัครเป็น Colab Pro เราสามารถใช้งานได้ 24 ชั่วโมง) ซึ่งถ้าเราไม่ได้เปิดใช้งานซักระยะหนึ่งตัวโปรแกรมจะปิดการใช้งาน ต้องมาเปิดใช้งานใหม่
- ส่วน Kaggle Notebooks ทีระยะเวลาประมวลผลที่จำกัดประมาณ 9 ชั่วโมง ถ้าไม่เปิดใช้งานซักพักประมาณ 1 ชั่วโมงก็จะปิดการใช้งาน ต้องมาเปิดใหม่เช่นกัน
ส่วน Amazon Sagemaker ก็มีข้อสังเกตคือราคาที่สูงไปหน่อย ถ้าจะนำมาเทรนผ่านการ์ดจอ (อันนี้มุมมองของเราเอง)
ต่อไปเป็นวิธีที่สอง ก็คือติดตั้งบนคลาวด์เอง
เราสามารถติดตั้งบนคลาวด์เพื่อเปิดใช้งานการพัฒนาโปรแกรมผ่านทางเว็บเบราวเซอร์ได้ โดยเราติดตั้งเครื่องมือที่ให้ดาวน์โหลดได้ฟรีอย่าง Jupyter Notebook, code-server, ml-workspace หรืออื่น ๆ ลงบนคลาวด์เพื่อเปิดใช้งานได้เลย
ส่วนวิธีติดตั้ง เราสามารถติดตั้งเพื่อใช้งานได้ไม่ยากจนเกินไป เราสามารถติดตั้ง Jupyter Notebook ได้สองวิธี
วิธีแรก เราติดตั้งผ่านทาง conda โดยแนะนำวิธีนี้เพราะเราสามารถจำกัดสภาพแวดล้อม รวมถึงเครื่องมือให้เหมาะสมต่อการพัฒนาโปรแกรมได้ เราสามารถติดตั้งได้โดย
conda install -c conda-forge notebook
อีกวิธีคือการใช้งาน pip เราติดตั้งได้โดย
pip install notebook หรือ python3 -m pip install notebook
เมื่อเราติดตั้งโดยวิธีใดวิธีหนึ่งเสร็จแล้ว เปิดใช้งาน Jupyter ได้โดย
jupyter notebook
จากนั้นเราเข้าหน้าเว็บตามที่ปรากฏบนหน้าจอ เราจะเข้าไปใช้งาน Jupyter Notebook ได้แล้วครับ
อีกโปรแกรมหนึ่งคือ code-server เป็นเครื่องมือที่เราใช้งาน Visual Studio Code บนหน้าเว็บไซต์ เราสามารถติดตั้งได้ตามบทความที่เคยเขียนไปแล้วตอนที่นำ iPad ไปเขียนโปรแกรม และตัว ml-workspace ก็ติดตั้งได้ตามลิ้งค์ในประโยคก่อนหน้าได้เช่นกัน
เครื่องมือ ml-workspace นี้ทำให้เราสามารถใช้งาน Jupyter Notebook, code-server และอื่น ๆ ผ่านทางหน้าเว็บเบราวเซอร์ได้เลย และเราไม่ต้องติดตั้งทีละตัวด้วย เนื่องจากมันทำงานผ่าน Docker หน้าจอก็ตามภาพด้านล่างนี้ครับ
ข้อดีของเทคนิคนี้คือมันอยู่บนคลาวด์ของตัวเองครับ เราสามารถแก้ไข ปรับแต่งให้เหมาะสมต่อการใช้งานของเราได้ ไม่มีระยะเวลาที่จำกัด และข้อมูลเป็นของเรา ไม่มีหลุดไปไหนแน่นอน แต่ข้อสังเกตคืออาจจะต้องมาติดตั้งด้วยตัวเอง คนที่ไม่ชินกับคำสั่งคอมมานไลน์อาจจะมึน ๆ หน่อยได้ครับ
สรุป
การใช้างน Surface Pro X เดิมมีข้อจำกัดเพราะเราไม่สามารถนำเครื่องมือที่รองรับสถาปัตยกรรม x86 ที่คอมไพล์เป็น 64-bit มาใช้งานบนอุปกรณ์นี้ได้ แต่ตอนนี้เราไม่ได้มีอุปสรรคจากการพัฒนาโปรแกรมผ่านทางหน้าเว็บ หรือนำไปทำงาน AI/ML แต่อย่างใดนัก เพราะเราติดตั้งเครื่องมือผ่าน WSL กับเปิดใช้งานผ่านเว็บเบราวเซอร์ได้เลยครับ
อย่างไรก็ดี ยังมีอุปสรรคอยู่บ้างสำหรับผู้พัฒนาโปรแกรมแบบ GUI หรือพัฒนาสำหรับมือถืออย่าง Flutter อันนี้คงต้องรอทางผู้พัฒนาเครื่องมือที่ใช้ให้พอร์ตมายัง ARM/ARM64 เสียก่อนครับ