การปรับใช้โมเดลแมชชีนเลิร์นนิงบน Heroku

เผยแพร่แล้ว: 2021-01-05

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

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

คุณสามารถเลือกรวมโมเดลในแอปพลิเคชันหลัก รวมไว้ใน SDLC หรือระบบคลาวด์ มีกลยุทธ์ต่างๆ ในการปรับใช้และเรียกใช้โมเดลในแพลตฟอร์มระบบคลาวด์ ซึ่งดูเหมือนว่าจะเป็นตัวเลือกที่ดีกว่าสำหรับกรณีส่วนใหญ่ เนื่องจากความพร้อมใช้งานของเครื่องมือ เช่น Google Cloud Platform, Azure, Amazon Web Services และ Heroku

แม้ว่าคุณสามารถเลือกเปิดเผยโมเดลในวิธี Pub/Sub แต่โดยทั่วไปแล้ว API (Application Program Interface) หรือ REST wrapper มักใช้เพื่อปรับใช้โมเดลในเวอร์ชันที่ใช้งานจริง เมื่อความซับซ้อนของโมเดลเพิ่มขึ้น ทีมต่างๆ จะได้รับมอบหมายให้จัดการกับสถานการณ์ดังกล่าวที่เรียกกันทั่วไปว่า Machine Learning Engineers ด้วยข้อมูลเบื้องต้นนี้ มาดูวิธีการปรับใช้โมเดลการเรียนรู้ของเครื่องเป็น API บนแพลตฟอร์ม Heroku

สารบัญ

Heroku คืออะไร?

Heroku เป็นแพลตฟอร์มเป็นเครื่องมือบริการที่ช่วยให้นักพัฒนาสามารถโฮสต์โค้ดแบบไร้เซิร์ฟเวอร์ได้ สิ่งนี้หมายความว่าเราสามารถพัฒนาสคริปต์เพื่อให้บริการอย่างใดอย่างหนึ่งเพื่อวัตถุประสงค์เฉพาะ แพลตฟอร์ม Heroku นั้นโฮสต์อยู่บน AWS (Amazon Web Services) ซึ่งเป็นโครงสร้างพื้นฐานเป็นเครื่องมือบริการ

Heroku เป็นแพลตฟอร์มฟรี แต่จำกัดเวลาให้บริการไม่เกิน 500 ชั่วโมง แอพถูกโฮสต์เป็นไดโนซึ่งหลังจากไม่มีการใช้งาน 30 นาทีจะเข้าสู่โหมดสลีป เพื่อให้แน่ใจว่าแอปของคุณจะไม่ใช้เวลาว่างทั้งหมดระหว่างที่ไม่มีการใช้งาน แพลตฟอร์มรองรับ Ruby, Java, PHP, Python, Node, Go, Scala ผู้เริ่มต้น Data Science ส่วนใหญ่อ้างถึงแพลตฟอร์มนี้เพื่อมีประสบการณ์ในการเรียกใช้และปรับใช้โมเดลในคลาวด์

การเตรียมแบบจำลอง

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

รูปแบบโมเดลที่แตกต่างกันมักจะได้รับการฝึกฝน เช่น Pickle, job-lib ซึ่งแปลง Python Object Model เป็นบิตสตรีม, ONNX, PMML หรือ MOJO ซึ่งเป็นรูปแบบการส่งออก H20.ai และนำเสนอโมเดลที่จะรวมเข้ากับแอปพลิเคชัน Java ด้วย เพื่อความง่าย ให้พิจารณาว่าเราต้องการส่งออกโมเดลผ่าน pickle จากนั้นคุณสามารถทำได้โดย:

นำเข้าผักดอง

Pkl_Filename = “model.pkl”

ด้วย open(Pkl_Filename, 'wb') เป็นไฟล์:

pickle.dump (model_name, ไฟล์)

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

ตรรกะของเซิร์ฟเวอร์

เพื่อให้เข้าถึงโมเดลนี้สำหรับการคาดคะเน เราจำเป็นต้องมีโค้ดเซิร์ฟเวอร์ที่สามารถเปลี่ยนเส้นทางและจัดการคำขอฝั่งไคลเอ็นต์ทั้งหมดได้ Python รองรับเฟรมเวิร์กการพัฒนาเว็บและ Flask ที่มีชื่อเสียง

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

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

จากขวดนำเข้า Flask

นำเข้าผักดอง

แอพ = ขวด (__name__)

ด้วย open(ชื่อไฟล์ 'rb') เป็นไฟล์:

รุ่น = pickle.load (ไฟล์)

@app.route('/predict', method = ['GET', 'POST'])

def pred():

# ใช้ตรรกะเพื่อรับพารามิเตอร์ผ่านการสืบค้นหรือเพย์โหลด

การทำนาย = model.predict ([พารามิเตอร์ที่ได้รับ])

