โมเดลและแพลตฟอร์ม AI

การติดตามโมเดลภาษาขนาดใหญ่ (LLM) โดยใช้ MLflow: คู่มือที่สมบูรณ์

mm
เพิ่ม Unite.AI ลงในแหล่งข้อมูลที่คุณต้องการบน Google
div]:bg-bg-300 [&_pre]:-mr-4 md:[&_pre]:-mr-9″>

โมเดลภาษาขนาดใหญ่ (LLM) มีการเติบโตในด้านความซับซ้อนและขนาด ทำให้การติดตามผลการทำงาน การทดลอง และการนำไปใช้变得ท้าทายมากขึ้น นี่คือจุดที่ MLflow เข้ามาเป็นแพลตฟอร์มที่ครอบคลุมสำหรับการจัดการวงจรชีวิตของโมเดลการเรียนรู้ของเครื่อง รวมถึง LLM

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

ฟังก์ชันการทำงานของ MLflow ในโมเดลภาษาขนาดใหญ่ (LLM)

MLflow ได้กลายเป็นเครื่องมือที่สำคัญใน社区การเรียนรู้ของเครื่องและวิทยาศาสตร์ข้อมูล โดยเฉพาะอย่างยิ่งสำหรับการจัดการวงจรชีวิตของโมเดลการเรียนรู้ของเครื่อง เมื่อพูดถึงโมเดลภาษาขนาดใหญ่ (LLM) MLflow มีชุดเครื่องมือที่แข็งแกร่งที่ช่วยให้กระบวนการในการพัฒนา ติดตาม ประเมิน และนำโมเดลเหล่านี้ไปใช้ได้ง่ายขึ้น มาดูกันว่า MLflow ทำงานอย่างไรภายในพื้นที่ LLM และประโยชน์ที่มีต่อวิศวกรและนักวิทยาศาสตร์ข้อมูล

เรียนรู้เกี่ยวกับส่วนประกอบหลักของ MLflow

การติดตามและการจัดการการโต้ตอบของ LLM

ระบบการติดตาม LLM ของ MLflow เป็นการปรับปรุงความสามารถในการติดตามที่มีอยู่แล้ว ซึ่งถูกปรับให้เหมาะสมสำหรับความต้องการที่เฉพาะของ LLM มันช่วยให้สามารถติดตามการโต้ตอบของโมเดลได้อย่างครอบคลุม รวมถึงด้านต่อไปนี้:

  • พารามิเตอร์: การบันทึกคู่ค่าสำคัญที่อธิบายพารามิเตอร์สำหรับ LLM เช่น พารามิเตอร์เฉพาะของโมเดล เช่น top_k และ temperature สิ่งนี้ให้ข้อมูลและคอนฟิกสำหรับการทำงานทุกด้านของโมเดล
  • เมตริก: การวัดเชิงปริมาณที่ให้ข้อมูลเชิงลึกเกี่ยวกับประสิทธิภาพและความแม่นยำของ LLM สามารถอัปเดตได้แบบไดนามิกเมื่อการทำงานดำเนินไป ซึ่งให้ข้อมูลเชิงลึกแบบเรียลไทม์หรือหลังการประมวลผล
  • การคาดการณ์: การจับข้อมูลเข้าและผลลัพธ์ที่สอดคล้องกัน ซึ่งถูกเก็บเป็นอาร์ติแฟคต์ในรูปแบบที่มีโครงสร้างสำหรับการเรียกและวิเคราะห์ได้ง่าย
  • อาร์ติแฟคต์: นอกเหนือจากผลลัพธ์แล้ว MLflow ยังสามารถเก็บไฟล์เอาต์พุตต่างๆ เช่น การแสดงภาพ โมเดลที่ซีเรียลไズ และไฟล์ข้อมูลที่มีโครงสร้าง เพื่อให้สามารถจัดทำเอกสารและวิเคราะห์ประสิทธิภาพของโมเดลได้อย่างละเอียด

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

