จากสมุดบันทึกสู่ไปป์ไลน์ 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 ช่วยให้คุณสามารถจัดระเบียบ Microservice ที่มีการเชื่อมต่อแบบหลวมเป็นหน่วยเดียวและทำให้ใช้งานได้กับหลากหลายตำแหน่ง ไม่ว่าจะเป็นบนแล็ปท็อป ภายในองค์กร หรือในระบบคลาวด์

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

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

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

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

99b103929d928576.png

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

หากต้องการความช่วยเหลือเพิ่มเติมในการตั้งค่าโปรเจ็กต์ GCP โปรดดูเอกสารประกอบ GCP

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

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

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

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. ติดตั้ง MiniKF

สร้างอินสแตนซ์ Compute รวมถึง MiniKF

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

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

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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

7d5f7d17a80a1930.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 แล้ว ให้เปิดเมนูด้านซ้ายโดยคลิกไอคอนแฮมเบอร์เกอร์ คลิกที่ Snapshots และเข้าสู่ระบบ Rok โดยใช้ชื่อผู้ใช้และรหัสผ่าน MiniKF

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

4. เรียกใช้ไปป์ไลน์จากภายในสมุดบันทึก

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

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

ไปที่ลิงก์ Notebook ในแดชบอร์ด Kubeflow Central

60825e935fd0f39b.png

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

f9303c0a182e47f5.png

ระบุชื่อเซิร์ฟเวอร์สมุดบันทึก

a2343f30bc9522ab.png

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

gcr.io/arrikto/jupyter-kale:f20978e

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

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

52f1f8234988ceaa.png

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

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

ab9ac96f1a1f0d09.png

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

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 ใหม่เพื่อให้เรียกใช้สมุดบันทึกนี้เป็นไปป์ไลน์ Kubeflow เพื่อรวมไลบรารีที่ติดตั้งใหม่ โชคดีที่ Rok และ Kale มั่นใจได้ว่าไลบรารีที่คุณติดตั้งระหว่างการพัฒนาจะไปถึงไปป์ไลน์ของคุณ ด้วยเทคโนโลยีสแนปชอตของ Rok และ Kale ที่ต่อเชื่อมวอลุ่มสแนปชอตเหล่านั้นลงในขั้นตอนไปป์ไลน์

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

c483da77943a6f01.png

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

376b5203209c2c91.png

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

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

เปิดใช้ Kale โดยคลิกไอคอน Kubeflow ในแผงด้านซ้ายของสมุดบันทึก

7b96241f2ab6c389.png

เปิดใช้ Kale โดยคลิกที่แถบเลื่อนใน Kale Deployment Panel

804cfbf9d76b7e23.png

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

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

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

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

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

21a9d54a57f3e20c.png

39e6fa39516d2773.png

ยินดีด้วย คุณเพิ่งเรียกใช้ไปป์ไลน์แบบต้นทางถึงปลายทางใน Kubeflow Pipelines โดยเริ่มจากสมุดบันทึกของคุณ

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

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

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

62bf0835e9896c67.png

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

2b45072da65e20ae.png

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

a1dc84ea48a87820.png

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

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

87b9f6c98dc1823e.png

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

a518eba74d341139.png

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

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

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

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

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

a511dca519580133.png

และใน KFP UI คุณจะเห็นการเรียกใช้ใหม่:

43dd34ee2b75018d.png

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

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

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

3e854d3d4bb766c.png

และการเรียกใช้อื่นๆ ใน KFP UI:

ffd30dcefa739962.png

เมื่อการทดสอบ Katib เสร็จสมบูรณ์ คุณสามารถดูการทดลองใช้ทั้งหมดใน Katib UI ดังนี้

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

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

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

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

ทำลาย MiniKF VM

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

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

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

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

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

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