มีโอกาสคุยกับกลุ่มในสาย 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 ที่ต้องการใช้คือ

  • numpy
  • scipy
  • scikit-learn

ทำการกำหนด library เหล่านี้ไว้ในไฟล์ชื่อว่า 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

เรายังขาดไฟล์ app.py ซึ่งเป็น code ทำงานของเรานั่นเอง
ตรงนี้เอาที่สบายใจเลย

เมื่อทุกอย่างเรียบร้อย ทำการสร้าง image จาก Dockerfile
และสร้าง container เพื่อทำงานตามที่ต้องการ ดังนี้

$docker image build -t my_python_3 .
$docker container run --rm my_python_3:latest

เพียงเท่านี้ก็สามารถทำงานได้แล้ว
ง่ายมาก ๆ แต่ที่เหลือยากหมดเลย !!!

ขอยกตัวอย่าง Docker image ที่น่าสนจาก Kaggle

ประกอบไปด้วย

แต่ขนาดของ Docker image เหล่านี้จะมีขนาดใหญ่มาก ๆ
เนื่องจากมี library ต่าง ๆ เพียบนะครับ
ยกตัวอย่างเช่น kaggle/python มีขนาดกว่า 900 MB
ดังนั้นใช้งานแบบมีสตินะครับ

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

แต่สิ่งที่สำคัญคือ
ตอบรับกับความต้องการหรือการเปลี่ยนแปลงได้รวดเร็วเพียงใด
ลดผลกระทบจากการเปลี่ยนแปลงให้น้อยหรือไม่เกิดเลยได้อย่างไร

ขอให้สนุกกับการ coding ครับ