การประเมินของ LLM

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

  • การประเมินโมเดลที่หลากหลาย: การสนับสนุนการประเมินโมเดล LLM ประเภทต่างๆ ไม่ว่าจะเป็นโมเดล MLflow pyfunc โมเดลที่ลงทะเบียนไว้ใน MLflow หรือฟังก์ชัน Python ที่เรียกใช้ได้ซึ่งแสดงถึงโมเดลของคุณ
  • เมตริกที่ครอบคลุม: มีแมทริกที่หลากหลายที่ออกแบบมาเฉพาะสำหรับการประเมิน LLM รวมถึงเมตริกที่ขึ้นอยู่กับโมเดล (เช่น ความเกี่ยวข้องของคำตอบ) และเมตริกที่ขึ้นอยู่กับฟังก์ชัน (เช่น ROUGE, Flesch Kincaid)
  • คอลเลกชันเมตริกที่กำหนดไว้ล่วงหน้า: ขึ้นอยู่กับกรณีการใช้งาน เช่น การตอบคำถามหรือการสรุปข้อความ MLflow มีเมตริกที่กำหนดไว้ล่วงหน้าเพื่อทำให้กระบวนการประเมินง่ายขึ้น
  • การสร้างเมตริกแบบกำหนดเอง: ช่วยให้ผู้ใช้สามารถกำหนดและใช้เมตริกแบบกำหนดเองเพื่อตอบสนองความต้องการในการประเมินที่เฉพาะเจาะจง
  • การประเมินด้วยชุดข้อมูลแบบคงที่: ช่วยให้สามารถประเมินชุดข้อมูลแบบคงที่ได้โดยไม่ต้องระบุโมเดล ซึ่งเป็นประโยชน์สำหรับการประเมินอย่างรวดเร็วโดยไม่ต้องรันการอนุมานโมเดลใหม่

การนำไปใช้และการบูรณาการ

MLflow ยังสนับสนุนการนำไปใช้และการบูรณาการ LLM ได้อย่างไรดี:

  • เซิร์ฟเวอร์การนำไปใช้ของ MLflow: ทำหน้าที่เป็นอินเทอร์เฟซที่รวมสำหรับการโต้ตอบกับผู้ให้บริการ LLM หลายราย ทำให้การบูรณาการง่ายขึ้น จัดการเครดενเชียลอย่างปลอดภัย และมี API ที่สอดคล้องกัน เซิร์ฟเวอร์นี้รองรับโมเดลพื้นฐานหลายรูปแบบจากผู้ให้บริการ SaaS ที่ได้รับความนิยมและโมเดลที่โฮสต์เอง
  • จุดสิ้นสุดแบบรวม: ทำให้สามารถเปลี่ยนผู้ให้บริการได้ง่ายโดยไม่ต้องเปลี่ยนโค้ด ลดเวลาดาวน์และเพิ่มความยืดหยุ่น
  • มุมมองผลการประเมินแบบรวม: ให้ผลการประเมินที่ครอบคลุม ซึ่งสามารถเข้าถึงได้โดยตรงในโค้ดหรือผ่าน UI ของ MLflow สำหรับการวิเคราะห์รายละเอียด

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

การตั้งค่าสภาพแวดล้อมของคุณ

ก่อนที่เราจะดูการติดตาม LLM โดยใช้ MLflow มาทำการตั้งค่าสภาพแวดล้อมพัฒนาของเรากันก่อน เราต้องติดตั้ง MLflow และไลบรารีสำคัญอื่นๆ:

pip install mlflow>=2.8.1
pip install openai
pip install chromadb==0.4.15
pip install langchain==0.0.348
pip install tiktoken
pip install 'mlflow[genai]'
pip install databricks-sdk --upgrade

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

import mlflow
import chromadb

<p>print(f"MLflow version: {mlflow.__version__}")
print(f"ChromaDB version: {chromadb.__version__}")

สิ่งนี้จะยืนยันเวอร์ชันของไลบรารีหลักที่เราจะใช้

การเข้าใจความสามารถในการติดตาม LLM ของ MLflow

ระบบการติดตาม LLM ของ MLflow สร้างขึ้นจากความสามารถในการติดตามที่มีอยู่แล้ว โดยเพิ่มคุณลักษณะที่ออกแบบมาเฉพาะสำหรับด้านที่ไม่เหมือนใครของ LLM มาทำความเข้าใจส่วนประกอบหลัก:

การทำงานและทดลอง

