Connect with us

Yapay Zekâ Araçları 101

Büyük Dil Modellerini (LLM) MLflow ile İzleme: Tam Bir Rehber

mm
MLflow LLM Guide Evaluation

Büyük Dil Modelleri (LLM) karmaşıklık ve ölçek açısından büyüdükçe, performanslarını, deneylerini ve dağıtımlarını izlemek giderek daha zor hale geliyor. İşte burada MLflow devreye giriyor – makine öğrenimi modellerinin tüm yaşam döngüsünü yönetmek için kapsamlı bir platform sunuyor, bu da LLM’leri içerir.

Bu derinlemesine rehberde, LLM’leri izlemek, değerlendirmek ve dağıtmak için MLflow’u nasıl kullanacağınızı keşfedeceğiz. Ortamınızı kurmaktan advanced değerlendirme tekniklerine kadar her şeyi kapsayacağız, ayrıca yol boyunca birçok kod örneği ve en iyi uygulamalar sunacağız.

Büyük Dil Modellerinde (LLM) MLflow’un İşlevselliği

MLflow makine öğrenimi ve veri bilimciliği topluluğunda, özellikle makine öğrenimi modellerinin yaşam döngüsünü yönetmek için önemli bir araç haline geldi. LLM’ler söz konusu olduğunda, MLflow LLM geliştirme, izleme, değerlendirme ve dağıtım sürecini önemli ölçüde basitleştiren güçlü bir araç seti sunar. LLM alanında MLflow’un nasıl işlediğine ve mühendisler ve veri bilimcilerine sunduğu faydaların bir özeti aşağıda verilmiştir.

MLflow'un Core Bileşenlerini Öğrenin

LLM Etkileşimlerini İzleme ve Yönetme

MLflow’un LLM izleme sistemi, LLM’lerin benzersiz gereksinimlerine göre uyarlanan mevcut izleme yeteneklerinin bir uzantısıdır. Model etkileşimlerinin kapsamlı bir şekilde izlenmesini sağlar, bu da aşağıdaki ana yönleri içerir:

  • Parametreler: LLM için girdi parametrelerini detaylandıran anahtar-değer çiftlerini günlüğe kaydetme, Örneğin modelle ilgili parametreler gibi top_k ve sıcaklık. Bu, her çalıştırma için bağlam ve yapılandırma sağlar, böylece model yapılandırmasının tüm yönleri günlüğe kaydedilir.
  • Metriklar: LLM’nin performansını ve doğruluğunu sağlayan nicel ölçümler. Bunlar dinamik olarak güncellenebilir, böylece gerçek zamanlı veya işlemden sonra içgörüler sunar.
  • Tahminler: LLM’ye gönderilen girdileri ve karşılık gelen çıktıları yakalamak, bunlar yapılandırılmış bir formatda kolayca geri çağrılabilen ve analiz edilebilen varlıklar olarak depolanır.
  • Varlıklar: Tahminlerin ötesinde, MLflow görselleştirmeler, seri hale getirilmiş modeller ve yapılandırılmış veri dosyaları gibi çeşitli çıktı dosyalarını depolayabilir, böylece model performansının ayrıntılı bir şekilde belgelenmesi ve analizi sağlanır.

Bu yapılandırılmış yaklaşım, LLM’lerle tüm etkileşimlerin titizlikle kaydedildiğini sağlar, böylece metin oluşturucu modeller için kapsamlı bir soy ve kalite izleme sağlar.

LLM Değerlendirmesi

