ประสานงาน สุดยอดเคร...
 
Notifications
Clear all

[ปักหมุด] ประสานงาน สุดยอดเครื่องมือฟรี Kaggle , Colab, Github & WandB

5 ข้อความ
1 Users
0 Likes
15.9 K Views
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

รู้จักและเรียนรู้ Github บน Git Learning Lab

ThaiKeras and Kaggle  28 พย. 2563

 

สวัสดีครับ เชื่อว่าเพื่อนๆ ทุกคนต้องเคยเห็น Github เนื่องจากเป็น สถานที่ที่มืออาชีพในวงการเลือกใช้ในการเก็บและพัฒนา source codes โดยเฉพาะโครงการ Open source ต่างๆ ที่ทุกคนสามารถนำไปใช้งานหรือร่วมกันแก้ไขได้ 

 

ประโยชน์ของ Github เบื้องต้น ที่ทุกคนควรรู้

  • Github คือเว็บที่ให้เราเก็บ Source codes ของโปรเจกต์ไม่จำกัดขนาด ทำ versioning system ให้ทำให้เราเปรียบเทียบประวัติการแก้ไขโค้ดได้อย่างสะดวก
  • ที่เด่นที่สุดคือ สนับสนุน “flow” ในการเขียนโปรแกรมเป็นทีม เพราะสมาชิกสามารถแตก “branch” (ตัวก้อปปี้ของ source code ฉบับ master) ไปแก้ไขได้อย่างสะดวก โดยไม่ต้องกังวลว่าจะมาแก้จุดเดียวกันกับสมาชิกคนอื่นๆ พร้อมๆ กัน หรือไม่ต้องกังวลว่าจะทำให้ source code ของโปรเจกต์มีบั้ก (เนื่องจากฉบับ master ไม่มีการเปลี่ยนแปลงใดๆ )
  • เมื่อพัฒนาแต่ละ branch เสร็จแล้ว ผู้พัฒนาสามารถ “ขออนุญาต” (Pull Request) นำ branch เข้ามาแทน master ได้ โดย Github จะตรวจสอบให้เราอัตโนมัติว่ามีโค้ดในบรรทัดใด ที่ “ถูกแก้พร้อมกัน” (conflict) กับ branch อื่นๆ ที่ผนวกรวมกับ master ไปก่อนหน้านี้หรือไม่ 
  • มีระบบการ “รีวิว” ที่สุดยอด โดยในการทำ Pull Request แต่ละครั้ง ทีมจะต้องกำหนดชุด Reviewers ขึ้นมาตรวจสอบการแก้ไขของ branch นั้นๆ ว่าสมเหตุสมผล และเขียนโค้ดได้มาตรฐานหรือไม่ ระบบให้เราวิจารณ์และถกโค้ดเป็นรายบรรทัดได้อย่างสะดวก ทำให้การแก้ปัญหาและแก้ไขโค้ดที่เหมาะกับทีมที่สุดทำได้ง่ายมากๆ
  • นอกจากนี้ยังมีระบบเว็บบอร์ด (เรียกว่า Issues) เพื่อให้คนในทีมและคนทั่วไป “รายงานบั้ก” หรือ “พูดคุยเกี่ยวกับ features ต่างๆ” ที่ควรมี และสามารถปิด issue ที่จัดการแล้วทิ้งไป ทำให้ทุกคนทราบ “สถานะ” ปัจจุบันของ source code ในแต่ละโปรเจกต์ได้อย่างกระจ่างครับ
  • ก่อนหน้านี้สิ่งเหล่านี้ต้องทำผ่าน command line ที่ค่อนข้างซับซ้อน แต่ปัจจุบันฟังก์ชันทั้งหมดนี้ทำบนเว็บ github.com ซึ่งมี interface สวยงามใช้งานง่าย เหมาะกับคนทั่วไป ไม่ต้องจดจำ command lines ใดๆ เลยครับ
  • นอกจากนี้ github ยังมี features เสริมเช่นเป็น hosting ของเว็บไซต์ของ source code โปรเจกต์นั้นๆ ได้ฟรี ทำเว็บง่ายๆ โดยใช้ markdown เช่นเดียวกับการเขียน Jupyter Notebook หรือ wikipedia นั่นเอง

 

เรียนรู้การใช้งาน Github.com ด้วย Git Learning Lab

สิบปากว่า ไม่เท่าตาเห็นบวกลงมือทำ ประโยชน์เบื้องต้นของ Github ที่เล่าไปข้างต้นนั้นเพื่อนๆ สามารถฝึกฝนผ่านแบบเรียนแบบสนุกๆ ในแบบเรียน“ภาคปฏิบัติ” (คล้ายๆ เกมส์) ที่เรียกว่า “Git Learning Lab” ครับ

