การ Setup Programming Development Environment ด้วย VSCode, GitHub, Google Drive และ Google Colab
หลังๆมานี้ ผมมีความจำเป็นต้องเขียนโปรแกรม แบบจริงๆๆ จังๆๆ เพิ่มมากขึ้น เพราะ โปรเจคส่วนตัวมีส่วนที่เกี่ยวข้อง กับ การพัฒนา Prediction Model โดยเฉพาะ เรื่อง ที่เกี่ยวกับ Algorithmic Trading โดยใช้ Python บน Jupyter Notebook
ซึ่งหลังๆๆมานี่ เวลาต้องย้ายเครื่องพัฒนา เป็นปัญหามาก ทั้งในเรื่องของการเตรียม Environment สำหรับ Development นอกจากนั้นก็ยังมีปัญหา เรื่อง การเก็บ Source Code (Source Control) แล้วบางจังหวะยังไปวนๆๆ เวียนๆๆ กับการใช้ GPU ในการ Training Model เลยตัดสินใจว่าต้องมาจบปัญหานี้ซักที
🎯 Goals Objective
มี VS code เพื่อใช้เป็น Editor หลักในการพัฒนา ทั้ง Pure Python & Jupyter Notebook โดยต่อท่อลงมาใช้บน Notebook
GitHub ผมจำเป็นต้องเอา Source code ขึ้น GitHub เพื่อช่วยในการเก็บ Source code และ บริหารจัดการการแก้ไข เพิ่มเติม Code ของผมเอง
Google Drive นอกจาก GitHub ที่เอาไว้เก็บ Source code แล้ว ผมก็ยังได้มีการเอา work space ทั้งหมดเก็บไว้บน Google Drive (จ่ายเป็น รายปีประมาณ 10$/ปี ได้พื้นที่อยู่ 100GB)
Google Colab ด้วยความที่ต้องพัฒนา Model ต่างๆ โดยใช้ ทรัพยากรบน Google Colab เช่น High Memory, GPU เลยต้องมาพึ่งพาบนนี้ แทน จ่ายเดือนละ 10$
💡 Solutions
จาก Goals ทั้งหมดที่ผมต้องการ ค้นไปค้นมา ก็พบว่าเราไม่ใช่คนแรก ที่อยากได้ Environment แบบนี้ ก็เลยไปเจอ คนนี้เข้า
https://github.com/amitness/colab-connect/
ซึ่งเค้าก็ได้พัฒนา library colab-connect ขึ้นมา ซึ่งไอ้เจ้า colab-connect อันนี้ ทำหน้าที่ หลักๆๆ อยู่ 3 เรื่อง คือ
- Map Google Drive ให้เรา
- ทำ Git authentication ให้
- สร้าง Tunnel ระหว่าง Google Colab ยิงตรงมาที่ VS code ที่อยู่บนเครื่องของเรา
🔧 Steps : ขั้นตอนการทำ
แบ่งออกเป็น 2 เรื่องใหญ่ๆ คือ
1. ขั้นตอนการสร้างท่อ
1. ให้กดลิงค์ Notebook ไฟล์ นี้ เพื่อเริ่มติดตั้งและใช้งาน
2. เลือก Runtime Type ที่เราต้องการ ต้องเลือกก่อน เพื่อให้เรารู้ว่าเราจะต้องการใช้ Hardware อะไรบ้าง อย่าง ที่ผมเลือกผมต้องการใช้ GPU
3. ทำตามขั้นตอนในไฟล์ Notebook คือ ติดตั้ง Library colab-connect
!pip install -U git+https://github.com/amitness/colab-connect.git
4. ปัญหาอย่างหนึ่ง คือ เวลาสร้าง Tunnel แล้ว ตัว library มัน Random สร้างชื่อ Tunnel มาให้ ทำให้บางที เรามาดูที่ VSCode เราจะหาไม่เจอ ดังนั้นผม เลยอยากจะ สร้างชื่อ Tunnel ของผมเอง แต่ ต้องให้มั่นใจว่าไม่ซ้ำกับของคนอื่นนะครับ โดยการ run command ชุดนี้ เพื่อดูว่า library นี้อยู่ที่ Path ไหนของเรา
5. กำหนดชื่อท่อ เป็นของเราเอง แต่ต้องไปแก้ในไฟล์ library
!sed -i 's/--random-name/--name aoddy-tunnel-6656/g' /usr/local/lib/python3.10/dist-packages/colabconnect/colabconnect.py
6. หลังจากนั้น ถึง Run Command เพื่อสร้าง Tunnel สำหรับงานของเรา
from colabconnect import colabconnect
colabconnect()
7. พอกด Command ด้านบนเสร็จ มันก็จะมี Popup ให้เรากด Permit เพื่อให้ Map Google Drive
8. หลังจากนั้น มันจะสร้าง Github Authentication Code ให้เรา เพื่อยืนยัน การเชื่อมต่อกับทาง Github
9. พอถึงตอนนี้ เราได้ทำการ สร้างเสร็จละ ให้เราเปิด VSCode แล้วเปิด Command Prompt แล้วเลือก 'Remote-Tunnel: Connect to Tunnel'
เลือก Github
แล้วก็เลือก ชื่อ Tunnel ที่เราตั้งไว้ มันจะบอกว่า Online อยู่
สุดท้ายมันจะบอกว่า เชื่อมต่อกับท่อนี้แล้ว โดนดูที่มุมซ้ายล่าง
10. เราต้อง Test ซ่ะหน่อยว่าเรา เชื่อมต่อแล้ว ได้ Resource บน Google Colab ตอนเลือก Environment หรือเปล่า ผ่าน Terminal บน VSCode กด เมนู Terminal -> New Terminal แล้ว พิมพ์ Command 2 อันนี้ คือ
nvidia-smi
free -h
ว่าเห็นได้ว่า เราได้ GPU มาอยู่บนเครื่องเราละ และ ได้ Memory อยู่ 50GB
2. ขั้นตอนการใช้งาน ร่วมกับ Github
ตอนเรา Map Drive กับ Google ตัว Library มันจะทำการสร้าง directory colab ไว้บน Google Drive ของเราเพื่อเอาไว้ Mount Path นี้กับ Work Environment ของเรา ดังนั้น หากเข้าไปดูใน Server ผ่าน Terminal เราจะเห็นว่ามี /colab
รอเราไว้เลย
1. สร้าง Repository บน Github โดยผมจะไป Fork ตัว Lib colab-connect นี่แหละมา Modify เพื่อให้เราสามารถสร้าง Tunnel เป็นชื่อของเราได้ ก็ได้ Repo นี้มา
https://github.com/aoddy/colab-connect
2. พอ Fork เสร็จ ผมก็อยากเอา Code ทั้งหมดบน Github มาอยู่บน VSCode ที่สร้าง Tunnel รอไว้แล้ว และ ไฟล์ที่ Clone มาก็ต้องอยู่บน Google Drive ด้วย
cd /colab
git clone https://github.com/aoddy/colab-connect.git
3. พอได้ของมาละ เราก็จะให้ VSCode เปิด Folder บน Remote ขึ้นมา
4. แล้วเราก็เลือก colab-connect แล้วก็กด Ok เราก็ได้ File ทั้งหมดของ โปรเจค นี้มาอยู่บน VS Code
5. ผมจะลองแก้ไฟล์ บน VSCode แล้ว ทำการ Commit/Push ขึ้น Github แล้ว เราจะมาเช็คดูว่า ไฟล์บน Github / Google Drive มีการ Update หรือยัง โดย Code ที่ผมแก้ไขคือ การสร้างตัวแปร มารอรับ การสร้าง Tunnel Name นั่นเอง
6. ใช้ Git Command เพื่อ commit/push code ขึ้น github
7. ตรวจสอบไฟล์ ทั้งบน Github & Google Drive
ไฟล์บน Github ก็ถูกแก้ไข
ไฟล์บน Google Drive ก็ถูกแก้ไข เช่นกัน
✅ สรุป
Library colab-connect ตอบโจทย์ทั้งหมด ทั้งเรื่องของการ สร้างท่อ, Mount Google Drive และ เชื่อมต่อไปยัง Github เพื่อช่วยในการทำ Source Control
ดังนั้น หลังจากนี้ Code เราก็จะอยู่เป็นที่เป็นทาง หากต้องย้ายเครื่องในการพัฒนาโปรเจค ก็สามารถทำได้โดยง่ายๆๆ ทันที ไม่ต้องกังวล เรื่อง Source หล่น Code หาย อีกต่อไป …. สาธุ 🙏
🎉 ประโยชน์ที่ได้รับ:
✓ การสร้าง Tunnel
- เชื่อมต่อระหว่าง VSCode local กับ Google Colab ได้อย่างราบรื่น
- สามารถตั้งชื่อ tunnel เองเพื่อง่ายต่อการระบุ
✓ Google Drive Integration
- Mount และ sync อัตโนมัติ
- เก็บข้อมูลถาวรข้าม sessions
✓ GitHub Integration
- ใช้งาน source control workflow ได้อย่างสมบูรณ์
- Authentication และจัดการ repository อัตโนมัติ
✓ ความสะดวกในการพัฒนา
- Portability: ย้ายเครื่องพัฒนาได้ง่าย
- ไม่สูญหายข้อมูล: source code เก็บปลอดภัยหลายที่
- พลังคอมพิวติ้ง: เข้าถึง GPU/high-memory เมื่อต้องการ
- มาตรฐานระดับมืออาชีพ: ใช้แนวทางการพัฒนามาตรฐานอุตสาหกรรม
📚 Reference
- Original colab-connect repository
- My forked version with custom tunnel names
- Google Colab Documentation
- VSCode Remote Development
การ setup นี้ได้เปลี่ยนแปลง development workflow ของผมอย่างสิ้นเชิง โดยเฉพาะสำหรับโปรเจค machine learning ที่ต้องการทรัพยากรการคำนวณสูง การผสมผสานระหว่างความสะดวกในการพัฒนาแบบ local กับพลังคอมพิวติ้งของ cloud นั้นเป็นการเปลี่ยนแปลงที่ยิ่งใหญ่จริงๆ