Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

Docker สำหรับ Data Science

$
0
0

มีโอกาสคุยกับกลุ่มในสาย 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 [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 ครับ

Viewing all articles
Browse latest Browse all 1997

Trending Articles