โดย Git Learning Lab คือแบบเรียนเสมือนจริง ซึ่งสอนการใช้งานบน Github.com โดยจะมี GitBot มาเปิด “issues” เพื่อขอร้องให้เราไปแก้ไขประเด็นต่างๆ (พร้อมสอนวิธีแก้) และเจ้าบอทตัวนี้ก็ยังจะมาขอทำ (และสอนเราทำ) Pull Request ให้เราช่วยรีวิว และยังสอนแก้ Conflict เบื้องต้นอีกด้วยครับ

โดยแบบเรียน Git Lab นี้มีมากมายสามารถดูได้ที่

https://lab.github.com/ โดยการใช้งานเบื้องต้นที่เราเล่าในบทความข้างต้นจะอยู่ในชุด “สัปดาห์แรกบน Github” https://lab.github.com/githubtraining/first-week-on-github   ซึ่งแนะนำให้ลองเล่นเป็นแบบเรียนแรกครับ นอกจากนี้ยังมีคอร์สอื่นๆ อีกมากมายเช่น “การรักษาความปลอดภัยของโค้ดบน Github” และ “แนวทางการพัฒนา software ขนาดใหญ่ให้ปลอดบั้กด้วย Continuous Integration” อีกด้วย

This topic was modified 2 years ago by The Neural Engineer

   
อ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

Colab vs. Kaggle - ไม่ต้องเลือก ใช้ทั้งคู่ดีที่สุด

ThaiKeras and Kaggle  6 กย. 2563 -- อัพเดต 16 ธค. 2563

 

สวัสดีครับเพื่อนๆ ทั้ง Colab และ Kaggle ต่างก็เป็นสุดยอดคอมพิวเตอร์แล็บบน Cloud ที่ให้ใช้ Virtual Machine (VM) ประสิทธิภาพสูงทั้ง GPU และ TPU ฟรีๆ (โดย Colab มี Pro-option จ่ายเงินเพิ่มเพียง 300 บาทต่อเดือน)

ทั้งคู่เปิดโอกาสให้คนทั่วไปสามารถทำการทดลอง Deep Learning หรือ AI ระดับงานวิจัยชั้นสูงได้โดยไม่ต้องมีทุนหนา โดยก่อนหน้าที่จะมี Colab และ Kaggle นี้ (ราวๆ 2-3 ปีก่อน) การจะใช้ GPU / TPU ประสิทธิภาพสูงเช่นนี้ต้องจ่ายเงินอย่างน้อยราว 30,000 บาทต่อเดือน และอาจจะทะลุไปถึงหลักแสนบาทต่อเดือน (ในกรณีใช้ Multi-GPUs ซึ่งเทียบเท่ากับการใช้ TPU)

หลายคนอาจสงสัยว่าควรจะใช้ Colab หรือ Kaggle ดีกว่ากัน สำหรับส่วนตัวผมเองคิดว่าใช้ทั้งคู่ร่วมกันนั้นยอดเยี่ยมที่สุดครับ 

กล่าวโดยสรุป Colab นั้นจะโดดเด่นเรื่องสเป็คโดยรวมที่สูงกว่า ทำให้การทดลองแบบ Interactive หรือผู้ใช้งานทำการทดลองอยู่กับหน้าจอตลอดเวลานั้นทำได้อย่างมีประสิทธิภาพ

ส่วน Kaggle นั้นจะได้ความง่ายและสะดวกเรื่องการเซพและเข้าถึงข้อมูล และความมั่นใจในการรัน Batch Session นั่นคือเรารันงานทิ้งไว้โดยการันตีว่าเครื่องจะไม่ดับกลางคัน ถ้าเราใช้งานไม่เกินโควตาครับ

นอกจากนี้ยังมีรายละเอียดปลีกย่อย ที่เราจะมาลองขุดเพิ่มเติมกันในบทความนี้ ซึ่งข้อมูลต่างๆ จะเป็นข้อมูล ณ ขณะเขียนบทความนี้คือ 6 กันยายน 2563 ครับ

ถ้าพร้อมแล้วเรามาเริ่มกันเลยครับ

.

 

โหมดการใช้งาน interactive vs. batch modes

Kaggle มีทั้ง interactive mode และ Batch mode

ใน interactive mode เราต้องเปิด browser ทิ้งไว้ตลอดเวลา ถ้ามีการปิด browser หรือ internet เสียหาย เราจะมีเวลาราว 60 นาทีที่จะเชื่อมต่อใหม่อีกครั้งสำหรับ CPU และ GPU มิเช่นนั้นตัว server จะตัดการเชื่อมต่ออย่างสมบูรณ์หลังจาก 60 นาทีไปแล้ว ส่วน TPU นั้นต้องเชื่อมต่อภายใน 15 นาทีก่อนที่ VM จะถูกทำลาย

ส่วนใน batch mode เราสามารถปิด browser และสั่งให้ VM รันจนเสร็จและเซพ output ให้เราโดยอัตโนมัติได้เลย แต่ต้องรันต่อเนื่องไม่เกินโควต้าที่จะอธิบายในหัวข้อถัดไปด้วยนะครับ