LLM’leri değerlendirmek, onların üretken doğası ve tek bir temel gerçekliğin olmaması nedeniyle benzersiz zorluklar sunar. MLflow, LLM’ler için özel olarak tasarlanmış değerlendirme araçları ile bu zorluğu hafifletir. Ana özellikler arasında şunlar bulunur:

  • Esnek Model Değerlendirmesi: MLflow pyfunc modeli, kayıtlı bir MLflow modeline işaret eden bir URI veya modelinizi temsil eden herhangi bir Python çağırılabilirlerini destekler.
  • Kapsamlı Metriklar: LLM değerlendirme için bir dizi metrik sunar, bunlar arasında SaaS model bağımlı metriklere (örneğin, cevap alaka düzeyi) ve işlev tabanlı metriklere (örneğin, ROUGE, Flesch Kincaid) dayalı olanlar bulunur.
  • Önceden Tanımlanmış Metric Koleksiyonları: Kullanım durumuna bağlı olarak, Örneğin soru-cevap veya metin özetleme, MLflow değerlendirme sürecini basitleştirmek için önceden tanımlanmış metriklere sahiptir.
  • Özel Metric Oluşturma: Kullanıcıların, özel değerlendirme ihtiyaçlarına göre özel metriklere tanımlama ve uygulama yapmasına olanak tanır, böylece model değerlendirmesinin esnekliği ve derinliği artırılır.
  • Statik Veri Setleri ile Değerlendirme: Model belirtmeden statik veri setlerinin değerlendirilmesine olanak tanır, bu da model çıkarımını yeniden çalıştırmadan hızlı değerlendirmeler için faydalıdır.

Dağıtım ve Entegrasyon

MLflow ayrıca LLM’lerin dağıtımını ve entegrasyonunu destekler:

  • MLflow Dağıtımları Sunucusu: Birden çok LLM sağlayıcısı ile etkileşime girmek için birleşik bir arayüz görevi görür. Entegrasyonları basitleştirir, kimlik bilgilerini güvenli bir şekilde yönetir ve tutarlı bir API deneyimi sunar. Bu sunucu, popüler SaaS satıcılarının temel modellerini ve self-hosted modellerini destekler.
  • Birleşik Son Nokta: Sağlayıcılar arasında kod değişiklikleri olmadan kolayca geçiş yapılmasına olanak tanır, bu da minimum kesinti süresini ve artan esnekliği sağlar.
  • Entegre Sonuç Görünümü: Kapsamlı değerlendirme sonuçları sağlar, bunlar doğrudan kodda veya MLflow UI’de ayrıntılı analiz için erişilebilir.

MLflow, araçlar ve entegrasyonların kapsamlı bir seti, LLM’ler ile çalışan mühendisler ve veri bilimcileri için değerli bir varlık haline getirir.

Ortamınızı Kurma

LLM’leri MLflow ile izlemeden önce, geliştirme ortamımızı kurmamız gerekiyor. MLflow ve birkaç diğer ana kütüphaneyi yüklememiz gerekiyor:

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

Kurulumdan sonra, tüm kütüphanelerin doğru bir şekilde yüklenmesini sağlamak için Python ortamınızı yeniden başlatmanız iyi bir uygulamadır. Jupyter defterinde, bunu kullanabilirsiniz:

import mlflow
import chromadb

print(f"MLflow sürümü: {mlflow.__version__}")
print(f"ChromaDB sürümü: {chromadb.__version__}")

Bu, kullandığımız ana kütüphanelerin sürümlerini onaylar.

MLflow’un LLM İzleme Yeteneklerini Anlama

MLflow’un LLM izleme sistemi, mevcut izleme yeteneklerine dayanarak LLM’lerin benzersiz yönlerine göre uyarlanır. Ana bileşenleri parçalayalım:

Çalışmalar ve Deneyler

MLflow’da bir “çalışma”, model kodunuzun tek bir yürütülmesini temsil ederken, bir “deney” ilgili çalışmalardan oluşur. LLM’ler için bir çalıştırma, tek bir sorgu veya model tarafından işlenen bir dizi promotu temsil edebilir.

Ana İzleme Bileşenleri

  1. Parametreler: Bu, LLM’niz için girdi yapılandırmasıdır, Örneğin sıcaklık, top_k veya max_tokens. mlflow.log_param() veya mlflow.log_params() kullanarak bunları günlüğe kaydedebilirsiniz.
  2. Metriklar: LLM’nizin performansını nicel olarak ölçen ölçümler, Örneğin doğruluk, gecikme veya özel puanlar. mlflow.log_metric() veya mlflow.log_metrics() kullanarak bunları izleyebilirsiniz.
  3. Tahminler: LLM’ler için, hem girdi promt’lerini hem de model çıktılarını günlüğe kaydetmek çok önemlidir. MLflow, bunları CSV formatında yapılandırılmış bir biçimde mlflow.log_table() kullanarak varlıklar olarak depolar.
  4. Varlıklar: LLM çalıştırmanızla ilgili herhangi bir ek dosya veya veri, Örneğin model checkpoints, görselleştirmeler veya veri seti örnekleri. mlflow.log_artifact() kullanarak bunları depolayabilirsiniz.

