จากสมุดบันทึกไปจนถึงไปป์ไลน์ Kubeflow ด้วย MiniKF และเคล

1. บทนำ

Kubeflow เป็นชุดเครื่องมือแมชชีนเลิร์นนิงสำหรับ Kubernetes โปรเจ็กต์นี้มีวัตถุประสงค์เพื่อให้การติดตั้งใช้งานเวิร์กโฟลว์ของแมชชีนเลิร์นนิง (ML) บน Kubernetes มีความเรียบง่าย พกพาได้ และรองรับการปรับขนาด โดยมีเป้าหมายเพื่อนำเสนอวิธีที่ตรงไปตรงมาในการทำให้ระบบโอเพนซอร์สที่ดีที่สุดสำหรับ ML ใช้งานได้กับโครงสร้างพื้นฐานที่หลากหลาย

การติดตั้งใช้งาน Kubeflow มีลักษณะอย่างไร

การติดตั้งใช้งาน Kubeflow

  • แบบพกพา - ทำงานได้กับคลัสเตอร์ Kubernetes ใดก็ได้ ไม่ว่าจะใช้งานบน Google Cloud Platform (GCP), ภายในองค์กร หรือจากผู้ให้บริการหลายราย
  • รองรับการปรับขนาด - ใช้ประโยชน์จากทรัพยากรที่ผันผวนได้และถูกจำกัดโดยจำนวนทรัพยากรที่จัดสรรไปยังคลัสเตอร์ Kubernetes เท่านั้น
  • เขียนได้ - เพิ่มประสิทธิภาพด้วย Service Worker เพื่อให้ทำงานแบบออฟไลน์หรือเครือข่ายที่มีคุณภาพต่ำ

ซึ่งเป็นวิธีจัดระเบียบ Microservice ที่มีการเชื่อมต่อแบบหลวมๆ ให้เป็นหน่วยเดียวและทำให้ใช้งานได้ในหลากหลายสถานที่ ไม่ว่าจะเป็นแล็ปท็อปหรือระบบคลาวด์

Codelab นี้จะแนะนำวิธีสร้างการติดตั้งใช้งาน Kubeflow ของคุณเองโดยใช้ MiniKF และเรียกใช้เวิร์กโฟลว์ Kubeflow Pipelines จากภายในสมุดบันทึก Jupyter

สิ่งที่คุณจะสร้าง

ใน Codelab นี้ คุณจะได้สร้างไปป์ไลน์วิทยาศาสตร์ข้อมูลที่ซับซ้อนด้วย Kubeflow Pipelines โดยไม่ต้องใช้คำสั่ง CLI หรือ SDK โดยไม่จำเป็นต้องมีความรู้เกี่ยวกับ Kubernetes หรือ Docker เมื่อดำเนินการเสร็จสมบูรณ์แล้ว โครงสร้างพื้นฐานของคุณจะประกอบด้วย:

  • VM ของ MiniKF (Mini Kubeflow) ที่ติดตั้งโดยอัตโนมัติ
  • Kubernetes (โดยใช้ Minikube)
  • Kubeflow
  • Kale ซึ่งเป็นเครื่องมือในการแปลงสมุดบันทึก Jupyter อเนกประสงค์เป็นเวิร์กโฟลว์ Kubeflow Pipelines ( GitHub)
  • Arrikto Rok สำหรับการกำหนดเวอร์ชันและการทำซ้ำของข้อมูล

สิ่งที่คุณจะได้เรียนรู้

  • วิธีติดตั้ง Kubeflow กับ MiniKF
  • วิธีแปลงสมุดบันทึก Jupyter เป็นไปป์ไลน์ Kubeflow โดยไม่ต้องใช้คำสั่งหรือ SDK ของ CLI
  • วิธีเรียกใช้ไปป์ไลน์ Kubeflow จากภายในสมุดบันทึกด้วยการคลิกเพียงปุ่มเดียว
  • วิธีสร้างเวอร์ชันข้อมูลในสมุดบันทึกโดยอัตโนมัติและในทุกขั้นตอนของไปป์ไลน์