ใน Kaggle เราสามารถรัน 10 CPU batch, 2 GPU batch, 2 TPU batch ได้พร้อมกัน ดังนั้นถ้าเราต้องการรันงานเล็กๆ หลายๆ งานพร้อมกัน (ไม่เกินโควตาที่กล่าวในหัวข้อถัดไป) โดยไม่ต้องพะวงเรื่องการเชื่อมต่อถูกตัด การรันบน Kaggle ก็จะสะดวกมากๆ ครับ

Colab นั้นมีเพียง interactive mode เท่านั้นจึงต้องเปิด browser และเชื่อมต่อ internet ตลอดเวลา โดยถ้าการเชื่อมต่อหลุด เรามีเวลาราว 30 นาทีก่อนที่ VM จะถูกทำลายครับ

.

 

โควต้าในการใช้งาน

Kaggle นั้นมี Quota ในการใช้งานเป็นรายสัปดาห์ โดยสามารถใช้ CPU ได้ไม่จำกัด  แต่รันต่อเนื่องไม่เกิน 9 ชม. นั่นคือถ้าเกิน 9 ชม. VM จะถูกทำลายและข้อมูลทั้งหมดจะถูกลบถ้าเราไม่ได้เซพข้อมูลไว้ แต่เราสามารถสั่งสร้าง VM ใหม่ได้เรื่อยๆ ไม่จำกัด

Kaggle มีโควตา GPU รวมให้ **ไม่น้อยกว่า** 30 ชม. ต่อสัปดาห์ โควต้าจะเปลี่ยนทุกสัปดาห์ตามที่ Kaggle ประเมินว่าจะมีทรัพยากรมากหรือน้อยในสัปดาห์นั้นๆ  บางสัปดาห์อาจได้เกือบๆ 40 ชม. เลยทีเดียว

ตัว GPU รันต่อเนื่องได้ไม่เกิน 9 ชม. เช่นเดียวกัน CPU

Kaggle TPU นั้นมีโควตาให้ 30 ชม. ต่อสัปดาห์ Kaggle-TPU นั้นเป็น resource ที่ประสิทธิภาพสูงมากและแพง ดังนั้นจึงรันต่อเนื่องได้ไม่เกิน 3 ชม. ครับ

 

Colab นั้นมีโควตาเช่นกัน แต่ไม่เปิดเผยชัดเจน และไม่เท่ากันในแต่ละสัปดาห์เช่นเดียวกับ Kaggle  โดย

Colab อนุญาตให้ใช้งานต่อเนื่องราวๆ 12 ชม. ส่วน Colab-pro ที่มีค่าใช้จ่ายราวๆ 300 บาทต่อเดือน จะให้ใช้งานได้ต่อเนื่องไม่เกิน 24 ชม. ทั้งนี้ขึ้นกับว่ามีผู้ใช้งานเยอะหรือไม่ในวันนั้นๆ ด้วย 

ถ้าเราใช้งานมากเกินโควตา Colab อาจหยุดทำงานกลางทางได้แม้นเราจะเปิด browser และต่อ internet ตลอดเวลาก็ตาม

.

 

การรันต่อเนื่องนานๆ

บางครั้งถ้า training data เรามีขนาดใหญ่มากๆ เราจำเป็นต้องรันต่อเนื่องนานๆ เพื่อให้การ train สำเร็จอย่างน้อย 1-3 epochs

ตรงนี้ Colab จะง่ายกว่าเนื่องจาก Colab สามารถรันต่อเนื่องได้นานถึง 12-24 ชม. ต่างจาก Kaggle ที่ได้เพียง 9 ชม. ซึ่งถ้าจะรันนานกว่านั้นบน Kaggle ทำให้ต้องมีการเซพ states ของ model, optimizer และโหลด states เหล่านั้นขึ้นมาในการรันครั้งต่อไป

อย่างไรก็ดีเนื่องจากโควตา Colab ไม่ระบุชัดเจน บางครั้งเมื่อเราใช้งานเยอะ และโควตาใกล้หมด VM อาจถูกทำลายก่อน 12 หรือ 24 ชม.  ดังนั้นเราจึงต้องระมัดระวังเซพข้อมูลมากขึ้นเพื่อกันไม่ให้ข้อมูลสูญหายครับ

 

Spec เทียบหมัดต่อหมัด

** GPU **

บน Colab ถ้าเรายังมีโควตาเราจะได้  P100 ซึ่งเป็นรุ่นประสิทธิภาพค่อนข้างสูง แต่ถ้าเราใช้งานจนโควตาเหลือน้อยเราอาจจะได้รุ่น T4 หรือ K80 ซึ่งประสิทธิภาพด้อยกว่าแทน ส่วน Kaggle นั้นการันตี P100 บนโควตารายสัปดาห์ที่กล่าวในหัวข้อข้างบนครับ

 

** TPU ** 

