เครื่องมือ AI 101

การติดตามโมเดลภาษาขนาดใหญ่ (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> [securities_stock_price_tag symbol="GOOGL" exchange="NASDAQ"]

<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 มันให้ความเข้ากันได้กับส่วนประกอบของ 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 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 ซึ่งเป็นสาขาที่ฉันต้องการสำรวจต่อไป