สิ่งที่คุณต้องมี

นี่คือ Codelab ขั้นสูงที่เน้น Kubeflow ดูข้อมูลเบื้องต้นเพิ่มเติมและข้อมูลเบื้องต้นเกี่ยวกับแพลตฟอร์มได้ในเอกสารประกอบข้อมูลเบื้องต้นเกี่ยวกับ Kubeflow แนวคิดและโค้ดบล็อกที่ไม่เกี่ยวข้องจะปรากฎขึ้นและเพื่อให้คุณคัดลอกและวางได้อย่างง่ายดาย

2. ตั้งค่าสภาพแวดล้อม

ตั้งค่ารหัสโปรเจ็กต์ GCP และชื่อคลัสเตอร์

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

เปิดคอนโซล GCP

3fdc4329995406a0.png

หากยังไม่ได้เลือกโปรเจ็กต์ ให้คลิกเลือกโปรเจ็กต์

e8952c0b96067dea.png

แล้วเลือกโปรเจ็กต์ คุณควรมีข้อมูลต่อไปนี้เพียงรายการเดียวเท่านั้น

fe25c1925487142.png

3. ติดตั้ง MiniKF

สร้างอินสแตนซ์ Compute

ใน GCP Marketplace ให้ค้นหา "MiniKF"

เลือกเครื่องเสมือน MiniKF โดย Arrikto

d6b423c1911ea85a.png

คลิกปุ่มเปิดใช้งานบน Compute Engine แล้วเลือกโปรเจ็กต์

b5eeba43053db4bd.png

ในส่วนกำหนดค่าและ ทำให้หน้าต่างใช้งานได้ เลือกชื่อสำหรับอินสแตนซ์ MiniKF และปล่อยตัวเลือกเริ่มต้นไว้ จากนั้นคลิกปุ่มทำให้ใช้งานได้

dc401e2bb5a884d9.png

รอให้อินสแตนซ์ MiniKF Compute เริ่มทำงาน

5228086caadc44c6.png

ลงชื่อเข้าสู่ระบบ MiniKF

เมื่อ MiniKF VM พร้อมใช้งานแล้ว ให้เชื่อมต่อและเข้าสู่ระบบโดยคลิกปุ่ม SSH ทำตามวิธีการบนหน้าจอเพื่อเรียกใช้คำสั่ง minikf ซึ่งจะเริ่มการติดตั้งใช้งาน Minikube, Kubeflow และ Rok ซึ่งอาจใช้เวลาดำเนินการสักครู่

774e83c3e96cf7b3.png

เข้าสู่ระบบ Kubeflow

เมื่อติดตั้งเสร็จแล้วและพ็อดทั้งหมดพร้อมแล้ว ให้ไปที่หน้าแดชบอร์ด MiniKF เข้าสู่ระบบ Kubeflow โดยใช้ชื่อผู้ใช้และรหัสผ่าน MiniKF

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

ผู้ใช้ Chrome จะเห็นหน้าจอนี้

6258e0f09e46a6c2.png

ผู้ใช้ Firefox จะเห็นหน้าจอนี้:

8cff90ce2f0670bd.png

ผู้ใช้ Safari จะเห็นหน้าจอนี้

1c6fd768d71c0a92.png

เข้าสู่ระบบ Rok

หลังจากเข้าสู่ระบบ Kubeflow แล้ว ให้เปิดเมนูด้านซ้ายโดยคลิกไอคอนแฮมเบอร์เกอร์ ไปที่ Snapshot Store แล้วเข้าสู่ระบบ Rok ด้วยชื่อผู้ใช้และรหัสผ่าน MiniKF

a683198ac4ba900d.png

80aad6ba5d298a7e.png