TPU คือหน่วยประมวลผลที่ใกล้เคียง Multi-GPUs 8 units จึงทรงพลังอย่างมาก โดย Kaggle นั้นเราจะได้รุ่นใหม่คือ V3-8 ที่มี RAM 16GB ทั้ง 8 Cores ในขณะที่บน Colab จะได้รุ่น V2-8 คือ RAM 8GB ทั้ง 8 Cores ข้อดีของ Kaggle คือ V3-8 ทำงานได้เร็วกว่า V2-8 เกือบเท่าตัว แต่ข้อเสียก็คือรันได้ต่อเนืองไม่เกิน 3 ชม. ทำให้ถ้าเรามีข้อมูลหรือโมเดลขนาดใหญ่มากๆ การรันบนบน Colab ที่ลิมิตสูงถึง 12-24 ชม. ก็อาจจะเทรนข้อมูลได้สะดวกกว่า

 

** RAM **

บน Kaggle CPU และ TPU จะมี RAM 16GB ส่วน GPU จะมี RAM เพียง 13GB

เดิมที Colab นั้นมาตรฐานคือ 13 GB แต่ล่าสุด ธันวาคม 2020 อัพเกรดแรมเวอร์ชั่นธรรมดาให้เท่า Colab-Pro ในโหมด High-RAM เป็น 25 GB สำหรับ CPU, GPU และ 35GB สำหรับ TPU ซึ่งยอดเยี่ยมมากๆ  (อย่างไรก็ตาม Colab Pro จะได้เพิ่ม running time กับ Disk แทนครับ)

 

** Disk **

Colab ใจป้ำมากๆ ให้ Disk มี่ขนาดมากถึง 226GB สำหรับ CPU, TPU และ 147GB สำหรับ GPU สำหรับเวอร์ชั่น Pro

อัพเดต ธันวาคม 2020  ในเวอร์ชันธรรมดาพื้นที่ Disk จะเหลือครึ่งเดียวของตัวเลข Pro ข้างต้นครับ

อย่างไรก็ดีในกรณีที่เราต้องการเซพ output แบบถาวร เช่น weights ของ model ที่สอนเสร็จแล้ว เราจำเป็นต้องเซพลง Google Drive หรือ Cloud Storage อื่นๆ ซึ่งอาจมีค่าใช้จ่ายเพิ่มเติมครับ

ส่วนใน Kaggle ก็ใจป้ำเช่นกันแต่จะซับซ้อนกว่าหน่อย นั้นโควตา Disk จะแยกเป็นสามส่วนคือ /kaggle/input ซึ่งเราสามารถโหลด datasets ที่มีอยู่บน Kaggle ได้ 100GB (ดูรายละเอียดด้านล่าง),  /kaggle/temp/ ที่เราสามารถเซพข้อมูลชั่วคราวได้มากกว่า 100GB และ /kaggle/working 5GB ซึ่งจะเป็น output ที่ Kaggle จะเซพให้เราถาวรในกรณีที่เรารัน Batch Session โดยอัตโนมัติ ซึ่งทำให้การเซพ output ของเราสะดวกมากกว่า Colab ครับ

อัพเดต ธันวาคม 2020 /kaggle/working เพิ่มเป็น 20 GB

** spec สูงสุด **

โดยส่วนตัวแล้ว Colab TPU-HighRAM ที่เทียบเท่าการใช้งาน Multi-GPUs บน RAM 35GB, Disk 226GB และรันต่อเนื่องได้ถึง 24 ชม. นั้นถือว่าสุดยอดมากๆ ซึ่งน่าจะเทียบเท่ากับการเช่าเครื่องบน Cloud อย่าง AWS หรือ GCP หลายหมื่นบาทต่อเดือนทีเดียว

อย่างไรก็ดีเนื่องจากโควตามีจำกัด ก็พยายามไม่ใช้ spec นี้ถ้าไม่จำเป็นนะครับ 🙂

ในกรณีทั่วๆ ไป Kaggle TPU นับว่าเหลือเฟือมากแล้วดังนั้น การรัน Batch session พร้อมกัน 2 sessions และเซพ output ถาวรอัตโนมัติก็ถือว่าเป็นอะไรที่สะดวกมากๆ ครับ

 

.

การสร้าง notebook เพื่อเขียนโปรแกรม

ถ้าเรามีไฟล์โน้ตบุคอยู่แล้ว ทั้ง Colab และ Kaggle สามารถ upload ไฟล์โน้ตบุคนามสกุล .ipynb ได้อย่างง่ายดายครับ

โดย Colab นั้นจะมี option import (ก็คือก้อปปี้) โน้ตบุคจาก GitHub ซึ่งทำให้เราสามารถเข้าถึงโน้ตบุคสำเร็จรูปบน GitHub ได้สะดวกเพียง 1 click