ส่งคืน {'ผลลัพธ์': การคาดคะเน}

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

ชำระเงิน: คำแนะนำในการปรับใช้โมเดล ML โดยใช้ Streamlit

การตั้งค่าไฟล์การปรับใช้

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

กระติกน้ำ

sklearn

อ้วน </p>

หมีแพนด้า

gunicorn

ไลบรารีสุดท้าย gunicorn ช่วยให้เราสามารถตั้งค่าการใช้งานเซิร์ฟเวอร์ WSGI ที่สร้างอินเทอร์เฟซสำหรับไคลเอ็นต์และเซิร์ฟเวอร์ที่จัดการการรับส่งข้อมูล HTTP Heroku ยังต้องการไฟล์อื่นที่เรียกว่า Procfile ที่ใช้ในการระบุจุดเริ่มต้นของแอพ พิจารณาว่าไฟล์ลอจิกของเซิร์ฟเวอร์ถูกบันทึกโดยใช้ชื่อ main.py ดังนั้นคำสั่งที่จะใส่ในไฟล์นี้คือ:

เว็บ: gunicorn main:app

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

การปรับใช้ขั้นสุดท้าย

การเตรียมการทั้งหมดเสร็จสิ้น และตอนนี้ก็ถึงเวลาเรียกใช้แอปในระบบคลาวด์ สร้างบัญชีหากไม่ใช่ใน Heroku คลิกที่สร้างแอป เลือกภูมิภาคใดก็ได้ หลังจากนั้นให้เชื่อมต่อบัญชี GitHub ของคุณ และเลือก repo ที่มีไฟล์เหล่านี้: รหัสเซิร์ฟเวอร์, model.pkl, requirements.txt และ Procfile

หลังจากนั้นก็กด Deploy Branch! หากสำเร็จ ให้ไปที่ลิงก์ที่สร้างและแอปของคุณควรใช้งานได้จริง ตอนนี้คุณสามารถส่งคำขอไปยังเส้นทาง appname.herokuapp.com/predict และควรให้การคาดการณ์ เรียนรู้เพิ่มเติมเกี่ยวกับโมเดลการเรียนรู้ของเครื่อง

บทสรุป

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

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับแมชชีนเลิร์นนิง โปรดดูที่ IIIT-B & upGrad's PG Diploma in Machine Learning & AI ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 450 ชั่วโมง กรณีศึกษาและการมอบหมายมากกว่า 30 รายการ IIIT- สถานะศิษย์เก่า B, 5+ โครงการหลักที่ใช้งานได้จริง & ความช่วยเหลือด้านงานกับบริษัทชั้นนำ

ข้อเสียของการใช้แพลตฟอร์ม Heroku คืออะไร?

Heroku ไม่เหมาะสำหรับองค์กรขนาดใหญ่ เนื่องจากเอกสารประกอบของแพลตฟอร์มไม่ครอบคลุม อีกปัญหาหนึ่งคือระบบไฟล์แบบอ่านอย่างเดียว ซึ่งทำให้การอัปโหลดไฟล์ขนาดใหญ่ เช่น ภาพยนตร์หรือภาพถ่ายความละเอียดสูงยากต่อการจัดการ Heroku เป็นผู้ให้บริการแพลตฟอร์มที่มีการปรับแต่งจำนวนจำกัด Heroku ยอมรับการชำระเงินเป็น USD เท่านั้น ไม่รับในสกุลเงินอื่น เช่น EUR สำหรับเจ้าของธุรกิจที่ต้องการชำระเงินในสกุลเงินของตนเอง อาจเป็นความไม่สะดวกเล็กน้อย นอกจากนี้ ภายใน CRE (Common Runtime Environment) Heroku ไม่ได้ระบุที่อยู่ IP แบบคงที่

Heroku แตกต่างจาก AWS อย่างไร

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

ฉันสามารถใช้ Heroku ได้ฟรีนานแค่ไหน?

บัญชี Heroku มีกลุ่มชั่วโมงไดโนฟรีที่อาจใช้กับแอปฟรี สิ่งนี้มาแทนที่การจำกัดโปรแกรมฟรี 18 ชั่วโมง ทำให้สามารถทำงานได้ตลอด 24 ชั่วโมงหากจำเป็น บัญชีใหม่จะได้รับ dyno ชั่วโมงฟรี 550 และเพิ่มอีก 450 ชั่วโมงหากคุณตรวจสอบตัวตนของคุณด้วยบัตรเครดิต Heroku มีแผนให้บริการฟรีเพื่อช่วยให้คุณเรียนรู้เทคโนโลยีและเริ่มต้นใช้งาน ส่วนเสริม Heroku จำนวนมากมีแผนให้บริการฟรี เช่นเดียวกับปุ่ม Heroku และ Buildpacks