ยินดีด้วย คุณทำให้ MiniKF ใช้งานได้บน GCP เรียบร้อยแล้ว ตอนนี้คุณสร้างสมุดบันทึก เขียนโค้ด ML และเรียกใช้ Kubeflow Pipelines ได้แล้ว ใช้ Rok สำหรับการกำหนดเวอร์ชันของข้อมูลและการทำซ้ำ

4. เรียกใช้ไปป์ไลน์จากใน Notebook ของคุณ

ในส่วนนี้ คุณจะได้สัมผัสตัวอย่างเรือไททานิก ซึ่งเป็นการแข่งขัน Kaggle ที่คาดการณ์ว่าผู้โดยสารคนใดรอดชีวิตจากเหตุการณ์เรือไททานิกอับปางได้

สร้างเซิร์ฟเวอร์ของสมุดบันทึก

ไปที่ลิงก์เซิร์ฟเวอร์สมุดบันทึกบนแดชบอร์ด Kubeflow Central

4115cac8d8474d73.png

คลิกเซิร์ฟเวอร์ใหม่

f9303c0a182e47f5.png

ระบุชื่อสำหรับเซิร์ฟเวอร์สมุดบันทึกของคุณ

a2343f30bc9522ab.png

ตรวจสอบว่าคุณได้เลือกรูปภาพนี้แล้ว

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

เพิ่มปริมาณข้อมูลใหม่ที่ว่างเปล่าขนาด 5GB และตั้งชื่อเป็น data

8544d9b05826b316.png

คลิกเปิดเพื่อสร้างเซิร์ฟเวอร์สมุดบันทึก

28c024bcc55cc70a.png

เมื่อเซิร์ฟเวอร์สมุดบันทึกพร้อมใช้งาน ให้คลิกเชื่อมต่อเพื่อเชื่อมต่อ

2f06041475f45d3.png

ดาวน์โหลดข้อมูลและสมุดบันทึก

แท็บใหม่จะเปิดขึ้นพร้อมหน้า Landing Page ของ JupyterLab สร้างเทอร์มินัลใหม่ใน JupyterLab

2482011174f7bc75.png

ในหน้าต่างเทอร์มินัล ให้เรียกใช้คำสั่งเหล่านี้เพื่อไปยังโฟลเดอร์ข้อมูล และดาวน์โหลดสมุดบันทึกและข้อมูลที่คุณจะใช้สำหรับส่วนที่เหลือของห้องทดลอง

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

ที่เก็บนี้ประกอบด้วยชุดตัวอย่างที่มีการดูแลจัดการพร้อมข้อมูลและสมุดบันทึกที่มีคำอธิบายประกอบ ไปที่โฟลเดอร์ data/examples/titanic-ml-dataset/ ในแถบด้านข้าง และเปิดสมุดบันทึก titanic_dataset_ml.ipynb

c85baf68b36c63b2.png

สำรวจโค้ด ML ในชาเลนจ์เรือไททานิก

เรียกใช้สมุดบันทึกทีละขั้นตอน โปรดทราบว่าโค้ดล้มเหลวเนื่องจากไม่มีไลบรารี

bf2451fd7407e334.png

กลับไปที่เทอร์มินัลและติดตั้งไลบรารีที่ขาดหายไป

pip3 install --user seaborn

d90593b21425dd12.png

รีสตาร์ทเคอร์เนลของสมุดบันทึกโดยคลิกไอคอนรีเฟรช

a21f5f563b36ce4d.png

เรียกใช้เซลล์อีกครั้งด้วยการติดตั้งไลบรารีที่ถูกต้องและดูการทำงานสำเร็จ

แปลงสมุดบันทึกเป็นไปป์ไลน์ Kubeflow

เปิดใช้ Kale โดยคลิกไอคอน Kubeflow ในแผงด้านซ้าย

3f4f9c93b187b105.png