Temel bir LLM çalıştırma örneğini günlüğe kaydetmeyi görelim:

Bu örnek, parametreleri, metrikları ve girdi/çıktıyı bir tablo varlığı olarak günlüğe kaydetmeyi gösterir.


import mlflow
import openai

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()

with mlflow.start_run():
prompt = "Makine öğreniminin basit bir açıklamasını yapın."

# Parametreleri günlüğe kaydet
mlflow.log_param("model", "text-davinci-002")
mlflow.log_param("max_tokens", 100)

# LLM'yi sorgulayın ve sonucu günlüğe kaydet
result = query_llm(prompt)
mlflow.log_metric("response_length", len(result))

# Promt ve yanıtı günlüğe kaydet
mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})

print(f"Yanıt: {result}")

LLM’leri MLflow ile Dağıtma

MLflow, LLM’lerin dağıtımı için güçlü yetenekler sunar, bu da modellerinizi üretim ortamlarında sunmayı kolaylaştırır. MLflow’un dağıtım özelliklerini kullanarak bir LLM dağıtmayı görelim.

Bir Son Nokta Oluşturma

Öncelikle, MLflow’un dağıtım istemcisini kullanarak LLM için bir son nokta oluşturacağız:

import mlflow
from mlflow.deployments import get_deploy_client

# Dağıtım istemcisini başlat
client = get_deploy_client("databricks")

# Son nokta yapılandırmasını tanımla
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",
},
},
}],
}

# Son noktayı oluştur
client.create_endpoint(name=endpoint_name, config=endpoint_config)

Bu kod, Azure OpenAI’de bir GPT-3.5-turbo modeli için bir son nokta kurar. Databricks gizlilikleri için güvenli API anahtarı yönetimini not edin.

Son Noktayı Test Etme

Son nokta oluşturulduktan sonra, test edebiliriz:

<div class="relative flex flex-col rounded-lg">

response = client.predict(
endpoint=endpoint_name,
inputs={"prompt": "Nöral ağların kavramını kısaca açıklar mısınız?", "max_tokens": 100,},)

print(response)

Bu, modelimize bir promot gönderip üretilen yanıtı dönderecektir.

LLM’leri MLflow ile Değerlendirme

Değerlendirme, LLM’nizin performansını ve davranışını anlamak için çok önemlidir. MLflow, LLM’ler için kapsamlı araçlar sunar, Bunlar hem yerleşik hem de özel metriklere sahiptir.

LLM’nizi Değerlendirmeye Hazırlama

LLM’nizi mlflow.evaluate() ile değerlendirmek için, modeliniz aşağıdaki biçimlerden birinde olmalıdır:

  1. Bir mlflow.pyfunc.PyFuncModel örneği veya bir kayıtlı MLflow modeline işaret eden bir URI.
  2. Girdi olarak dize alan ve tek bir dize döndüren bir Python işlevi.
  3. Bir MLflow Dağıtımları son nokta URI’si.
  4. Model=None olarak ayarlayın ve değerlendirme verisine model çıktılarını dahil edin.

Bir kayıtlı MLflow modeli kullanarak bir örnek görelim:

import mlflow
import openai

with mlflow.start_run():
system_prompt = "Aşağıdaki soruyu kısaca cevaplayın."
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}"},
],
)

# Değerlendirme verisini hazırla
eval_data = pd.DataFrame({
"question": ["Makine öğrenimi nedir?", "Nöral ağları açıklar mısınız."],
"ground_truth": [
"Makine öğrenimi, sistemlerin deneyimden öğrenmesini ve programlanmadan verbessirmesini sağlayan AI'nin bir alt kümesidir.",
"Nöral ağlar, biyolojik nöral ağlardan esinlenen, birbirine bağlı düğümlerden oluşan ve bilgiyi işleyen ve ileten bilgisayar sistemleridir.",
]
})