ส่วนใน Kaggle นั้นจะโดดเด่นในเรื่องที่มีการจัดกลุ่มโน้ตบุคตาม Datasets และตาม Competitions ซึ่งทำให้เราสามารถค้นหาโน้ตบุคที่เราสนใจได้อย่างเป็นหมวดหมู่ เช่น ปัจจุบันมีการแข่งขัน "ทำนายประเภทนกจากเสียงร้อง" (Cornell Birdcall Identification) เราก็สามารถหาโน้ตบุคทั้งหมดที่เกี่ยวข้องกับการแข่งขันและ dataset นี้ได้ที่ https://www.kaggle.com/c/birdsong-recognition/notebooks  ซึ่งการรวมโน้ตบุคเป็นหมวดหมู่ไว้ที่เดียวกันแบบนี้ทำให้การค้นหางานที่น่าสนใจทำได้ง่ายมากครับ   

นอกจากนี้สามารถโน้ตบุคที่กำลังมาแรงในปัจจุบันได้ที่ https://www.kaggle.com/notebooks เราสามารถก้อปปี้โน้ตบุคเหล่านั้นได้ง่ายๆ เพียง 1 click (คลิ้กที่มุมขวาบนของโน้ตบุคและเลือกคำสั่ง Copy and Edit Notebook)

 

.

การโหลดข้อมูล input

การโหลดข้อมูลบน Kaggle นั้นสามารถทำได้อย่างเป็นระบบ เนื่องจาก Kaggle เองเป็นหนึ่งในแหล่งรวม Dataset ที่ใหญ่ที่สุดในโลก เราสามารถหา Datasets ที่เกี่ยวข้องกับงานของเราได้ที่

https://www.kaggle.com/datasets และสามารถ import datasets เหล่านี้เข้า notebooks เราได้ง่ายๆ บนเมนูในโน้ตบุค (กดปุ่ม Add Data ในเมนูขวามือ) โดยเราสามารถโหลด Datasets ทั้งหมดในโน้ตบุคได้ไม่เกิน 100 GB ครับ

นอกจากนี้เรายังสามารถ Upload Datasets ส่วนตัวเข้าสู่ Server Kaggle โดยตรงได้อีกด้วยครับ โดยแต่ละ User นั้นมีโควต้า upload ข้อมูลส่วนตัวที่ไม่แชร์คนอื่น (Private) ได้ 100GB แต่ถ้า upload แบบให้คนอื่นใช้ได้แบบสาธารณะ (Public) ก็จะไม่มีโควตาครับ ดังนั้นการจัดการข้อมูลบน Kaggle จึงได้เนื้อที่แทบจะ unlimited ฟรีๆ และค่อนข้างสะดวกมากๆ ครับ

 

ส่วน Colab เราจำเป็นต้องมีแหล่งข้อมูลที่เซพอยู่ใน Google Drive, Cloud Storage อื่นๆ หรือแม้แต่ Kaggle ก็ได้ครับ และใช้ API ของแต่ละค่ายโหลดมากันเอง ก็จะมีขั้นตอนมากกว่า Kaggle หน่อย

.

 

สรุป

จากข้อมูลทั้งหมดที่กล่าวมาก็หวังว่าจะเป็นไอเดียให้เพื่อนๆ เลือกใช้งานทั้ง Colab และ Kaggle ได้เต็มประสิทธิภาพนะครับ โดยส่วนตัวผมเอง ใช้ทั้งคู่ร่วมกัน โดยจะใช้ Kaggle ให้หมดโควตาก่อนเนื่องจากการโหลด input/output ทำได้สะดวกกว่า และเมื่อ setup pipeline ที่มั่นใจแล้ว ก็จะเทรนด้วยโมเดลขนาดใหญ่และข้อมูลขนาดใหญ่ ก็จะเลือกใช้ Colab Pro TPU

ซึ่ง เมื่อใช้ทั้ง Colab และ Kaggle ร่วมกันแบบนี้แล้ว ทำงาน 7 วันยังไม่เคยใช้โควตาหมดพร้อมกันแม้แต่ครั้งเดียวเลยครับ

เพื่อนๆ ที่มีประสบการณ์ดีๆ บนทั้ง 2 platforms นี้เพิ่มเติมสามารถแชร์ได้ในคอมเมนท์ข้างล่างเลยนะครับผม 🙂

และสำหรับเพื่อนๆ ที่ยังไม่ได้เป็นสมาชิก FB Group Colab Thailand สามารถเข้าไปร่วมแชร์ประสบการณ์กันได้ที่นี่ครับ : https://www.facebook.com/groups/colab.thailand/


   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

ใช้งานสามทหารเสือ Github + Colab + Kaggle

ThaiKeras and Kaggle  17 ธค. 2563

สวัสดีครับเพื่อนๆ วันนี้อยากลองแชร์ pipeline การทำงานบน Github + Colab + Kaggle ที่ผมใช้ด้วยตัวเองอยู่ โดยสามเว็บนี้ถือได้ว่าเป็น “ที่สุดของของฟรี” ที่เราควรจะใช้ให้ได้ประโยชน์สูงสุด โดย pipeline ที่แชร์จะเป็น Colab notebook ในตอนท้ายของบทความครับ