สำรวจทรัพยากร Dependency ต่อเซลล์ ดูว่าหลายเซลล์เป็นส่วนหนึ่งของขั้นตอนไปป์ไลน์เดียวได้อย่างไร และวิธีที่ขั้นตอนของไปป์ไลน์อาจขึ้นอยู่กับขั้นตอนก่อนหน้า

15cca32444c1f12e.png

คลิกปุ่มคอมไพล์และเรียกใช้

bde5cef34f00e258.png

ดูความคืบหน้าของสแนปชอต

9408f46abb2493f5.png

ดูความคืบหน้าของการเรียกใช้ไปป์ไลน์

9edbde68032f5e4b.png

คลิกลิงก์เพื่อไปยัง UI ไปป์ไลน์ Kubeflow และดูการเรียกใช้

a81646a22584e1b9.png

โปรดรอให้การดำเนินการเสร็จสมบูรณ์

44bee7dc0d24ec21.png

d377b6d574a4970.png

ยินดีด้วย คุณเพิ่งเรียกใช้ Kubeflow Pipeline ตั้งแต่ต้นจนจบโดยเริ่มต้นจากสมุดบันทึก

5. ความสามารถในการทำซ้ำด้วยสแนปชอตของวอลุ่ม

ตรวจสอบผลลัพธ์

ดูบันทึกสำหรับผลลัพธ์ของขั้นตอนที่ 2 ถึงขั้นสุดท้ายในบันทึก โปรดสังเกตว่าตัวคาดการณ์ทั้งหมดแสดงคะแนนเป็น 100% นักวิทยาศาสตร์ข้อมูลที่มากประสบการณ์จะดูน่าสงสัยทันที ข้อมูลนี้เป็นตัวชี้วัดที่ดีว่าโมเดลของเราไม่ได้แปลงเป็นข้อมูลทั่วไป แต่กลับมีชุดข้อมูลการฝึกมากเกินไป ซึ่งน่าจะเกิดจากปัญหาเกี่ยวกับข้อมูลที่โมเดลใช้

2a594032c2dd6ff6.png

จำลองสถานะก่อนหน้า

โชคดีที่ Rok จะดูแลการกำหนดเวอร์ชันข้อมูลและจำลองสภาพแวดล้อมทั้งหมดให้เหมือนกับที่คุณคลิกปุ่มคอมไพล์และเรียกใช้ วิธีนี้ทำให้คุณมีเครื่องย้อนเวลาสำหรับข้อมูลและโค้ด มาทำให้สถานะของไปป์ไลน์กลับมาทำงานอีกครั้งกันก่อนที่จะฝึกโมเดล 1 โมเดลและดูว่าเกิดอะไรขึ้น ลองดูขั้นตอน randomforest จากนั้นคลิกอาร์ติแฟกต์

4f25ca4560711b23.png

ทำตามขั้นตอนในมาร์กดาวน์ กล่าวคือ ดูภาพรวมใน Rok UI โดยคลิกลิงก์ที่เกี่ยวข้อง

e533bc781da9355a.png

คัดลอก URL ของ Rok

d155d19731b5cedd.png

ไปที่ลิงก์เซิร์ฟเวอร์สมุดบันทึก

aafeab01f3ef0863.png

คลิกเซิร์ฟเวอร์ใหม่

f2265a64e8f9d094.png

วาง URL ของ Rok ที่คัดลอกไว้ก่อนหน้านี้แล้วคลิกปุ่มป้อนข้อความอัตโนมัติ

9ba4d4128a3bdeea.png

ระบุชื่อให้สมุดบันทึก

7685c3bf35fc74b2.png

ตรวจสอบว่าคุณได้เลือกรูปภาพนี้แล้ว

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

คลิกเปิดเพื่อสร้างเซิร์ฟเวอร์สมุดบันทึก

28c024bcc55cc70a.png

เมื่อเซิร์ฟเวอร์สมุดบันทึกพร้อมใช้งาน ให้คลิกเชื่อมต่อเพื่อเชื่อมต่อ

34955a64ae316de1.png