ใน MLflow “การทำงาน” แสดงถึงการดำเนินการโค้ดโมเดลของคุณครั้งเดียว ในขณะที่ “การทดลอง” คือการรวบรวมการทำงานที่เกี่ยวข้อง สำหรับ LLM การทำงานอาจแสดงถึงการค้นหาคำถามเดียวหรือชุดคำถามที่ประมวลผลโดยโมเดล

ส่วนประกอบหลักในการติดตาม

  1. พารามิเตอร์: สิ่งเหล่านี้คือการกำหนดค่าเข้าสำหรับ LLM ของคุณ เช่น อุณหภูมิ top_k หรือ max_tokens คุณสามารถบันทึกสิ่งเหล่านี้โดยใช้ mlflow.log_param() หรือ mlflow.log_params()
  2. เมตริก: การวัดเชิงปริมาณของประสิทธิภาพ LLM ของคุณ เช่น ความแม่นยำ ความหน่วง หรือคะแนนแบบกำหนดเอง ใช้ mlflow.log_metric() หรือ mlflow.log_metrics() เพื่อติดตามสิ่งเหล่านี้
  3. การคาดการณ์: สำหรับ LLM มันเป็นสิ่งสำคัญที่จะต้องบันทึกทั้งคำถามที่ส่งเข้าและผลลัพธ์ที่สอดคล้องกัน MLflow จัดเก็บสิ่งเหล่านี้เป็นอาร์ติแฟคต์ในรูปแบบ CSV โดยใช้ mlflow.log_table()
  4. อาร์ติแฟคต์: ไฟล์หรือข้อมูลเอาต์พุตอื่นๆ ที่เกี่ยวข้องกับการทำงานของ LLM ใช้ mlflow.log_artifact() เพื่อจัดเก็บสิ่งเหล่านี้

มาทำตัวอย่างพื้นฐานของการบันทึกการทำงานของ LLM:

ตัวอย่างนี้แสดงการบันทึกพารามิเตอร์ เมตริก และคำถาม/คำตอบเป็นอาร์ติแฟคต์แบบตาราง


import mlflow
import openai

<p>def query_llm(prompt, max_tokens=100):
response = openai.Completion.create(
engine="text-davinci-002",
prompt=prompt,
max_tokens=max_tokens
)
return response.choices[0].text.strip()</p>

<p>with mlflow.start_run():
prompt = "อธิบายแนวคิดของการเรียนรู้ของเครื่องในคำพูดที่ง่าย"</p>

<p># บันทึกพารามิเตอร์
mlflow.log_param("model", "text-davinci-002")
mlflow.log_param("max_tokens", 100)</p>

<p># ค้นหา LLM และบันทึกผลลัพธ์
result = query_llm(prompt)
mlflow.log_metric("response_length", len(result))</p>

<p># บันทึกคำถามและคำตอบ
mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})</p>

<p>print(f"คำตอบ: {result}")

การนำ LLM ไปใช้โดยใช้ MLflow

MLflow มีความสามารถที่แข็งแกร่งสำหรับการนำ LLM ไปใช้ ทำให้ง่ายต่อการเสิร์ฟโมเดลของคุณในproduction environments มาทำความเข้าใจวิธีการนำ LLM ไปใช้โดยใช้ความสามารถในการนำไปใช้ของ MLflow

การสร้างจุดสิ้นสุด

ก่อนอื่นเราจะสร้างจุดสิ้นสุดสำหรับ LLM ของเราโดยใช้ไคลเอ็นต์การนำไปใช้ของ MLflow:

import mlflow
from mlflow.deployments import get_deploy_client

<p># เริ่มต้นไคลเอ็นต์การนำไปใช้
client = get_deploy_client("databricks")</p>

<p># กำหนดค่าจุดสิ้นสุด
endpoint_name = "llm-endpoint"
endpoint_config = {
"served_entities": [{
"name": "gpt-model",
"external_model": {
"name": "gpt-3.5-turbo",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_type": "azure",
"openai_api_key": "{{secrets/scope/openai_api_key}}",
"openai_api_base": "{{secrets/scope/openai_api_base}}",
"openai_deployment_name": "gpt-35-turbo",
"openai_api_version": "2023-05-15",
},
},
}],
}</p>

