Modele și platforme AI
Urmărirea Modelelor Lingvistice Mari (LLM) cu MLflow: O Ghid Complet
Pe măsură ce Modelele Lingvistice Mari (LLM) cresc în complexitate și scară, urmărirea performanței, experimentelor și implementărilor lor devine din ce în ce mai dificilă. Aici intervine MLflow – oferind o platformă cuprinzătoare pentru gestionarea întregului ciclu de viață al modelelor de învățare automată, inclusiv LLM.
În acest ghid detaliat, vom explora cum să utilizăm MLflow pentru urmărirea, evaluarea și implementarea LLM. Vom acoperi totul, de la configurarea mediului dvs. la tehnici avansate de evaluare, cu multe exemple de cod și cele mai bune practici pe parcurs.
Configurarea Mediului Dvs.
Înainte de a ne scufunda în urmărirea LLM cu MLflow, să configurăm mediul nostru de dezvoltare. Trebuie să instalăm MLflow și alte biblioteci cheie:
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
După instalare, este o bună practică să restartați mediul Python pentru a vă asigura că toate bibliotecile sunt încărcate corect. Într-un notebook Jupyter, puteți utiliza:
import mlflow
import chromadb
<p>print(f"Versiunea MLflow: {mlflow.__version__}")
print(f"Versiunea ChromaDB: {chromadb.__version__}")
Acest lucru va confirma versiunile bibliotecilor cheie pe care le vom utiliza.
Înțelegerea Capacităților de Urmărire LLM ale MLflow
Sistemul de urmărire LLM al MLflow se bazează pe capacitățile sale existente de urmărire, adăugând funcții special concepute pentru aspectele unice ale LLM. Să descompunem componentele cheie:
Execuții și Experimente
În MLflow, o “execuție” reprezintă o singură execuție a codului modelului dvs., în timp ce un “experiment” este o colecție de execuții legate. Pentru LLM, o execuție poate reprezenta o singură întrebare sau un lot de prompturi procesate de model.
Componente de Urmărire Cheie
- Parametrii: Aceștia sunt configurații de intrare pentru LLM, cum ar fi temperatura, top_k sau max_tokens. Puteți înregistra acestea utilizând
mlflow.log_param()saumlflow.log_params(). - Metrice: Măsuri cantitative ale performanței LLM, cum ar fi acuratețea, latența sau scoruri personalizate. Utilizați
mlflow.log_metric()saumlflow.log_metrics()pentru a urmări acestea. - Prevederi: Pentru LLM, este crucial să înregistrați atât prompturile de intrare, cât și ieșirile modelului. MLflow stochează acestea ca artefacte în format CSV utilizând
mlflow.log_table(). - Artefacte: Orice fișiere sau date suplimentare legate de execuția LLM, cum ar fi puncte de control ale modelului, visualizări sau mostre de date. Utilizați
mlflow.log_artifact()pentru a stoca acestea.
Să examinăm un exemplu de bază de înregistrare a unei execuții LLM:
Acest exemplu demonstrează înregistrarea parametrilor, metrice și a intrărilor/ieșirilor ca artefacte de tabel.
import mlflow
import openai
<p>def întrebare_llm(prompt, max_tokens=100):
răspuns = openai.Completion.create(
engine="text-davinci-002",
prompt=prompt,
max_tokens=max_tokens
)
return răspuns.choices[0].text.strip()</p>
<p>cu mlflow.start_run():
prompt = "Explicați conceptul de învățare automată în termeni simpli."</p>
<p># Înregistrați parametrii
mlflow.log_param("model", "text-davinci-002")
mlflow.log_param("max_tokens", 100)</p>
<p># Întrebați LLM și înregistrați rezultatul
rezultat = întrebare_llm(prompt)
mlflow.log_metric("lungime_răspuns", len(rezultat))</p>
<p># Înregistrați promptul și răspunsul
mlflow.log_table("prompt_răspunsuri", {"prompt": [prompt], "răspuns": [rezultat]})</p>
<p>print(f"Răspuns: {rezultat}")
Implementarea LLM cu MLflow
MLflow oferă capacități puternice pentru implementarea LLM, facilitând servirea modelelor în medii de producție. Să explorăm cum să implementăm un LLM utilizând funcțiile de implementare ale MLflow.
Crearea unui Punct de Acces
Mai întâi, vom crea un punct de acces pentru LLM nostru utilizând clientul de implementare MLflow:
import mlflow
from mlflow.deployments import get_deploy_client
<p># Inițializați clientul de implementare
client = get_deploy_client("databricks")</p>
<p># Definiți configurația punctului de acces
nume_punct_de_acces = "punct_de_acces_llm"
config_punct_de_acces = {
"entități_deservite": [{
"nume": "model_gpt",
"model_extern": {
"nume": "gpt-3.5-turbo",
"furnizor": "openai",
"task": "llm/v1/completions",
"config_openai": {
"tip_api_openai": "azure",
"cheie_api_openai": "{{secrets/scope/openai_api_key}}",
"bază_api_openai": "{{secrets/scope/openai_api_base}}",
"nume_implementare_openai": "gpt-35-turbo",
"versiune_api_openai": "2023-05-15",
},
},
}],
}</p>
<p># Creați punctul de acces
client.create_endpoint(nume_punct_de_acces, config_punct_de_acces)
Acest cod configurează un punct de acces pentru un model GPT-3.5-turbo utilizând Azure OpenAI. Observați utilizarea secretelor Databricks pentru gestionarea sigură a cheilor API.
Testarea Punctului de Acces
Odată creat punctul de acces, putem testa:
<div class="relative flex flex-col rounded-lg">
<p>răspuns = client.predict(
endpoint=nume_punct_de_acces,
intrări={"prompt": "Explicați conceptul de rețele neuronale pe scurt.", "max_tokens": 100,},)</p>
print(răspuns)
Acest lucru va trimite o întrebare către modelul nostru implementat și va returna răspunsul generat.
Evaluarea LLM cu MLflow
Evaluarea este crucială pentru înțelegerea performanței și comportamentului LLM. MLflow oferă unelte cuprinzătoare pentru evaluarea LLM, incluzând atât metrice încorporate, cât și personalizate.
Pregătirea LLM pentru Evaluare
Pentru a evalua LLM cu mlflow.evaluate(), modelul dvs. trebuie să fie în una dintre următoarele forme:
- O instanță
mlflow.pyfunc.PyFuncModelsau un URI care pointează către un model MLflow înregistrat. - O funcție Python care acceptă intrări de șir și returnează un singur șir.
- Un URI de punct de acces MLflow Deployments.
- Setați
model=Noneși includeți ieșirile modelului în datele de evaluare.
Să examinăm un exemplu utilizând un model MLflow înregistrat:
import mlflow
import openai
<p>cu mlflow.start_run():
prompt_sistem = "Răspundeți la următoarea întrebare concis."
informații_model_inregistrat = mlflow.openai.log_model(
model="gpt-3.5-turbo",
task=openai.chat.completions,
cale_artefact="model",
mesaje=[
{"rol": "sistem", "conținut": prompt_sistem},
{"rol": "utilizator", "conținut": "{întrebare}"},
],
)</p>
<p># Pregătiți datele de evaluare
date_evaluare = pd.DataFrame({
"întrebare": ["Ce este învățarea automată?", "Explicați rețelele neuronale."],
"adevăr_de_referință": [
"Învățarea automată este un subset al inteligenței artificiale care permite sistemelor să învețe și să se îmbunătățească din experiență fără programare explicită.",
"Rețelele neuronale sunt sisteme de calcul inspirate de rețelele neuronale biologice, constând din noduri interconectate care procesează și transmit informații.",
]
})</p>
<p># Evaluați modelul
rezultate = mlflow.evaluate(
informații_model_inregistrat.model_uri,
date_evaluare,
ținte="adevăr_de_referință",
tip_model="întrebare-răspuns",
)</p>
<p>print(f"Metrișe de evaluare: {rezultate.metrics}")
Acest exemplu înregistrează un model OpenAI, pregătește datele de evaluare și apoi evaluează modelul utilizând metricele încorporate ale MLflow pentru sarcini de întrebare-răspuns.
Metrișe de Evaluare Personalizate
MLflow permite definirea metrișelor personalizate pentru evaluarea LLM. Iată un exemplu de creare a unei metrișe personalizate pentru evaluarea profesionalismului răspunsurilor:
from mlflow.metrics.genai import EvaluationExample, make_genai_metric
<p>profesionalism = make_genai_metric(
nume="profesionalism",
definiție="Măsura stilului de comunicare formal și adecvat.",
prompt_de_notare=(
"Notați profesionalismul răspunsului pe o scară de la 0 la 4:\n"
"0: Foarte casual sau inadecvat\n"
"1: Casual dar respectuos\n"
"2: Moderat formal\n"
"3: Profesionist și adecvat\n"
"4: Foarte formal și expert"
),
exemple=[
EvaluationExample(
intrare="Ce este MLflow?",
ieșire="MLflow este un instrument de gestionare a proiectelor de învățare automată.",
scor=1,
justificare="Răspunsul este casual și utilizează limbaj informal.",
),
EvaluationExample(
intrare="Ce este MLflow?",
ieșire="MLflow este o platformă deschisă pentru ciclul de viață al modelelor de învățare automată, incluzând experimentarea, reprodusibilitatea și implementarea.",
scor=4,
justificare="Răspunsul este formal, concis și profesionist.",
)
],
model="openai:/gpt-3.5-turbo-16k",
parametri={"temperatură": 0.0},
agregări=["medie", "varianță"],
mai_bun_este_mai_bun=True,
)</p>
<p># Utilizați metrișa personalizată în evaluare
rezultate = mlflow.evaluate(
informații_model_inregistrat.model_uri,
date_evaluare,
ținte="adevăr_de_referință",
tip_model="întrebare-răspuns",
metrișe_suplimentare=[profesionalism]
)</p>
<p>print(f"Scor de profesionalism: {rezultate.metrics['profesionalism_medie']}")
Această metrișă personalizată utilizează GPT-3.5-turbo pentru a nota profesionalismul răspunsurilor, demonstrând cum puteți utiliza LLM pentru evaluare.
Tehnici Avansate de Evaluare LLM
Pe măsură ce LLM devin mai sofisticate, tehnicile de evaluare devin și ele mai avansate. Să explorăm câteva metode avansate de evaluare utilizând MLflow.
Evaluarea Generării Augmentate de Recuperare (RAG)
Sistemele RAG combină puterea modelelor de recuperare și generare. Evaluarea sistemelor RAG necesită evaluarea atât a componentei de recuperare, cât și a celei de generare. Iată cum puteți configura un sistem RAG și evalua-l utilizând 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># Încărcați și preprocesați documentele
încărcător = WebBaseLoader(["https://mlflow.org/docs/latest/index.html"])
documente = încărcător.load()
splitter_text = CharacterTextSplitter(mărime_bucată=1000, suprapunere_bucată=0)
bucăți = splitter_text.split_documents(documente)</p>
<p># Creați magazia de vectori
încărcări = OpenAIEmbeddings()
magazie_vectori = Chroma.from_documents(bucăți, încărcări)</p>
<p># Creați lanțul RAG
llm = OpenAI(temperatură=0)
lanț_qa = RetrievalQA.from_chain_type(
llm=llm,
tip_lanț="stuff",
recuperator=magazie_vectori.as_recuperator(),
return_source_documents=True
)</p>
<p># Funcție de evaluare
def evaluare_rag(întrebare):
rezultat = lanț_qa({"întrebare": întrebare})
return rezultat["rezultat"], [doc.page_content for doc in rezultat["source_documents"]]</p>
<p># Pregătiți datele de evaluare
întrebări_evaluare = [
"Ce este MLflow?",
"Cum gestionează MLflow urmărirea experimentelor?",
"Care sunt componentele principale ale MLflow?",
]</p>
<p># Evaluați utilizând MLflow
cu mlflow.start_run():
pentru întrebare în întrebări_evaluare:
răspuns, surse = evaluare_rag(întrebare)</p>
<p>mlflow.log_param(f"întrebare", întrebare)
mlflow.log_metric("număr_surse", len(surse))
mlflow.log_text(răspuns, f"răspuns_{întrebare}.txt")</p>
<p>pentru i, sursă în enumerate(surse):
mlflow.log_text(sursă, f"sursă_{întrebare}_{i}.txt")</p>
<p># Înregistrați metrișe personalizate
mlflow.log_metric("medie_surse_pe_întrebare", sum(len(evaluare_rag(q)[1]) pentru q în întrebări_evaluare) / len(întrebări_evaluare))
Acest exemplu configurează un sistem RAG utilizând LangChain și Chroma, apoi îl evaluează prin înregistrarea întrebărilor, răspunsurilor, surselor recuperate și metrișelor personalizate în MLflow.
Evaluarea Strategiei de Împărțire a Bucăților
Modul în care împărțiți documentele poate avea un impact semnificativ asupra performanței RAG. MLflow poate ajuta la evaluarea diferitelor strategii de împărțire a bucăților:
import mlflow
from langchain.text_splitter import CharacterTextSplitter, TokenTextSplitter
<p>def evaluare_strategie_împărțire(documente, mărime_bucată, suprapunere_bucată, splitter_class):
splitter = splitter_class(mărime_bucată=mărime_bucată, suprapunere_bucată=suprapunere_bucată)
bucăți = splitter.split_documents(documente)</p>
<p>cu mlflow.start_run():
mlflow.log_param("mărime_bucată", mărime_bucată)
mlflow.log_param("suprapunere_bucată", suprapunere_bucată)
mlflow.log_param("splitter_class", splitter_class.__name__)</p>
<p>mlflow.log_metric("număr_bucăți", len(bucăți))
mlflow.log_metric("lungime_medie_bucată", sum(len(bucată.page_content) pentru bucată în bucăți) / len(bucăți))</p>
<p># Evaluați performanța de recuperare (simplificat)
recuperări_corecte = sum(1 pentru _ în range(100) dacă simulate_retrieval(bucăți))
mlflow.log_metric("acuratețe_recuperare", recuperări_corecte / 100)</p>
<p># Evaluați diferite strategii
pentru mărime_bucată în [500, 1000, 1500]:
pentru suprapunere_bucată în [0, 50, 100]:
pentru splitter_class în [CharacterTextSplitter, TokenTextSplitter]:
evaluare_strategie_împărțire(documente, mărime_bucată, suprapunere_bucată, splitter_class)</p>
<p># Comparați rezultatele
execuție_câștigătoare = mlflow.search_runs(order_by=["metrics.acuratețe_recuperare DESC"]).iloc[0]
print(f"Strategie de împărțire câștigătoare: {execuție_câștigătoare['params.splitter_class']} cu mărime {execuție_câștigătoare['params.mărime_bucată']} și suprapunere {execuție_câștigătoare['params.suprapunere_bucată']}")
Acest script evaluează diferite combinații de mărimi de bucăți, suprapuneri și metode de împărțire, înregistrând rezultatele în MLflow pentru comparație ușoară.
Vizualizarea Rezultatelor de Evaluare LLM
MLflow oferă diverse modalități de a vizualiza rezultatele evaluării LLM. Iată câteva tehnici:
Utilizarea Interfeței MLflow
După rularea evaluărilor, puteți utiliza interfața MLflow pentru a vizualiza rezultatele:
- Începeți interfața MLflow:
mlflow ui - Deschideți un browser web și accesați
http://localhost:5000 - Selectați experimentul și execuțiile pentru a vizualiza metrișe, parametri și artefacte
Vizualizări Personalizate
Puteți crea vizualizări personalizate ale rezultatelor de evaluare utilizând biblioteci precum Matplotlib sau Plotly, apoi înregistrați-le ca artefacte:
import matplotlib.pyplot as plt
import mlflow
<p>def plot_metric_comparison(nume_metrică, id-uri_execuții):
plt.figure(figsize=(10, 6))
pentru id_execuție în id-uri_execuții:
execuție = mlflow.get_run(id_execuție)
istoric_metrică = mlflow.get_metric_history(id_execuție, nume_metrică)
plt.plot([m.step pentru m în istoric_metrică], [m.value pentru m în istoric_metrică], label=execuție.data.tags.get("mlflow.runName", id_execuție))</p>
<p>plt.title(f"Comparație {nume_metrică}")
plt.xlabel("Pas")
plt.ylabel(nume_metrică)
plt.legend()</p>
<p># Salvați și înregistrați plotul
plt.savefig(f"{nume_metrică}_comparație.png")
mlflow.log_artifact(f"{nume_metrică}_comparație.png")</p>
<p># Utilizare
cu mlflow.start_run():
plot_metric_comparison("relevanță_răspuns", ["id_execuție_1", "id_execuție_2", "id_execuție_3"])
Această funcție creează un plot liniar care compară o anumită metrică între mai multe execuții și o înregistrează ca artefact.
Alternative la MLflow Open Source
Există numeroase alternative la MLflow open source pentru gestionarea fluxurilor de lucru de învățare automată, fiecare oferind funcții și integrări unice.
MLflow Gestionat de Databricks
MLflow gestionat, găzduit de Databricks, oferă funcționalitățile de bază ale MLflow open source, dar cu beneficii suplimentare, cum ar fi integrarea perfectă cu ecosistemul Databricks, funcții de securitate avansate și infrastructură gestionată. Acesta este o alegere excelentă pentru organizații care necesită securitate robustă și scalabilitate.
Azure Machine Learning
Azure Machine Learning oferă o soluție de învățare automată de la capăt la coadă pe platforma cloud Azure. Aceasta oferă compatibilitate cu componente MLflow, cum ar fi registrul de modele și urmărirea experimentelor, deși nu se bazează pe MLflow.
Platforme ML Dedicate
Mai multe companii oferă produse gestionate de învățare automată cu funcții diverse:
- neptune.ai: Se concentrează pe urmărirea experimentelor și gestionarea modelului.
- Weights & Biases: Oferă urmărirea extinsă a experimentelor, versionarea datasetului și unelte de colaborare.
- Comet ML: Furnizează urmărirea experimentelor, monitorizarea producției modelului și înregistrarea datelor.
- Valohai: Se specializează în pipeline-uri de învățare automată și orchestrare.
Metaflow
Metaflow, dezvoltat de Netflix (NFLX ), este un cadru open source conceput pentru a orchestra fluxurile de lucru de date și pipeline-uri de învățare automată. Deși excellează la gestionarea implementărilor la scară largă, lipsește funcții cuprinzătoare de urmărire a experimentelor și gestionare a modelului în comparație cu MLflow.
Amazon SageMaker și Google’s Vertex AI
Atât Amazon SageMaker (AMZN ), cât și Google’s Vertex AI (GOOGL ) oferă soluții MLOps de la capăt la coadă integrate în platformele cloud respective. Aceste servicii oferă unelte robuste pentru construirea, antrenarea și implementarea modelelor de învățare automată la scară.
Comparație Detaliată
MLflow Gestionat vs. MLflow Open Source
MLflow gestionat de Databricks oferă mai multe avantaje față de versiunea open source, incluzând:
- Configurare și Implementare: Integrarea perfectă cu ecosistemul Databricks reduce timpul de configurare și efortul.
- Scalabilitate: Capabil să gestioneze fluxuri de lucru de învățare automată la scară largă cu ușurință.
- Securitate și Gestionare: Funcții de securitate integrate, cum ar fi controlul accesului bazat pe rol (RBAC) și criptarea datelor.
- Integrare: Integrare profundă cu serviciile Databricks, îmbunătățind interoperabilitatea și funcționalitatea.
- Stocare și Backup a Datelor: Strategii automate de backup pentru a asigura siguranța și fiabilitatea datelor.
- Cost: Utilizatorii plătesc pentru platformă, stocare și resurse de calcul.
- Asistență și Întreținere: Asistență și întreținere dedicate oferite de Databricks.
Concluzie
Urmărirea Modelelor Lingvistice Mari cu MLflow oferă un cadru robust pentru gestionarea complexităților dezvoltării, evaluării și implementării LLM. Prin urmarea celor mai bune practici și utilizarea funcțiilor avansate prezentate în acest ghid, puteți crea experimente LLM mai organizate, reproduse și informative.
Rețineți că domeniul LLM evoluează rapid, și noi tehnici de evaluare și urmărire apar constant. Rămâneți la curent cu ultimele lansări MLflow și cercetări LLM pentru a continua să îmbunătățiți procesele de urmărire și evaluare.
Pe măsură ce aplicați aceste tehnici în proiectele dvs., veți dezvolta o înțelegere mai profundă a comportamentului și performanței LLM, conducând la modele de limbaj mai eficiente și mai de încredere.