โปรดทราบว่าสมุดบันทึกจะเปิดขึ้นในเซลล์ของขั้นตอนไปป์ไลน์ที่คุณสร้างขึ้น

a1f7c81f349e0364.png

ในเบื้องหลัง Kale ได้ทำให้สมุดบันทึกกลับมาทำงานอีกครั้งด้วยการนำเข้าไลบรารีทั้งหมดและโหลดตัวแปรจากขั้นตอนก่อนหน้า

แก้ไขข้อบกพร่องสถานะก่อนหน้า

เพิ่มคำสั่งพิมพ์ลงในเซลล์นี้

print(acc_random_forest)

เรียกใช้เซลล์ที่ใช้งานอยู่โดยกด Shift + Return เพื่อฝึกฟอเรสต์แบบสุ่มอีกครั้งและพิมพ์คะแนน เท่ากับ 100

e2a8a3b5465fcb5d.png

ตอนนี้ถึงเวลาดูว่ามีสิ่งแปลกๆ ในข้อมูลการฝึกหรือไม่ หากต้องการสำรวจและแก้ไขปัญหานี้ ให้เพิ่มเซลล์เหนือเครื่องหมาย Random Forest โดยเลือกเซลล์ก่อนหน้า แล้วคลิกไอคอนบวก (+)

d1077f32dff9620f.png

เพิ่มข้อความต่อไปนี้และเรียกใช้เซลล์เพื่อพิมพ์ชุดการฝึก

train_df

2854798ff01aed4e.png

อ๊ะ คอลัมน์ที่มีป้ายกำกับการฝึก ("รอดแล้ว") รวมอยู่ในฟีเจอร์อินพุตด้วยความผิดพลาด โมเดลได้เรียนรู้วิธีเน้นที่ "การรอดชีวิต" ทำงานแบบไม่ต้องสนใจเนื้อหาที่เหลือ ซึ่งจะก่อให้เกิดมลพิษต่ออินพุต คอลัมน์นี้ตรงกับเป้าหมายของโมเดลทุกประการและไม่ปรากฏระหว่างการคาดการณ์ ดังนั้นจึงต้องนำออกจากชุดข้อมูลการฝึกเพื่อให้โมเดลเรียนรู้จากฟีเจอร์อื่นๆ

เพิ่มแก้ไขข้อบกพร่อง

หากต้องการนำคอลัมน์นี้ออก ให้แก้ไขเซลล์เพื่อเพิ่มคำสั่งนี้

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

เปิดใช้ Kale และตรวจสอบว่าเซลล์ที่นําป้ายกำกับ Survived ออกเป็นส่วนหนึ่งของขั้นตอนไปป์ไลน์ featureengineering (ควรมีสีโครงร่างเดียวกัน)

เรียกใช้ไปป์ไลน์อีกครั้งโดยคลิกปุ่มคอมไพล์และเรียกใช้

คลิกลิงก์เพื่อไปยัง UI ไปป์ไลน์ Kubeflow และดูการเรียกใช้

รอให้ขั้นตอนผลลัพธ์เสร็จสมบูรณ์ และดูบันทึกเพื่อดูผลลัพธ์สุดท้าย ตอนนี้คุณมีคะแนนการคาดการณ์ที่สมจริงแล้ว

8c6a9676b49e5be8.png

6. ล้างข้อมูล

ทำลาย MiniKF VM

ไปที่เครื่องมือจัดการการทำให้ใช้งานได้ในคอนโซล GCP และลบการทำให้ใช้งานได้ minikf-1

7. ขอแสดงความยินดี

ยินดีด้วย คุณใช้เวิร์กโฟลว์วิทยาศาสตร์ข้อมูลแบบครบวงจรโดยใช้ Kubeflow (MiniKF), Kale และ Rok สำเร็จแล้ว

สิ่งที่ต้องทำต่อไป

เข้าร่วมชุมชน Kubeflow

อ่านเพิ่มเติม