# Modeli değerlendir
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
)

print(f"Değerlendirme metriği: {results.metrics}")

Bu örnek, bir OpenAI modelini günlüğe kaydeder, değerlendirme verisi hazırlar ve sonra MLflow’un soru-cevap görevleri için yerleşik metrikları kullanarak modeli değerlendirir.

Özel Değerlendirme Metriği

MLflow, LLM değerlendirme için özel metriklere tanımlama yapmanıza olanak tanır. Yanıtların profesyonelliğini değerlendirmek için özel bir metriğin oluşturulmasına bir örnek verelim:

from mlflow.metrics.genai import EvaluationExample, make_genai_metric

professionalism = make_genai_metric(
name="professionalism",
definition="Resmi ve uygun iletişim tarzı ölçüsü.",
grading_prompt=(
"Cevabın profesyonelliğini 0-4 arasında puanlayın:\n"
"0: Çok gevşek veya uygunsuz\n"
"1: Gevşek ancak saygılı\n"
"2: Orta derecede resmi\n"
"3: Profesyonel ve uygun\n"
"4: Yüksek derecede resmi ve uzmanca hazırlanmış"
),
examples=[
EvaluationExample(
input="Makine öğrenimi nedir?",
output="Makine öğrenimi, sistemlerin deneyimden öğrenmesini sağlayan AI'nin bir parçasıdır.",
score=3,
justification="Cevap resmi ve uygun bir şekilde verilmiştir.",
),
EvaluationExample(
input="Makine öğrenimi nedir?",
output="Makine öğrenimi gibi bir şey var, çok cool!",
score=1,
justification="Cevap gevşek ve resmi olmayan bir şekilde verilmiştir.",
)
],
model="openai:/gpt-3.5-turbo-16k",
parameters={"temperature": 0.0},
aggregations=["mean", "variance"],
greater_is_better=True,
)

# Özel metriği değerlendirme sırasında kullan
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
extra_metrics=[professionalism]
)

print(f"Profesyonellik puanı: {results.metrics['professionalism_mean']}")

Bu özel metrik, GPT-3.5-turbo’yu kullanarak yanıtların profesyonelliğini puanlar, böylece LLM’lerin kendilerini değerlendirmede nasıl kullanılabileceğini gösterir.

Gelişmiş LLM Değerlendirme Teknikleri

LLM’ler daha da geliştikçe, onları değerlendirmek için kullanılan teknikler de gelişmektedir. MLflow’u kullanarak bazı gelişmiş değerlendirme yöntemlerini keşfedeceğiz.

İzleme Artırılan Oluşturma (RAG) Değerlendirmesi

RAG sistemleri, algoritma tabanlı ve üretken modellerin gücünü birleştirir. RAG sistemlerini değerlendirmek, hem algoritma hem de üretken bileşenlerin değerlendirilmesini gerektirir. Bir RAG sistemini nasıl kurup MLflow ile değerlendirebileceğimizi görelim:

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

# Belgeleri yükle ve ön işle
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)

# Vektör deposu oluştur
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)

# RAG zincirini oluştur
llm = OpenAI(temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type=”stuff”,
retriever=vectorstore.as_retriever(),
return_source_documents=True
)

# Değerlendirme işlevi
def evaluate_rag(question):
result = qa_chain({“query”: question})
return result[“result”], [doc.page_content for doc in result[“source_documents”]]

# Değerlendirme verisini hazırla
eval_questions = [
“Makine öğrenimi nedir?”,
“MLflow deney izleme nasıl çalışır?”,
“MLflow’un ana bileşenleri nelerdir?”,
]

# MLflow ile değerlendir
with mlflow.start_run():

Son beş yıldır Makine Öğrenimi ve Derin Öğrenme dünyasına kendimi daldırmış bulunuyorum. Tutkum ve uzmanlığım, özellikle AI/ML odaklı 50'den fazla çeşitli yazılım mühendisliği projesine katkıda bulunmama yol açtı. Süregelen meraklılığım ayrıca beni Doğal Dil İşleme'ye doğru çekti, bu alanda daha fazla keşfetmeye hevesliyim.