เราเคยเขียนถึง Colab และ Kaggle กันไปแล้วในบทความนี้ และเล่า Github ย่อๆ ในบทความก่อน กดเลื่อนขึ้นไปอ่านได้เลยครับ

.

 

Kaggle เดี่ยวๆ  — vs. — Github +Colab +Kaggle

อันที่จริง Kaggle นั้นมีระบบ source code versioning ภายในตัวนั่นคือจะเก็บโค้ดทุกเวอร์ชั่นให้เราอย่างอัตโนมัติ เปรียบเทียบโค้ดระหว่างเวอร์ชั่นได้ และไม่จำกัดพื้นที่เก็บโค้ดเช่นเดียวกับ Github นอกจากนี้ยังมี GPU และ TPU ในตัวเช่นเดียวกับ Colab

และที่พิเศษสุด Kaggle ยังอนุญาตให้เราสร้าง dataset ได้อย่างไม่จำกัดในข้อมูลชนิด pubilc และให้ private storage อีก 100GB ทำให้ในทางปฏิบัติเราจึงมี cloud storage ที่เก็บ datasets และ pretrained models ได้อย่างไม่จำกัด ฟรีๆ เลยครับ

ดังนั้นจากที่กล่าวมา ในงานส่วนตัว หรือการทดลอง concept ต่างๆ นั้นใช้ Kaggle อย่างเดียวอาจจะเพียงพอ และจบในตัวเอง จึงเป็นตัวเลือกที่สะดวกที่สุดที่เราแนะนำเพื่อนๆ ครับ

อย่างไรก็ดีถ้าโปรเจกต์มีขนาดใหญ่ขึ้น ต้องร่วมกันทำกับเพื่อนหลายคน รวมทั้งอาจต้องมี production version ที่ถูกเรียกใช้งานจากภายนอกตลอดเวลา (ไม่สามารถเสี่ยงทดลองที่จะทำให้เกิดบั้กได้) ในกรณีนี้เราจำเป็นต้องใช้ความสามารถของ Github Coding Flow

นอกจากนี้เรายังอาจลงทุนเล็กน้อยใน  Colab Pro (ราว 300 บาทต่อเดือน) ซึ่งให้ RAM Storage และ Running time ที่ทรงพลังมากกว่า Kaggle ก็จะทำให้ทำงานกับโมเดลที่มีขนาดใหญ่ได้ครับ

(โดยเรื่องของ Github Flow และ Colab spec นั้นอ่านได้จากบทความก่อนๆ ที่เราแปะลิงก์ไว้ตอนต้นครับผม)

อย่างไรก็ดี Kaggle นั้นเข้ามาเติมเต็มเรื่อง Storage ฟรีซึ่งทั้ง Colab และ Github ไม่มีให้ หลายๆ คนใช้ Google Drive กับ Colab ซึ่งต้องแชร์กับพื้นที่ส่วนตัวของเรา จึงแนะนำให้ใช้ Kaggle storage ดีกว่าครับ

ในบทความนี้เราจึงจะมาลองดูวิธีง่ายๆ ในการประสานงานสามทหารเสือกันครับ

.

 

ใช้งานสามทหารเสือโดยมี Colab เป็นตัวกลาง

ผมได้เตรียม Colab notebook เป็นตัวอย่าง pipeline ในการใช้งานสามประสานร่วมกัน มีกระบวนการคร่าวๆ แบบนี้ครับ

  • สร้าง branch บน project ที่ Github ที่ต้องการเพิ่มเติม/แก้ไข
  • “Clone” branch นั้นมาที่ Colab
  • สร้าง/โหลด datasets และ models ที่จำเป็นไว้ที่ Kaggle
  • แก้ไขโค้ด และทดลองบน Colab ด้วย magic functions คือ autoreload และ writefile
  • Upload dataset/model ใหม่เข้า Kaggle
  • Upload code ที่แก้ไขบน Github โดยใช้ web interface
  • Pull Request branch ที่แก้ไขแล้วเพื่อให้เพื่อนในทีมรีวิวบน Github
  • เมื่อโค้ดถูกรีวิวโดยสมบูรณ์ก็พร้อม merge เข้า master version เป็นอันจบลูป 1 รอบครับ
  • ในกรณีที่ต้องการเซพไฟล์เป็นชนิด Jupyter Notebook บน Github สามารถทำได้เลยบน Colab โดยเลือก "Save a copy to GitHub" ซึ่งจะเชื่อมต่อกับ GitHub account ของเราโดยตรง นอกจากนี้ใน Notebook บน GitHub ที่เซพไว้ยังจะมีปุ่ม "Open in Colab" เท่ห์ๆ ให้อีกด้วย 😀

สามารถกดดู Colab ได้ที่นี่ครับ https://colab.research.google.com/drive/14f0CYhgCUsPVnxheXA4KPYxPiTpccm5c?usp=sharing

