มีโอกาสคุยกับกลุ่มในสาย Data Science พบว่า
ปัญหาหลัก ๆ ของคนกลุ่มนี้คือ เรื่องการจัดการ environment ที่ใช้งาน
ประกอบไปด้วย
- ปัญหาในการติดตั้ง software
- ปัญหาในการติดตั้ง library หรือ dependency ต่าง ๆ
- ปัญหาในการ configuration และ setting ค่าต่าง ๆ
ทำให้ขั้นตอนการวิเคราะห์ข้อมูลมันช้าอย่างมาก
บางคนใช้ได้ บางคนใช้ไม่ได้
บางองค์กรต้องรอให้ฝ่าย IT มาทำการติดตั้งให้
ถ้าขั้นตอนการทำงานช้า ก็รอกันต่อไป
หรือแม้แต่การนำเครื่องมือใหม่ ๆ มาใช้ ก็ยากเย็นเหลือเกิน
บางครั้งทำเองได้ แต่ก็ลืม
ลืมขั้นตอนการติดตั้งและ configuration
ลืม configuration ค่าต่าง ๆ ที่ไปหาจาก internet !!
บ่อยครั้งพบว่า library ต่าง ๆ ที่ใช้
ไม่ได้ update version ใหม่ ๆ มาใช้เลย
บางคนใช้ version เก่า ๆ มาเป็นปี ๆ !!
เราทำงานเป็นทีม Data Science นะ
แต่ว่า ... แต่ละคนต่างคนต่างทำ
OS ที่ใช้งานต่างกัน
เครื่องมือที่ใช้ต่างกัน หรือถ้าเหมือนกัน แต่ configuration ต่างกัน
หรือทำไปเปลี่ยนไป
หรือไม่สามารถ run งานเก่า ๆ ได้เลย
เนื่องจาก environment ต่าง ๆ มันเปลี่ยนไปหมดแล้ว
ผลที่ตามมาแล้วจะทำอย่างไรละ ?
ต้องทิ้งงานนั้นกันไปหรืออย่างไร ?
ยิ่งรับสมาชิกใหม่เข้ามาในทีมยิ่งลำบาก
เพราะว่า เพียงแค่การติดตั้ง environment ให้เริ่มทำงานได้ก็ยากแล้ว
บางคนถึงขั้นถอดใจ ออกดีกว่า
สุดท้ายถ้าทำการ update/upgrade สิ่งต่าง ๆ แล้ว
ไม่รู้เลยว่ามันส่งผลกระทบต่อส่วนการทำงานใดบ้าง
ดังนั้นก็วนกลับไปเรื่องเดิมคือ ไม่ต้องทำอะไร มันทำงานได้ !!
บริษัทต่าง ๆ เขาแก้ไขปัญหานี้อย่างไรกันนะ ?
เท่าที่คุยมาก็มีอยู่ 2 แบบคือ
- แบบที่ 1 ใครอยากทำอะไร ติดตั้งอะไรก็ทำไปเลย ง่ายนะ เร็วด้วย แต่ว่าต่างคนก็ต่างไปคนละทาง
- แบบที่ 2 บริษัททำการควบคุมทุกอย่าง ลงได้เท่าที่กำหนดเท่านั้น ทำให้ฝ่าน IT ควบคุมได้หมด แต่สำหรับคนใช้มันยากต่อการเปลี่ยนแปลงมาก ๆ
ไม่ว่าแบบไหนก็มีปัญหากันไปคนละแบบ
แต่ก็ไม่ได้แก้ไขปัญหาให้หมดไป
ดังนั้นมีวิธีการอื่น ๆ อีกไหมละ ?
หนึ่งในวิธีการที่ขอแนะนำคือ Docker
ยิ่งที่โลกของ Data Science ยิ่งต้องใช้กัน
เนื่องจากมีเครื่องมือ และ library ต่าง ๆ เป็นจำนวนมาก
ถ้าเรามีชุดเครื่องมือเตรียมไว้ให้ทั้งหมด
จากนั้นแต่ละคนก็นำสิ่งที่เตรียมไว้ไปใช้งาน
น่าจะลดปัญหาไปได้เยอะ และน่าจะเริ่มงานได้อย่างรวดเร็ว
ปัญหาที่มักเจอเช่น Python 2.7 vs 3.x
คำถามคือ ลำบากไหมที่ต้องสลับ version ของ Python ไปมา !!
เลยยกตัวอย่างของการนำ Docker มาแก้ไขปัญหาเหล่านี้นิดหน่อย
เริ่มด้วยการสร้าง Docker Image สำหรับ Python 3 ขึ้นมาก่อน
มี library ที่ต้องการใช้คือ
ทำการกำหนด library เหล่านี้ไว้ในไฟล์ชื่อว่า requirements.txt
[gist id="e5bf51998c094843bcce62818defb2e2" file="requirements.txt"]
ทำการสร้าง Dockerfile ไว้ใช้สำหรับสร้าง Docker Image
มีขั้นตอนดังนี้
- เลือก base image เป็น Python 3.6.8
- กำหนด working directory
- ทำการ copy ไฟล์ requirements.txt เข้าไป
- ทำการ copy ไฟล์ทั้งหมดเข้าไป
- ทำการติดตั้ง library ต่าง ๆ ที่กำหนดไว้ในไฟล์ requirement.txt
- กำหนดให้ทำการ run คำสั่ง python app.py เพื่อทดสอบไฟล์ที่เราต้องการนั่นคือ app.py
[gist id="e5bf51998c094843bcce62818defb2e2" file="Dockerfile"]
เรายังขาดไฟล์ app.py ซึ่งเป็น code ทำงานของเรานั่นเอง
ตรงนี้เอาที่สบายใจเลย
เมื่อทุกอย่างเรียบร้อย ทำการสร้าง image จาก Dockerfile
และสร้าง container เพื่อทำงานตามที่ต้องการ ดังนี้
[code]
$docker image build -t my_python_3 .
$docker container run --rm my_python_3:latest
[/code]
เพียงเท่านี้ก็สามารถทำงานได้แล้ว
ง่ายมาก ๆ แต่ที่เหลือยากหมดเลย !!!
ขอยกตัวอย่าง Docker image ที่น่าสนจาก Kaggle
ประกอบไปด้วย
แต่ขนาดของ Docker image เหล่านี้จะมีขนาดใหญ่มาก ๆ
เนื่องจากมี library ต่าง ๆ เพียบนะครับ
ยกตัวอย่างเช่น kaggle/python มีขนาดกว่า 900 MB
ดังนั้นใช้งานแบบมีสตินะครับ
เพียงนำสิ่งเหล่านี้ไปใช้ ก็สามารถเริ่มในสิ่งที่ต้องการได้แล้ว
ถ้าใครไม่พอใจ ก็นำไปแก้ไขหรือสร้างใหม่ให้กับทีมได้เลยครับ
แต่สิ่งที่สำคัญคือ
ตอบรับกับความต้องการหรือการเปลี่ยนแปลงได้รวดเร็วเพียงใด
ลดผลกระทบจากการเปลี่ยนแปลงให้น้อยหรือไม่เกิดเลยได้อย่างไร
ขอให้สนุกกับการ coding ครับ