จากสมุดบันทึกสู่ไปป์ไลน์ Kubeflow กับ HP Tuning: A Data Science Journey

1. บทนำ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ตั้งค่าโปรเจ็กต์ GCP

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

สร้างโปรเจ็กต์ใหม่หรือเลือกโปรเจ็กต์ที่มีอยู่

99b103929d928576.png

ตรวจสอบข้อกำหนดขั้นต่ำต่อไปนี้

โปรดดูรายละเอียดการตั้งค่าโปรเจ็กต์ GCP ในเอกสารประกอบของ GCP

หลังจากตั้งค่าโปรเจ็กต์ GCP แล้ว ให้ไปที่วิธีการติดตั้ง MiniKF โดยตรง

เปิดโปรเจ็กต์ GCP ที่จัดสรรไว้ล่วงหน้า

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

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. ติดตั้ง MiniKF

สร้างอินสแตนซ์การคำนวณรวมถึง MiniKF

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

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

d6b423c1911ea85a.png

คลิกปุ่มเปิด แล้วเลือกโปรเจ็กต์

7d07439db939b61c.png

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

7d5f7d17a80a1930.png

รอให้อินสแตนซ์การประมวลผล MiniKF บูตขึ้น

5228086caadc44c6.png

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

เมื่อ VM ของ MiniKF พร้อมทำงาน ให้เชื่อมต่อและเข้าสู่ระบบโดยคลิกปุ่ม 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 แล้ว ให้เปิดเมนูด้านซ้ายโดยคลิกไอคอนเมนู 3 ขีด คลิกสแนปชอต แล้วเข้าสู่ระบบ Rok โดยใช้ชื่อผู้ใช้และรหัสผ่านของ MiniKF

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

4. เรียกใช้ไปป์ไลน์จากภายใน Notebook

ในส่วนนี้ คุณจะได้เรียกใช้ตัวอย่างการระบุสายพันธุ์สุนัข ซึ่งเป็นโปรเจ็กต์ใน AI Nanodegree ของ Udacity เมื่อได้รับรูปภาพสุนัข โมเดลสุดท้ายจะประมาณสายพันธุ์ของสุนัข

สร้างเซิร์ฟเวอร์ Notebook ในคลัสเตอร์ Kubeflow

ไปที่ลิงก์ Notebooks ในแดชบอร์ดส่วนกลางของ Kubeflow

60825e935fd0f39b.png

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

f9303c0a182e47f5.png

ระบุชื่อสำหรับเซิร์ฟเวอร์ Notebook

a2343f30bc9522ab.png

ตรวจสอบว่าคุณได้เลือกอิมเมจ Docker ต่อไปนี้ (โปรดทราบว่าแท็กอิมเมจอาจแตกต่างกัน)

gcr.io/arrikto/jupyter-kale:f20978e

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

8544d9b05826b316.png

คลิกเปิดใช้เพื่อสร้างเซิร์ฟเวอร์ Notebook

28c024bcc55cc70a.png

เมื่อเซิร์ฟเวอร์ Notebook พร้อมใช้งาน ให้คลิกเชื่อมต่อเพื่อเชื่อมต่อ

52f1f8234988ceaa.png

ดาวน์โหลดข้อมูลและ Notebook

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

ab9ac96f1a1f0d09.png

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

cd data/
git clone https://github.com/kubeflow-kale/kale

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

ในแถบด้านข้าง ให้ไปที่โฟลเดอร์ data/kale/examples/dog-breed-classification/ แล้วเปิดสมุดบันทึก dog-breed.ipynb

2bc436465522f65b.png

สำรวจโค้ด ML ของตัวอย่างการระบุสายพันธุ์สุนัข

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

เรียกใช้เซลล์ imports เพื่อนำเข้าไลบรารีที่จำเป็นทั้งหมด โปรดทราบว่าโค้ดจะทำงานไม่สำเร็จเนื่องจากไม่มีไลบรารี

5e2b97ab2512f139.png