This post was modified 3 years ago 2 times by The Neural Engineer

   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

WandB เครื่องมือสำคัญสำหรับการทำงาน Data Science ที่จะช่วยเราวิเคราะห์และบันทึกทุกผลการทดลองได้ฟรี

ThaiKeras and Kaggle - 8 พค. 2565

 

สวัสดีครับ WandB เป็น free tool ชั้นยอดที่จะช่วยเติมเต็มการทำงาน data science และ machine learning อย่างมืออาชีพ โดยเมื่อเรารวม free tools ที่ data scientists ทุกคนควรใช้แล้วแทบจะครอบคลุมทุกกระบวนการทำงาน กล่าวคือ

 

  • เขียนโปรแกรมและใช้ GPU / TPU สะดวกและฟรีบนเว็บบราว์เซอร์ ด้วย Kaggle / Colab
  • สร้างและเก็บ Dataset ขนาดใหญ่ฟรีบน cloud เรียกใช้งานได้จากทุกที่ด้วย Kaggle Datasets (ไม่จำกัดกรณี public dataset / จำกัดโควตา 100GB กรณี private)
  • เมื่อตกผลึกทางความคิดเรื่องการออกแบบการเขียนโปรแกรม ก็จัดเก็บ source code อย่างเป็นระบบระเบียบ รวมทั้งออกแบบระบบทดสอบด้วย Github / Github Actions
  • Deploy โปรแกรมตัวอย่าง (pilot program / show case / MVP - minimum viable product) เพื่อโชว์ผลงานให้คนทั่วไปใช้งานง่ายๆ โดยเพิ่มโค้ดไม่กี่บรรทัด รวมทั้งไม่ต้องจดโดเมนและเช่า server ใดๆ ด้วย free hosting ที่ Streamlit หรือ Huggingface Space
  • ** (ที่จะเล่าวันนี้) แทร็คผลการทดลองในการพัฒนาโมเดลอย่างเป็นระบบ (เช่น เปรียบเทียบ loss curves ของแต่ละ parameter settings เพื่อหาโมเดลที่ดีที่สุด) รวมทั้งสร้าง reports ของการพัฒนาโมเดลนั้นๆ เพื่อ communicate กับเพื่อนร่วมทีม ด้วย WandB.ai (Weight and Bias) ซึ่งฟรี สำหรับการใช้งานส่วนตัว (เก็บเงินสำหรับการทำงานระดับทีมในบริษัท)

 

สำหรับการใช้งาน 3 ทหารเสือ Kaggle + Colab + Github ดูบทความเลื่อนไปด้านบนกระทู้ครับ

 

แนะนำการใช้งาน Streamlit ง่ายๆ พร้อมตัวอย่างบน Colab

https://thaikeras.com/community/main-forum/streamlit/

 

.

 

WandB ทำอะไรได้บ้าง?

WandB.ai (Weights and Biases) เป็นอีก 1 startup มาแรงในวงการ AI / Data Science ที่มี features ต่างๆ ดังต่อไปนี้

 

  1. บันทึก log ผลการทดลองของโมเดลมาเก็บไว้เพื่อเปรียบเทียบอย่างเป็นระบบบน Cloud (รูปที่ 1)

รูปที่ 1

มี features มากมายในรูปที่ 1 ที่ช่วยให้เราวิเคราะห์การทดลองของเราได้อย่างยอดเยี่ยม อาทิเช่น

  • แทร็คได้หลาย loss metrics พร้อมๆ กัน รวมทั้งได้ทั้ง train, validation และ test datasets
  • เลือกการทดลองเฉพาะที่สนใจมาวิเคราะห์ (ในรูปเลือกมา 3 จาก 14)
  • Interactive smoothing curve นั่นคือเปลี่ยน loss curve จริงที่แกว่งขึ้นลงมาก (สังเกตในภาพบนเส้นจาง) ทำ moving average โดยอัตโนมัติ ทำให้เปรียบเทียบภาพรวมได้ง่าย
  • Interactive zoom เข้าไปดูเฉพาะช่วง epochs ที่เราสนใจได้
  • ใช้ได้กับทุก platforms / APIs / libraries ชื่อดัง เช่น TensorFlow, Keras, Pytorch, Lightning (แทร็คผสมกันข้าม platforms ได้ สำหรับการเปรียบเทียบโมเดลจากหลาย platforms)

 

ทั้งหมดนี้ทำให้เราเข้าใจผลกระทบของ parameters ต่างๆ ที่เราเซ็ตในแต่ละการทดลองของโมเดล ซึ่งที่เป็นประโยชน์สูงสุดคือจะช่วยให้เราเข้าใจว่าพารามิเตอร์แต่ละตัวควรจะกำหนดอยู่ในช่วงไหนถึงจะเหมาะสมที่สุดโดยรวม นอกจากนี้ยังเปรียบเทียบ metrics เหล่านี้ของโมเดลที่ต่างกันบน resources เดียวกันได้ง่ายอีกด้วยครับ

 

