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

ตรวจสอบข้อกำหนดขั้นต่ำต่อไปนี้
- ตรวจสอบว่าคุณมีบทบาทเจ้าของสำหรับโปรเจ็กต์
- ตรวจสอบว่าโปรเจ็กต์เปิดใช้การเรียกเก็บเงินแล้ว
- หากคุณใช้ GCP Free Tier หรือช่วงทดลองใช้ 12 เดือนพร้อมเครดิต $300 โปรดทราบว่าคุณไม่สามารถเรียกใช้การติดตั้ง MiniKF ใน GCP โดยค่าเริ่มต้นได้ เนื่องจาก Free Tier มีทรัพยากรไม่เพียงพอ คุณต้องอัปเกรดเป็นบัญชีแบบชำระเงิน
โปรดดูรายละเอียดการตั้งค่าโปรเจ็กต์ GCP ในเอกสารประกอบของ GCP
หลังจากตั้งค่าโปรเจ็กต์ GCP แล้ว ให้ไปที่วิธีการติดตั้ง MiniKF โดยตรง
เปิดโปรเจ็กต์ GCP ที่จัดสรรไว้ล่วงหน้า
หากต้องการเปิดโปรเจ็กต์ GCP ที่จัดสรรไว้ล่วงหน้า ให้คลิกปุ่มด้านล่างเพื่อไปที่คอนโซล GCP แล้วเปิดแผงหน้าแรก ซึ่งอยู่ในเมนูแฮมเบอร์เกอร์ที่ด้านซ้ายบน หากหน้าจอว่างเปล่า ให้คลิก "ใช่" ในข้อความแจ้งเพื่อสร้างแดชบอร์ด

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

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

3. ติดตั้ง MiniKF
สร้างอินสแตนซ์การคำนวณรวมถึง MiniKF
ค้นหา "MiniKF" ใน GCP Marketplace
เลือกเครื่องเสมือน MiniKF โดย Arrikto

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

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

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

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

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


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

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

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

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


ยินดีด้วย คุณติดตั้งใช้งาน MiniKF ใน GCP เรียบร้อยแล้ว ตอนนี้คุณสามารถสร้าง Notebook เขียนโค้ด ML เรียกใช้ Kubeflow Pipelines และใช้ Rok สำหรับการควบคุมเวอร์ชันข้อมูลและความสามารถในการทำซ้ำได้แล้ว
4. เรียกใช้ไปป์ไลน์จากภายใน Notebook
ในส่วนนี้ คุณจะได้เรียกใช้ตัวอย่างการระบุสายพันธุ์สุนัข ซึ่งเป็นโปรเจ็กต์ใน AI Nanodegree ของ Udacity เมื่อได้รับรูปภาพสุนัข โมเดลสุดท้ายจะประมาณสายพันธุ์ของสุนัข
สร้างเซิร์ฟเวอร์ Notebook ในคลัสเตอร์ Kubeflow
ไปที่ลิงก์ Notebooks ในแดชบอร์ดส่วนกลางของ Kubeflow

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

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

ตรวจสอบว่าคุณได้เลือกอิมเมจ Docker ต่อไปนี้ (โปรดทราบว่าแท็กอิมเมจอาจแตกต่างกัน)
gcr.io/arrikto/jupyter-kale:f20978e
เพิ่มวอลุ่มข้อมูลใหม่ที่ว่างเปล่าขนาด 5 GB และตั้งชื่อว่า data

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

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

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

ในหน้าต่างเทอร์มินัล ให้เรียกใช้คำสั่งต่อไปนี้เพื่อไปยังโฟลเดอร์ data แล้วดาวน์โหลด Notebook และข้อมูลที่จะใช้ในส่วนที่เหลือของแล็บ
cd data/ git clone https://github.com/kubeflow-kale/kale
ที่เก็บที่โคลนจะมีตัวอย่างที่คัดสรรมาแล้วหลายชุดพร้อมข้อมูลและสมุดบันทึกที่มีคำอธิบายประกอบ
ในแถบด้านข้าง ให้ไปที่โฟลเดอร์ data/kale/examples/dog-breed-classification/ แล้วเปิดสมุดบันทึก dog-breed.ipynb

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6. ล้างข้อมูล
ทำลาย VM ของ MiniKF
ไปที่ Deployment Manager ในคอนโซล GCP แล้วลบการติดตั้งใช้งาน minikf-on-gcp
7. ขอแสดงความยินดี
ขอแสดงความยินดี คุณเรียกใช้เวิร์กโฟลว์วิทยาศาสตร์ข้อมูลแบบครบวงจรโดยใช้ Kubeflow (MiniKF), Kale และ Rok ได้สำเร็จแล้ว
สิ่งต่อไปที่ควรทำ
เข้าร่วมชุมชน Kubeflow
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- การประชุมชุมชนรายสัปดาห์, Slack และรายละเอียดอื่นๆ ของชุมชน