<p># สร้างจุดสิ้นสุด
client.create_endpoint(name=endpoint_name, config=endpoint_config)

โค้ดนี้ตั้งค่าจุดสิ้นสุดสำหรับโมเดล GPT-3.5-turbo โดยใช้ Azure OpenAI โปรดทราบการใช้ Databricks secrets สำหรับการจัดการ API key อย่างปลอดภัย

การทดสอบจุดสิ้นสุด

เมื่อจุดสิ้นสุดถูกสร้างแล้ว เราสามารถทดสอบได้:

&lt;div class="relative flex flex-col rounded-lg"&gt;

<p>response = client.predict(
endpoint=endpoint_name,
inputs={"prompt": "อธิบายแนวคิดของเครือข่ายประสาทเทียมอย่างง่าย", "max_tokens": 100,},)</p>

print(response)

สิ่งนี้จะส่งคำถามไปยังโมเดลที่เราเสิร์ฟและคืนคำตอบที่สร้างขึ้น

การประเมิน LLM โดยใช้ MLflow

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

การเตรียม LLM สำหรับการประเมิน

เพื่อประเมิน LLM ของคุณโดยใช้ mlflow.evaluate() โมเดลของคุณต้องอยู่ในรูปแบบต่อไปนี้:

  1. อินสแตนซ์ mlflow.pyfunc.PyFuncModel หรือ URI ที่ชี้ไปยังโมเดล MLflow ที่บันทึกไว้
  2. ฟังก์ชัน Python ที่รับข้อมูลเข้าเป็นข้อความและคืนค่าข้อความเดียว
  3. URI ของจุดสิ้นสุด MLflow Deployments
  4. ตั้งค่า model=None และรวมเอาต์พุตของโมเดลไว้ในข้อมูลการประเมิน

มาทำตัวอย่างโดยใช้โมเดล MLflow ที่บันทึกไว้:

import mlflow
import openai

<p>with mlflow.start_run():
system_prompt = "ตอบคำถามต่อไปนี้อย่างสั้น"
logged_model_info = mlflow.openai.log_model(
model="gpt-3.5-turbo",
task=openai.chat.completions,
artifact_path="model",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": "{question}"},
],
)</p>

<p># เตรียมข้อมูลการประเมิน
eval_data = pd.DataFrame({
"question": ["อะไรคือการเรียนรู้ของเครื่อง?", "อธิบายเครือข่ายประสาทเทียม"],
"ground_truth": [
"การเรียนรู้ของเครื่องเป็นส่วนหนึ่งของ AI ที่ช่วยให้ระบบสามารถเรียนรู้และปรับปรุงจากประสบการณ์โดยไม่ต้องเขียนโปรแกรมอย่างชัดเจน",
"เครือข่ายประสาทเทียมเป็นระบบการประมวลผลที่ได้รับแรงบันดาลใจจากเครือข่ายประสาททางชีววิทยา ประกอบด้วยโหนดที่เชื่อมต่อกันซึ่งประมวลผลและถ่ายทอดข้อมูล",
]
})</p>

<p># ประเมินโมเดล
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
)</p>

<p>print(f"เมตริกการประเมิน: {results.metrics}")

ตัวอย่างนี้บันทึกโมเดล OpenAI เตรียมข้อมูลการประเมิน จากนั้นประเมินโมเดลโดยใช้เมตริกที่มีอยู่ของ MLflow สำหรับการตอบคำถาม

การสร้างเมตริกแบบกำหนดเอง

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

from mlflow.metrics.genai import EvaluationExample, make_genai_metric

<p>professionalism = make_genai_metric(
name="professionalism",
definition="การวัดระดับของการสื่อสารที่เป็นทางการและเหมาะสม",
grading_prompt=(
"ให้คะแนนความเป็นมืออาชีพของคำตอบตามมาตราส่วน 0-4:\n"
"0: มากเกินไปหรือไม่เหมาะสม\n"
"1: ไม่ทางการแต่ให้ความเคารพ\n"
"2: มoderately เป็นทางการ\n"
"3: มืออาชีพและเหมาะสม\n"
"4: มืออาชีพและสร้างสรรค์"
),
examples=[
EvaluationExample(
input="อะไรคือการเรียนรู้ของเครื่อง?",
output="การเรียนรู้ของเครื่องเป็นเครื่องมือที่ยอดเยี่ยมสำหรับโครงการ ML",
score=1,
justification="คำตอบไม่ทางการและใช้ภาษาไม่เหมาะสม",
),
EvaluationExample(
input="อะไรคือการเรียนรู้ของเครื่อง?",
output="การเรียนรู้ของเครื่องเป็นส่วนหนึ่งของ AI ที่ช่วยให้ระบบสามารถเรียนรู้และปรับปรุงจากประสบการณ์โดยไม่ต้องเขียนโปรแกรมอย่างชัดเจน",
score=4,
justification="คำตอบเป็นทางการ สั้นและเขียนด้วยภาษาที่มืออาชีพ",
)
],
model="openai:/gpt-3.5-turbo-16k",
parameters={"temperature": 0.0},
aggregations=["mean", "variance"],
greater_is_better=True,
)</p>

<p># ใช้เมตริกแบบกำหนดเองในการประเมิน
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
extra_metrics=[professionalism]
)</p>

<p>print(f"คะแนนความเป็นมืออาชีพ: {results.metrics['professionalism_mean']}")

เมตริกแบบกำหนดเองนี้ใช้ GPT-3.5-turbo เพื่อประเมินความเป็นมืออาชีพของคำตอบ โดยแสดงให้เห็นว่าคุณสามารถใช้ LLM เองในการประเมินได้อย่างไร

เทคนิคการประเมิน LLM ขั้นสูง

เมื่อ LLM มีความซับซ้อนมากขึ้น เทคนิคการประเมินก็เช่นกัน มาทำความเข้าใจเทคนิคการประเมินที่ขั้นสูงโดยใช้ MLflow

การประเมิน Retrieval-Augmented Generation (RAG)

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

from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

<p># โหลดและประมวลผลเอกสาร
loader = WebBaseLoader(["https://mlflow.org/docs/latest/index.html"])
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)</p>

<p># สร้าง vector store
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)</p>

<p># สร้าง RAG chain
llm = OpenAI(temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(),
return_source_documents=True
)</p>

<p># ฟังก์ชันการประเมิน
def evaluate_rag(question):
result = qa_chain({"query": question})
return result["result"], [doc.page_content for doc in result["source_documents"]]</p>

<p># เตรียมข้อมูลการประเมิน
eval_questions = [
"อะไรคือการเรียนรู้ของเครื่อง?",
"การเรียนรู้ของเครื่องช่วยให้ทำอะไรได้บ้าง?",
"ส่วนประกอบหลักของการเรียนรู้ของเครื่องคืออะไร?",
]</p>

<p># ประเมินโดยใช้ MLflow
with mlflow.start_run():
for question in eval_questions:
answer, sources = evaluate_rag(question)</p>

<p>mlflow.log_param(f"question", question)
mlflow.log_metric("num_sources", len(sources))
mlflow.log_text(answer, f"answer_{question}.txt")</p>

<p>for i, source in enumerate(sources):
mlflow.log_text(source, f"source_{question}_{i}.txt")</p>

<p># บันทึกเมตริกแบบกำหนดเอง
mlflow.log_metric("avg_sources_per_question", sum(len(evaluate_rag(q)[1]) for q in eval_questions) / len(eval_questions))

ตัวอย่างนี้ตั้งค่าระบบ RAG โดยใช้ LangChain และ Chroma จากนั้นประเมินโดยการบันทึกคำถาม คำตอบ แหล่งที่มา และเมตริกแบบกำหนดเองไปยัง MLflow

การประเมินกลยุทธ์การแบ่งชิ้น

วิธีการแบ่งเอกสารสามารถส่งผลกระทบอย่างมากต่อประสิทธิภาพของ RAG MLflow ช่วยให้คุณสามารถประเมินกลยุทธ์การแบ่งชิ้นต่างๆ ได้:

import mlflow
from langchain.text_splitter import CharacterTextSplitter, TokenTextSplitter

<p>def evaluate_chunking_strategy(documents, chunk_size, chunk_overlap, splitter_class):
splitter = splitter_class(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
chunks = splitter.split_documents(documents)</p>

<p>with mlflow.start_run():
mlflow.log_param("chunk_size", chunk_size)
mlflow.log_param("chunk_overlap", chunk_overlap)
mlflow.log_param("splitter_class", splitter_class.__name__)</p>

<p>mlflow.log_metric("num_chunks", len(chunks))
mlflow.log_metric("avg_chunk_length", sum(len(chunk.page_content) for chunk in chunks) / len(chunks))</p>

<p># ประเมินประสิทธิภาพการค้นหา (แบบง่าย)
correct_retrievals = sum(1 for _ in range(100) if simulate_retrieval(chunks))
mlflow.log_metric("retrieval_accuracy", correct_retrievals / 100)</p>

<p># ประเมินกลยุทธ์ต่างๆ
for chunk_size in [500, 1000, 1500]:
for chunk_overlap in [0, 50, 100]:
for splitter_class in [CharacterTextSplitter, TokenTextSplitter]:
evaluate_chunking_strategy(documents, chunk_size, chunk_overlap, splitter_class)</p>

<p># เปรียบเทียบผลลัพธ์
best_run = mlflow.search_runs(order_by=["metrics.retrieval_accuracy DESC"]).iloc[0]
print(f"กลยุทธ์การแบ่งชิ้นที่ดีที่สุด: {best_run['params.splitter_class']} โดยมีขนาด {best_run['params.chunk_size']} และการซ้อนทับ {best_run['params.chunk_overlap']}")

สคริปต์นี้ประเมินชุดค่าผสมต่างๆ ของขนาดชิ้น การซ้อนทับ และวิธีการแบ่งชิ้น โดยบันทึกผลลัพธ์ไปยัง MLflow สำหรับการเปรียบเทียบที่ง่ายดาย

การแสดงภาพผลการประเมิน LLM

MLflow มีหลายวิธีในการแสดงภาพผลการประเมิน LLM ของคุณ:

การใช้ UI ของ MLflow

หลังจากรันการประเมิน คุณสามารถใช้ UI ของ MLflow เพื่อดูผลลัพธ์:

  1. เริ่มต้น UI ของ MLflow: mlflow ui
  2. เปิดเว็บเบราว์เซอร์และไปยัง http://localhost:5000
  3. เลือกการทดลองและรันของคุณเพื่อดูเมตริก พารามิเตอร์ และอาร์ติแฟคต์

การแสดงภาพแบบกำหนดเอง

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

import matplotlib.pyplot as plt
import mlflow

<p>def plot_metric_comparison(metric_name, run_ids):
plt.figure(figsize=(10, 6))
for run_id in run_ids:
run = mlflow.get_run(run_id)
metric_values = mlflow.get_metric_history(run_id, metric_name)
plt.plot([m.step for m in metric_values], [m.value for m in metric_values], label=run.data.tags.get("mlflow.runName", run_id))</p>

<p>plt.title(f"Comparison of {metric_name}")
plt.xlabel("Step")
plt.ylabel(metric_name)
plt.legend()</p>

<p># บันทึกและบันทึกการแสดงภาพ
plt.savefig(f"{metric_name}_comparison.png")
mlflow.log_artifact(f"{metric_name}_comparison.png")</p>

<p># การใช้งาน
with mlflow.start_run():
plot_metric_comparison("answer_relevance", ["run_id_1", "run_id_2", "run_id_3"])

ฟังก์ชันนี้สร้างการแสดงภาพเส้นเปรียบเทียบของเมตริกเฉพาะระหว่างรันหลายๆ รัน และบันทึกเป็นอาร์ติแฟคต์

ทางเลือกอื่นของ MLflow ที่เปิดเผยแหล่งที่มา

มีทางเลือกอื่นๆ มากมายสำหรับ MLflow ที่เปิดเผยแหล่งที่มา สำหรับการจัดการการทำงานของการเรียนรู้ของเครื่อง แต่ละตัวมีคุณลักษณะและบูรณาการที่ไม่เหมือนใคร

MLflow ที่จัดการโดย Databricks

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

Azure Machine Learning

Azure Machine Learning เป็นโซลูชันการเรียนรู้ของเครื่องที่ครอบคลุมบนแพลตฟอร์ม Azure Cloud ของ Microsoft (MSFT ) มันให้ความเข้ากันได้กับส่วนประกอบของ MLflow เช่น model registry และ experiment tracker แม้ว่าจะไม่ได้สร้างขึ้นบน MLflow

แพลตฟอร์ม ML ที่อุทิศ

บริษัทต่างๆ มีผลิตภัณฑ์ ML ที่จัดการพร้อมคุณลักษณะที่หลากหลาย:

  • neptune.ai: มุ่งเน้นไปที่การติดตามการทดลองและการจัดการโมเดล
  • Weights & Biases: เสนอการติดตามการทดลอง การจัดการชุดข้อมูล และเครื่องมือการทำงานร่วมกัน
  • Comet ML: ให้การติดตามการทดลอง การติดตามโมเดลในระหว่างการผลิต และการบันทึกข้อมูล
  • Valohai: พิเศษในการจัดการการทำงานของเครื่องและบูรณาการ

Metaflow

Metaflow ซึ่งพัฒนาโดย Netflix (NFLX ) คือเฟรมเวิร์กที่เปิดเผยแหล่งที่มาเพื่อจัดการการทำงานข้อมูลและโมเดลการเรียนรู้ของเครื่อง แม้ว่าจะมีความสามารถในการจัดการการนำไปใช้ขนาดใหญ่ แต่ก็ขาดคุณสมบัติการติดตามการทดลองและการจัดการโมเดลที่ครอบคลุมเมื่อเทียบกับ MLflow

Amazon SageMaker และ Google’s Vertex AI

ทั้ง Amazon (AMZN ) SageMaker และ Google’s Vertex AI มีโซลูชัน MLOps ที่ครอบคลุมซึ่งรวมอยู่ในแพลตฟอร์มคลาวด์ของตนเอง โดยให้เครื่องมือที่แข็งแกร่งสำหรับการสร้าง การฝึกอบรม และการนำโมเดลการเรียนรู้ของเครื่องไปใช้ในระดับใหญ่

การเปรียบเทียบโดยละเอียด

MLflow ที่จัดการ vs. MLflow ที่เปิดเผยแหล่งที่มา

MLflow ที่จัดการโดย Databricks มีข้อดีหลายประการเหนือ MLflow ที่เปิดเผยแหล่งที่มา รวมถึง:

  • การตั้งค่าและการนำไปใช้: การบูรณาการที่ราบรื่นเข้ากับระบบนิเวศของ Databricks ลดเวลาในการตั้งค่าและความพยายาม
  • ความสามารถในการปรับขนาด: สามารถจัดการการทำงานของการเรียนรู้ของเครื่องขนาดใหญ่ได้อย่างง่ายดาย
  • ความปลอดภัยและการจัดการ: มีคุณสมบัติความปลอดภัยที่มีอยู่แล้ว เช่น การควบคุมการเข้าถึงตามบทบาท (RBAC) และการเข้ารหัสข้อมูล
  • บูรณาการ: มีการบูรณาการลึกกับบริการของ Databricks เพิ่มความเข้ากันได้และฟังก์ชัน
  • การจัดเก็บข้อมูลและการสำรองข้อมูล: มีกลยุทธ์การสำรองข้อมูลอัตโนมัติเพื่อความปลอดภัยและความน่าเชื่อถือของข้อมูล
  • ต้นทุน: ผู้ใช้จ่ายสำหรับแพลตฟอร์ม การจัดเก็บ และทรัพยากรการประมวลผล
  • การสนับสนุนและการบำรุงรักษา: มีการสนับสนุนและการบำรุงรักษาที่อุทิศจาก Databricks

สรุป

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

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

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

ฉันใช้เวลาที่ผ่านมา 5 ปีในการศึกษาสิ่งที่น่าสนใจเกี่ยวกับ Machine Learning และ Deep Learning ความเชี่ยวชาญและความหลงใหลของฉันทำให้ฉันเข้าร่วมในโครงการพัฒนาซอฟต์แวร์มากกว่า 50 โครงการที่มีความหลากหลาย โดยมุ่งเน้นไปที่ AI/ML ความอยากรู้อยากเห็นของฉันยังทำให้ฉันสนใจในด้าน Natural Language Processing ซึ่งเป็นสาขาที่ฉันต้องการสำรวจต่อไป