2. เก็บ Dataset ส่วนตัวได้ฟรี 100GB ภายใตัชื่อ "WandB Artifacts" ซึ่งจะช่วยทำ Dataset Versioning ให้ด้วย ใช้ควบคู่กับ Kaggle Datasets ได้ (เมื่อใช้ร่วมกันทำให้เราสามารถได้พื้นที่ส่วนตัวฟรีๆ ถึง 200GB)

 

3. สร้าง report เพื่อใช้สื่อสารกับเพื่อนร่วมทีม หรือเป็น blog ส่วนตัวให้ผู้อ่านทั่วไป ดูตัวอย่าง blog เจ๋งๆ ที่สร้างบน WandB ที่รวม experiments ต่างๆ ที่นี่

https://docs.wandb.ai/guides/reports

 

แม้แต่ทีม OpenAI ก็ใช้ WandB report ในการสื่อสารผลการทดลองและแนวทางการพัฒนาต่อเนื่องครับ : https://wandb.ai/openai/published-work/Learning-Dexterity-End-to-End--VmlldzoxMTUyMDQ

 

  นอกจากนั้น WandB ยังมีฟีเจอร์เด็ดๆ อย่างอื่น ซึ่งผมเองก็ยังไม่ได้ใช้จริงจัง คือ

4. Hyperparameters optimization

5. Data Visualization

ซึ่งสามารถทำได้บน cloud และบันทึกใน WandB report ได้อีกด้วย (เช่นรูปที่ 2 และตัวอย่างการใช้งานร่วมกับ colab https://colab.research.google.com/github/wandb/examples/blob/master/colabs/datasets-predictions/Image_Classification_with_Tables.ipynb )

รูปที่ 2

ดูเพิ่มเติมได้ที่ https://docs.wandb.ai/ ครับ

 

.

 

วิธีการใช้งาน WandB อย่างปลอดภัยบน Kaggle Public Notebook

ก่อนอื่นสมัคร free account ที่ wandb.ai จากนั้นเข้าไปดู API Key ประจำตัวใน account ของเรา

 

ในการใช้งาน WandB บน Colab หรือ Kaggle เราต้องใช้ WandB API key ส่วนตัว ซึ่งอาจทำให้แชร์เป็น public notebook ไม่สะดวก อย่างไรก็ดี บน Kaggle notebook มีเมนูที่ชื่อว่า Kaggle Secrets ที่ทำให้เราเซพ API Keys ต่างๆ ไว้ในระบบ kaggle notebook server ได้ โดยกดที่แทบเมนูด้านบนดังนี้

 

Add-ons --> Secrets --> "Add a new secret"

 

จากนั้นเราเพียงพิมพ์ชื่อ secrets และ API keys ส่วนตัวของเราเก็บไว้ (ใช้เก็บได้ทั้ง Github / Kaggle / WandB private API keys) - ดูรูปที่ 3

รูปที่3

และสามารถเรียกใช้ keys ต่างๆ ได้ง่ายๆ บน Kaggle notebook ด้วยคำสั่งต่อไปนี้


import os

from kaggle_secrets import UserSecretsClient

user_secrets = UserSecretsClient()

secret_value_0 = user_secrets.get_secret("wandb")




os.environ["WANDB_API_KEY"] = secret_value_0

 

ตัว key ของเราก็จะมาอยู่ในตัวแปร secret_value_0 โดยที่ไม่ต้องโชว์ key ตัวจริงให้ public readers

.

 

ตัวอย่างการใช้ WandB บน Keras และ Pytorch Lightning

-----------------------

สามารถใช้งานง่ายๆ โดยเพิ่มโค้ดไม่กี่บรรทัดครับ

ก่อนอื่นก็  import wandb ก่อนแล้วก็

 

** Keras **


     from wandb.keras import WandbCallback




    wandb.init(project= PROJ_NAME, name=WANDB_NAME)

    wandb_callback = WandbCallback()

   

    model.fit(…, callbacks=[other_callbacks, …, wandb_callback])</pre>
<p>

** Pytorch-lightning **

</p>
<pre>   from pytorch_lightning.loggers import WandbLogger

    wandb_logger = WandbLogger(name=experiment_name,project=project_name)

  

    trainer = Trainer( …, logger=wandb_logger)

    trainer.fit(…)</pre>
<p>

เพียงเท่านี้ experimental log ก็จะไปปรากฏใน wandb page ส่วนตัวของเรา

วิธีการใช้งานก็ง่ายๆ เช่นนี้ หวังว่า wandb จะช่วยให้เพื่อนๆ พัฒนาโมเดลได้ง่ายและดียิ่งขึ้นนะครับ 🙂

This post was modified 2 years ago by The Neural Engineer

   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

เลือก GPU ฟรี/ถูกปี 2023 ทางเลือกอื่นนอกจาก Colab และ Kaggle

https://thaikeras.com/community/postid/783/


   
ตอบกลับอ้างอิง
Share: