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 ด้วยการปรับแต่งไฮเปอร์พารามิเตอร์จากภายในสมุดบันทึกด้วยการคลิกปุ่มเดียว
- วิธีสร้างเวอร์ชันข้อมูลในสมุดบันทึกโดยอัตโนมัติและในทุกขั้นตอนของไปป์ไลน์
สิ่งที่คุณต้องมี
- โปรเจ็กต์ GCP ที่ใช้งานอยู่ซึ่งคุณมีสิทธิ์ระดับเจ้าของ
นี่คือ Codelab ขั้นสูงที่เน้น Kubeflow ดูข้อมูลเบื้องต้นเพิ่มเติมและข้อมูลเบื้องต้นเกี่ยวกับแพลตฟอร์มได้ในเอกสารประกอบข้อมูลเบื้องต้นเกี่ยวกับ Kubeflow แนวคิดและโค้ดบล็อกที่ไม่เกี่ยวข้องจะปรากฎขึ้นและเพื่อให้คุณคัดลอกและวางได้อย่างง่ายดาย
2. ตั้งค่าสภาพแวดล้อม
ตั้งค่าโปรเจ็กต์ GCP
ทำตามขั้นตอนด้านล่างเพื่อสร้างโปรเจ็กต์ GCP หรือกำหนดค่าโปรเจ็กต์ GCP ที่มีอยู่ หากคุณวางแผนที่จะใช้โปรเจ็กต์ GCP ที่มีอยู่ โปรดตรวจสอบว่าโปรเจ็กต์นั้นเป็นไปตามข้อกำหนดขั้นต่ำที่อธิบายไว้ด้านล่าง ขั้นตอนแรกคือเปิดตัวจัดการทรัพยากรในคอนโซล GCP
สร้างโปรเจ็กต์ใหม่หรือเลือกโปรเจ็กต์ที่มีอยู่:
โปรดตรวจสอบข้อกำหนดขั้นต่ำต่อไปนี้
- ตรวจสอบว่าคุณมีบทบาทเจ้าของสำหรับโปรเจ็กต์
- โปรดตรวจสอบว่าโปรเจ็กต์ของคุณเปิดใช้การเรียกเก็บเงินแล้ว
- หากคุณใช้รุ่นฟรีของ GCP หรือระยะทดลองใช้ 12 เดือนพร้อมเครดิต $300 โปรดทราบว่าคุณจะเรียกใช้การติดตั้ง GCP เริ่มต้นของ MiniKF ไม่ได้ เนื่องจากรุ่นฟรีมีทรัพยากรไม่เพียงพอ คุณต้องอัปเกรดเป็นบัญชีแบบชำระเงิน
หากต้องการความช่วยเหลือเพิ่มเติมในการตั้งค่าโปรเจ็กต์ GCP โปรดดูเอกสารประกอบ GCP
หลังจากตั้งค่าโปรเจ็กต์ GCP แล้ว ให้ไปที่วิธีการติดตั้ง MiniKF โดยตรง
เปิดโปรเจ็กต์ GCP ที่จัดสรรไว้ล่วงหน้า
หากต้องการเปิดโปรเจ็กต์ GCP ที่จัดสรรไว้ล่วงหน้า ให้คลิกปุ่มด้านล่างเพื่อไปที่คอนโซล GCP และเปิดแผงหน้าแรกในเมนูแฮมเบอร์เกอร์ที่ด้านซ้ายบน ถ้าหน้าจอว่างเปล่า ให้คลิก ใช่ เมื่อได้รับข้อความแจ้งเพื่อสร้างหน้าแดชบอร์ด
หากยังไม่ได้เลือกโปรเจ็กต์ ให้คลิกเลือกโปรเจ็กต์
เลือกโปรเจ็กต์ คุณควรมีข้อมูลต่อไปนี้เพียงรายการเดียวเท่านั้น
3. ติดตั้ง MiniKF
สร้างอินสแตนซ์ Compute รวมถึง MiniKF
ใน GCP Marketplace ให้ค้นหา "MiniKF"
เลือกเครื่องเสมือน MiniKF โดย Arrikto:
คลิกปุ่มเปิด แล้วเลือกโปรเจ็กต์:
ในส่วนกำหนดค่าและ ทำให้หน้าต่างใช้งานได้ เลือกชื่อและโซนสำหรับอินสแตนซ์ MiniKF และปล่อยตัวเลือกเริ่มต้นไว้ จากนั้นคลิกปุ่มทำให้ใช้งานได้
รอให้อินสแตนซ์ MiniKF Compute เปิดเครื่อง:
ลงชื่อเข้าสู่ระบบ MiniKF
เมื่อ MiniKF VM พร้อมใช้งานแล้ว ให้เชื่อมต่อและเข้าสู่ระบบโดยคลิกปุ่ม SSH ทำตามวิธีการบนหน้าจอเพื่อเรียกใช้คำสั่ง minikf
ซึ่งจะเริ่มการติดตั้งใช้งาน Minikube, Kubeflow และ Rok ซึ่งอาจใช้เวลาดำเนินการสักครู่
เข้าสู่ระบบ Kubeflow
เมื่อติดตั้งเสร็จสมบูรณ์และพ็อดทั้งหมดพร้อมแล้ว ให้ไปที่หน้าแดชบอร์ด MiniKF เข้าสู่ระบบ Kubeflow โดยใช้ชื่อผู้ใช้และรหัสผ่าน MiniKF:
ผู้ใช้ Chrome จะเห็นหน้าจอนี้
ผู้ใช้ Firefox จะเห็นหน้าจอนี้:
ผู้ใช้ Safari จะเห็นหน้าจอนี้
เข้าสู่ระบบ Rok
หลังจากเข้าสู่ระบบ Kubeflow แล้ว ให้เปิดเมนูด้านซ้ายโดยคลิกไอคอนแฮมเบอร์เกอร์ คลิกที่ Snapshots และเข้าสู่ระบบ Rok โดยใช้ชื่อผู้ใช้และรหัสผ่าน MiniKF
ยินดีด้วย คุณทำให้ MiniKF ใช้งานได้บน GCP เรียบร้อยแล้ว ตอนนี้คุณสร้างสมุดบันทึก, เขียนโค้ด ML, เรียกใช้ Kubeflow Pipelines และใช้ Rok เพื่อกำหนดเวอร์ชันและการทำซ้ำข้อมูลได้แล้ว
4. เรียกใช้ไปป์ไลน์จากภายในสมุดบันทึก
ในส่วนนี้ คุณจะได้เรียกใช้ตัวอย่างการระบุสายพันธุ์สุนัข ซึ่งเป็นโปรเจ็กต์ในระดับนาโนองศา Udacity AI จากรูปภาพสุนัข โมเดลสุดท้ายจะแสดงค่าประมาณของสายพันธุ์สุนัข
สร้างเซิร์ฟเวอร์สมุดบันทึกในคลัสเตอร์ Kubeflow
ไปที่ลิงก์ Notebook ในแดชบอร์ด Kubeflow Central
คลิกเซิร์ฟเวอร์ใหม่
ระบุชื่อเซิร์ฟเวอร์สมุดบันทึก
ตรวจสอบว่าคุณได้เลือกอิมเมจ Docker ต่อไปนี้แล้ว (โปรดทราบว่าแท็กรูปภาพอาจแตกต่างออกไป)
gcr.io/arrikto/jupyter-kale:f20978e
เพิ่มปริมาณข้อมูลที่ว่างเปล่าขนาด 5 GB และตั้งชื่อเป็น data
คลิกเปิดเพื่อสร้างเซิร์ฟเวอร์สมุดบันทึก
เมื่อเซิร์ฟเวอร์สมุดบันทึกพร้อมใช้งาน ให้คลิกเชื่อมต่อเพื่อเชื่อมต่อ
ดาวน์โหลดข้อมูลและสมุดบันทึก
แท็บใหม่จะเปิดขึ้นพร้อมหน้า Landing Page ของ JupyterLab สร้างเทอร์มินัลใหม่ใน JupyterLab
ในหน้าต่างเทอร์มินัล ให้เรียกใช้คำสั่งเหล่านี้เพื่อไปยังโฟลเดอร์ data และดาวน์โหลดสมุดบันทึกและข้อมูลที่คุณจะใช้สำหรับส่วนที่เหลือของ Lab
cd data/ git clone https://github.com/kubeflow-kale/kale
ที่เก็บที่โคลนจะมีชุดตัวอย่างที่มีการดูแลจัดการพร้อมข้อมูลและสมุดบันทึกที่มีคำอธิบายประกอบ
ในแถบด้านข้าง ไปยังโฟลเดอร์ data/kale/examples/dog-breed-classification/
และเปิดสมุดบันทึก dog-breed.ipynb
สำรวจโค้ด ML ของตัวอย่างการระบุสายพันธุ์สุนัข
ในระหว่างนี้ โปรดอย่าเรียกใช้เซลล์ที่ดาวน์โหลดชุดข้อมูล เนื่องจากคุณจะใช้ชุดข้อมูลขนาดเล็กกว่าบางส่วนซึ่งรวมอยู่ในที่เก็บที่คุณเพิ่งโคลน หากเรียกใช้ตัวอย่างนี้ในเวลาที่คุณสะดวกจากบ้าน ก็ดาวน์โหลดชุดข้อมูลได้
เรียกใช้เซลล์ imports
เพื่อนำเข้าไลบรารีที่จำเป็นทั้งหมด โปรดทราบว่าโค้ดล้มเหลวเนื่องจากไม่มีไลบรารี
โดยปกติคุณควรสร้างอิมเมจ Docker ใหม่เพื่อให้เรียกใช้สมุดบันทึกนี้เป็นไปป์ไลน์ Kubeflow เพื่อรวมไลบรารีที่ติดตั้งใหม่ โชคดีที่ Rok และ Kale มั่นใจได้ว่าไลบรารีที่คุณติดตั้งระหว่างการพัฒนาจะไปถึงไปป์ไลน์ของคุณ ด้วยเทคโนโลยีสแนปชอตของ Rok และ Kale ที่ต่อเชื่อมวอลุ่มสแนปชอตเหล่านั้นลงในขั้นตอนไปป์ไลน์
เรียกใช้เซลล์ถัดไปเพื่อติดตั้งไลบรารีที่ขาดหายไป
รีสตาร์ทเคอร์เนลของสมุดบันทึกโดยคลิกไอคอนรีสตาร์ท
เรียกใช้เซลล์ imports
อีกครั้งด้วยการติดตั้งไลบรารีที่ถูกต้องและดูการทำงานสำเร็จ
แปลงสมุดบันทึกเป็นไปป์ไลน์ใน Kubeflow Pipelines
เปิดใช้ Kale โดยคลิกไอคอน Kubeflow ในแผงด้านซ้ายของสมุดบันทึก
เปิดใช้ Kale โดยคลิกที่แถบเลื่อนใน Kale Deployment Panel
สํารวจทรัพยากร Dependency ต่อเซลล์ภายในสมุดบันทึก ดูว่าเซลล์สมุดบันทึกหลายเซลล์เป็นส่วนหนึ่งของขั้นตอนไปป์ไลน์เดียวได้อย่างไร ตามที่ระบุโดยแถบสีทางด้านซ้ายของเซลล์ และวิธีที่ขั้นตอนของไปป์ไลน์อาจขึ้นอยู่กับขั้นตอนก่อนหน้า ตามที่ระบุไว้ในป้ายกำกับขึ้นอยู่กับป้ายกำกับเหนือเซลล์ เช่น รูปภาพด้านล่างแสดงหลายเซลล์ที่เป็นส่วนหนึ่งของขั้นตอนไปป์ไลน์เดียวกัน ซึ่งมีสีแดงเหมือนกันและขึ้นอยู่กับขั้นตอนไปป์ไลน์ก่อนหน้า
คลิกปุ่มคอมไพล์และเรียกใช้
ตอนนี้ Kale จะทำงานและสร้างสมุดบันทึกโดยแปลงเป็นไปป์ไลน์ Kubeflow Pipelines นอกจากนี้ Kale ยังผสานรวมกับ Rok เพื่อสร้างสแนปชอตของปริมาณข้อมูลในสมุดบันทึกปัจจุบัน คุณจึงดูความคืบหน้าของสแนปชอตได้ Rok จะดูแลการกำหนดเวอร์ชันของข้อมูลและจำลองสภาพแวดล้อมทั้งหมดให้เหมือนกับที่เป็นเมื่อคุณคลิกปุ่มคอมไพล์และเรียกใช้ วิธีนี้จะช่วยให้คุณมีเครื่องย้อนเวลาสำหรับข้อมูลและโค้ด และไปป์ไลน์จะทำงานในสภาพแวดล้อมเดียวกันกับที่คุณพัฒนาโค้ดไว้ โดยไม่จำเป็นต้องสร้างอิมเมจ Docker ใหม่
ระบบรวบรวมและอัปโหลดไปป์ไลน์ไปยัง Kubeflow Pipelines จากนั้นคลิกลิงก์เพื่อไปยัง UI ไปป์ไลน์ Kubeflow และดูการเรียกใช้
UI ของ Kubeflow Pipelines จะเปิดขึ้นในแท็บใหม่ รอให้การเรียกใช้เสร็จสิ้น
ยินดีด้วย คุณเพิ่งเรียกใช้ไปป์ไลน์แบบต้นทางถึงปลายทางใน Kubeflow Pipelines โดยเริ่มจากสมุดบันทึกของคุณ
5. ถ่ายทอดการเรียนรู้ด้วยการปรับแต่งไฮเปอร์พารามิเตอร์
ตรวจสอบผลลัพธ์
ลองดูบันทึกขั้นตอน cnn-from-scratch (คลิกขั้นตอนในกราฟบน UI ไปป์ไลน์ Kubeflow จากนั้นคลิกแท็บบันทึก) นี่คือขั้นตอนที่คุณใช้ฝึกโครงข่ายระบบประสาทเทียมคอนโวลูชัน (CNN) ใหม่ตั้งแต่ต้น โปรดสังเกตว่าโมเดลที่ได้รับการฝึกมีความแม่นยำต่ำมาก และยิ่งไปกว่านั้น ขั้นตอนนี้ยังใช้เวลานานในการดำเนินการให้เสร็จสมบูรณ์
ดูบันทึกของขั้นตอน cnn-vgg16 ในขั้นตอนนี้ คุณใช้การเรียนรู้การโอนในโมเดล VGG-16 ก่อนการฝึก ซึ่งเป็นโครงข่ายระบบประสาทเทียมที่ได้รับการฝึกโดย Visual Geometry Group (VGG) ความแม่นยำสูงขึ้นกว่ารูปแบบก่อนหน้ามาก แต่เรายังสามารถทำได้ดีกว่านี้
ตอนนี้ให้ดูบันทึกของขั้นตอน cnn-resnet50 ในขั้นตอนนี้ คุณใช้การเรียนรู้การโอนในโมเดล ResNet-50 ที่ฝึกล่วงหน้า ความแม่นยำจะสูงขึ้นมาก ดังนั้นโมเดลนี้จึงเป็นโมเดลที่คุณจะใช้สำหรับส่วนที่เหลือของ Codelab นี้
การปรับแต่งไฮเปอร์พารามิเตอร์
กลับไปที่เซิร์ฟเวอร์สมุดบันทึกใน UI ของ Kubeflow และเปิดสมุดบันทึกชื่อ dog-breed-katib.ipynb
(ที่เส้นทาง data/kale/examples/dog-breed-classification/
) ในสมุดบันทึกนี้ คุณจะทำการทดสอบการปรับแต่งไฮเปอร์พารามิเตอร์บนโมเดล ResNet-50 โดยใช้ Katib โปรดสังเกตว่ามี 1 เซลล์ที่ตอนต้นของสมุดบันทึกสำหรับประกาศพารามิเตอร์ ดังนี้
ในแผงด้านซ้ายของสมุดบันทึก ให้เปิดใช้ HP Tuning with Katib เพื่อเรียกใช้การปรับแต่งไฮเปอร์พารามิเตอร์
จากนั้นคลิกตั้งค่างานของ Katib เพื่อกำหนดค่า Katib:
กำหนดพื้นที่การค้นหาสำหรับแต่ละพารามิเตอร์และกำหนดเป้าหมาย ดังนี้
คลิกปุ่มคอมไพล์และเรียกใช้งาน Katib
ดูความคืบหน้าของการทดสอบ Katib:
คลิกที่ดูเพื่อดูการทดสอบ Katib
คลิกเสร็จสิ้นเพื่อดูการเรียกใช้ใน Kubeflow Pipelines (KFP) ดังนี้
ในหน้าการทดสอบ Katib คุณจะเห็นการทดลองใหม่:
และใน KFP UI คุณจะเห็นการเรียกใช้ใหม่:
มาดูสิ่งที่เกิดขึ้นกัน ก่อนหน้านี้ Kale สร้างไปป์ไลน์ที่เรียกใช้จากสมุดบันทึก และตอนนี้ก็สร้างการเรียกใช้ไปป์ไลน์หลายรายการ โดยให้แต่ละไปป์ไลน์เป็นฟีดที่มีอาร์กิวเมนต์ต่างกัน
Katib เป็นคอมโพเนนต์ของ Kubeflow เพื่อเรียกใช้งานการปรับแต่งไฮเปอร์พารามิเตอร์สำหรับจุดประสงค์ทั่วไป Katib ไม่มีข้อมูลเกี่ยวกับงานที่ทำอยู่จริง (เรียกว่าการทดลองในศัพท์เฉพาะ Katib) สิ่งที่ Kale สนใจคือพื้นที่การค้นหา อัลกอริทึมการเพิ่มประสิทธิภาพ และเป้าหมาย Katib รองรับการเรียกใช้ Tasks แบบง่าย (ซึ่งก็คือ Pods) เป็นช่วงทดลองใช้ แต่ Kale จะใช้ Shim เพื่อให้การทดลองใช้เรียกใช้ไปป์ไลน์ใน Kubeflow Pipelines แล้วรวบรวมเมตริกจากการเรียกใช้ไปป์ไลน์
ในขณะที่การทดลอง Katib กำลังสร้างการทดลอง คุณจะเห็นการทดลองเพิ่มเติมใน UI ของ Katib ดังนี้
และการเรียกใช้อื่นๆ ใน KFP UI:
เมื่อการทดสอบ Katib เสร็จสมบูรณ์ คุณสามารถดูการทดลองใช้ทั้งหมดใน Katib UI ดังนี้
และการเรียกใช้ทั้งหมดใน KFP UI:
หากกลับไปที่สมุดบันทึก คุณจะเห็นปุ่มข้อมูลถัดจากการทดลอง Katib ในแผงผักเคล
ให้คลิกแล้วคุณจะเห็นผลลัพธ์ที่ดีที่สุด รวมถึงพารามิเตอร์ที่ทำให้เกิดผลลัพธ์
6. ล้างข้อมูล
ทำลาย MiniKF VM
ไปที่เครื่องมือจัดการการทำให้ใช้งานได้ในคอนโซล GCP และลบการทำให้ใช้งานได้ minikf-on-gcp
7. ขอแสดงความยินดี
ยินดีด้วย คุณใช้เวิร์กโฟลว์วิทยาศาสตร์ข้อมูลแบบครบวงจรโดยใช้ Kubeflow (MiniKF), Kale และ Rok สำเร็จแล้ว
สิ่งที่ต้องทำต่อไป
เข้าร่วมชุมชน Kubeflow
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- การประชุมทางโทรศัพท์รายสัปดาห์, Slack และรายละเอียดอื่นๆ ของชุมชน