โดยปกติแล้ว คุณควรสร้างอิมเมจ Docker ใหม่เพื่อให้เรียกใช้ Notebook นี้เป็นไปป์ไลน์ Kubeflow ได้ เพื่อรวมไลบรารีที่เพิ่งติดตั้งใหม่ โชคดีที่ Rok และ Kale ช่วยให้มั่นใจได้ว่าไลบรารีใดก็ตามที่คุณติดตั้งในระหว่างการพัฒนาจะเข้าสู่ไปป์ไลน์ได้ด้วยเทคโนโลยีการสแนปชอตของ Rok และการติดตั้งโวลุ่มที่สแนปชอตเหล่านั้นลงในขั้นตอนของไปป์ไลน์โดย Kale

เรียกใช้เซลล์ถัดไปเพื่อติดตั้งไลบรารีที่ขาดหายไป

c483da77943a6f01.png

รีสตาร์ทเคอร์เนลของ Notebook โดยคลิกไอคอนรีสตาร์ท

376b5203209c2c91.png

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

แปลง Notebook เป็นไปป์ไลน์ใน Kubeflow Pipelines

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

7b96241f2ab6c389.png

เปิดใช้ Kale โดยคลิกแถบเลื่อนในแผงการติดตั้งใช้งาน Kale

804cfbf9d76b7e23.png

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

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

ตอนนี้ Kale จะเข้ามาจัดการและสร้าง Notebook โดยแปลงเป็นไปป์ไลน์ Kubeflow Pipelines นอกจากนี้ เนื่องจาก Kale ผสานรวมกับ Rok เพื่อถ่ายสแนปชอตของปริมาณข้อมูลของ Notebook ปัจจุบัน คุณจึงดูความคืบหน้าของสแนปชอตได้ Rok จะดูแลการควบคุมเวอร์ชันของข้อมูลและสร้างสภาพแวดล้อมทั้งหมดซ้ำตามที่เคยเป็นเมื่อคุณคลิกปุ่มคอมไพล์และเรียกใช้ ด้วยวิธีนี้ คุณจะมีไทม์แมชชีนสำหรับข้อมูลและโค้ด และไปป์ไลน์จะทำงานในสภาพแวดล้อมเดียวกับที่คุณพัฒนาโค้ด โดยไม่ต้องสร้างอิมเมจ Docker ใหม่

de1b88af76df1a9a.png

ระบบได้คอมไพล์ไปป์ไลน์และอัปโหลดไปยัง Kubeflow Pipelines แล้ว ตอนนี้คลิกลิงก์เพื่อไปที่ UI ของ Kubeflow Pipelines และดูการเรียกใช้

e0b467e2e7034b5d.png

UI ของ Kubeflow Pipelines จะเปิดขึ้นในแท็บใหม่ รอให้การดำเนินการเสร็จสิ้น

21a9d54a57f3e20c.png

39e6fa39516d2773.png

ยินดีด้วย คุณเพิ่งเรียกใช้ไปป์ไลน์แบบครบวงจรใน Kubeflow Pipelines โดยเริ่มจาก Notebook

5. การเรียนรู้แบบถ่ายโอนด้วยการปรับแต่งไฮเปอร์พารามิเตอร์

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

ดูบันทึกของขั้นตอน cnn-from-scratch (คลิกขั้นตอนในกราฟบน UI ของ Kubeflow Pipelines จากนั้นคลิกแท็บบันทึก) ขั้นตอนนี้คือขั้นตอนที่คุณฝึกโครงข่ายประสาทเทียมแบบคอนโวลูชัน (CNN) ตั้งแต่ต้น โปรดทราบว่าโมเดลที่ฝึกแล้วมีความแม่นยำต่ำมาก และนอกจากนี้ ขั้นตอนนี้ยังใช้เวลานานกว่าจะเสร็จสมบูรณ์

62bf0835e9896c67.png

ดูบันทึกของขั้นตอน cnn-vgg16 ในขั้นตอนนี้ คุณใช้การเรียนรู้การโอนในโมเดล VGG-16 ที่ได้รับการฝึกมาก่อน ซึ่งเป็นโครงข่ายประสาทที่ได้รับการฝึกโดย Visual Geometry Group (VGG) ความแม่นยำสูงกว่าโมเดลก่อนหน้ามาก แต่เรายังทำได้ดีกว่านี้

2b45072da65e20ae.png

ตอนนี้มาดูบันทึกของขั้นตอน cnn-resnet50 กัน ในขั้นตอนนี้ คุณได้ใช้การเรียนรู้แบบถ่ายโอนในโมเดล ResNet-50 ที่ฝึกไว้ล่วงหน้า ความแม่นยำสูงกว่ามาก ดังนั้นโมเดลนี้จึงเป็นโมเดลที่คุณจะใช้ใน Codelab ที่เหลือ

a1dc84ea48a87820.png

การปรับแต่งไฮเปอร์พารามิเตอร์

กลับไปที่เซิร์ฟเวอร์ Notebook ใน UI ของ Kubeflow แล้วเปิด Notebook ที่ชื่อ dog-breed-katib.ipynb (ที่เส้นทาง data/kale/examples/dog-breed-classification/) ใน Notebook นี้ คุณจะทำการทดลองการปรับไฮเปอร์พารามิเตอร์บางอย่างในโมเดล ResNet-50 โดยใช้ Katib โปรดทราบว่าคุณมีเซลล์ 1 เซลล์ที่จุดเริ่มต้นของ Notebook เพื่อประกาศพารามิเตอร์

87b9f6c98dc1823e.png

ในแผงด้านซ้ายของ Notebook ให้เปิดใช้การปรับแต่ง HP ด้วย Katib เพื่อเรียกใช้การปรับแต่งไฮเปอร์พารามิเตอร์

a518eba74d341139.png

จากนั้นคลิกตั้งค่างาน Katib เพื่อกำหนดค่า Katib ดังนี้

f4e34fff6a93aa60.png

กำหนดพื้นที่การค้นหาสำหรับแต่ละพารามิเตอร์ และกำหนดเป้าหมาย

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

ดูความคืบหน้าของการทดสอบ Katib

f3514011876564db.png

คลิกดูเพื่อดูการทดสอบ Katib

ab2f5a5edd48e8dc.png

คลิกเสร็จสิ้นเพื่อดูการเรียกใช้ใน Kubeflow Pipelines (KFP)

410a843b6f044a4b.png

ในหน้าการทดสอบ Katib คุณจะเห็นการทดลองใหม่ดังนี้

a511dca519580133.png

และใน UI ของ KFP คุณจะเห็นการเรียกใช้ใหม่ดังนี้

43dd34ee2b75018d.png

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

Katib เป็นคอมโพเนนต์ของ Kubeflow ที่ใช้เรียกใช้งานการปรับแต่งไฮเปอร์พารามิเตอร์ทั่วไป Katib ไม่ทราบเกี่ยวกับงานที่กำลังทำงานอยู่จริง (เรียกว่าการทดลองในคำศัพท์เฉพาะของ Katib) สิ่งที่ Kale สนใจคือพื้นที่ค้นหา อัลกอริทึมการเพิ่มประสิทธิภาพ และเป้าหมาย Katib รองรับการเรียกใช้ Job แบบง่าย (นั่นคือ Pod) เป็นการทดลอง แต่ Kale จะใช้ Shim เพื่อให้การทดลองเรียกใช้ไปป์ไลน์ใน Kubeflow Pipelines จริงๆ แล้วรวบรวมเมตริกจากการเรียกใช้ไปป์ไลน์

เมื่อการทดสอบ Katib สร้างการทดลอง คุณจะเห็นการทดลองเพิ่มเติมใน UI ของ Katib ดังนี้

3e854d3d4bb766c.png

และมีการเรียกใช้เพิ่มเติมใน UI ของ KFP ดังนี้

ffd30dcefa739962.png

เมื่อการทดสอบ Katib เสร็จสมบูรณ์แล้ว คุณจะดูการทดลองทั้งหมดได้ใน UI ของ Katib โดยทำดังนี้

9096ae9caa77e42a.png

และเรียกใช้ทั้งหมดใน UI ของ KFP

7acc64dfee4f35a3.png

หากกลับไปที่ Notebook คุณจะเห็นปุ่มข้อมูลข้างการทดสอบ Katib ภายในแผง Kale ดังนี้

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

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

ทำลาย VM ของ MiniKF

ไปที่ Deployment Manager ในคอนโซล GCP แล้วลบการติดตั้งใช้งาน minikf-on-gcp

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

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

สิ่งต่อไปที่ควรทำ

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

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