AI 뉴스허브

MLflow를 사용한 대규모 언어 모델(LLM) 추적: 완전한 가이드

MLflow를 사용한 대규모 언어 모델(LLM) 추적: 완전한 가이드

MLflow를 사용한 대규모 언어 모델(LLM) 추적: 완전한 가이드

_*]:min-w-0″>

대규모 언어 모델(LLM)이 복잡하고 규모가 커짐에 따라 성능, 실험 및 배포를 추적하는 것이 점점 더 어려워지고 있습니다. 여기서 MLflow가 등장합니다. LLM을 포함한 머신 러닝 모델의 전체 수명 주기를 관리하기 위한 포괄적인 플랫폼을 제공합니다.

이 심층 가이드에서는 LLM을 추적, 평가 및 배포하기 위해 MLflow를 활용하는 방법을 살펴보겠습니다. 환경 설정부터 고급 평가 기술까지 모든 것을 다루며, 그 과정에서 많은 코드 예제와 모범 사례를 제공합니다.

대규모 언어 모델(LLM)의 MLflow 기능

ML플로우 머신 러닝 및 데이터 과학 커뮤니티에서 핵심 도구가 되었으며, 특히 머신 러닝 모델의 수명 주기를 관리하는 데 유용합니다. 대규모 언어 모델(LLM)과 관련하여 MLflow는 이러한 모델을 개발, 추적, 평가 및 배포하는 프로세스를 상당히 간소화하는 강력한 도구 모음을 제공합니다. MLflow가 LLM 공간에서 어떻게 기능하는지와 엔지니어와 데이터 과학자에게 제공하는 이점에 대한 개요는 다음과 같습니다.

LLM 상호작용 추적 및 관리

MLflow의 LLM 추적 시스템은 LLM의 고유한 요구 사항에 맞춰 기존 추적 기능을 향상시킨 것입니다. 다음과 같은 주요 측면을 포함하여 모델 상호 작용의 포괄적인 추적이 가능합니다.

  • 매개변수: LLM에 대한 입력 매개변수(예: 모델별 매개변수)를 자세히 설명하는 키-값 쌍 로깅 top_k 그리고 temperature. 이는 각 실행에 대한 컨텍스트와 구성을 제공하여 모델 구성의 모든 측면이 캡처되도록 보장합니다.
  • 메트릭: LLM의 성과와 정확성에 대한 통찰력을 제공하는 양적 측정. 이는 실행이 진행됨에 따라 동적으로 업데이트되어 실시간 또는 사후 프로세스 통찰력을 제공할 수 있습니다.
  • 예측: LLM에 전송된 입력과 해당 출력을 캡처하여 쉽게 검색하고 분석할 수 있도록 구조화된 형식의 아티팩트로 저장합니다.
  • 유물: 예측 이외에도 MLflow는 시각화, 직렬화된 모델, 구조화된 데이터 파일 등 다양한 출력 파일을 저장할 수 있어 모델 성능에 대한 상세한 문서화와 분석이 가능합니다.

이러한 구조화된 접근 방식은 LLM과의 모든 상호작용이 세심하게 기록되도록 보장하여 텍스트 생성 모델에 대한 포괄적인 계보 및 품질 추적을 제공합니다.

LLM 평가

LLM 평가는 생성적 특성과 단일한 기본 진실의 부족으로 인해 고유한 과제를 안겨줍니다. MLflow는 LLM을 위해 설계된 특수 평가 도구로 이를 간소화합니다. 주요 기능은 다음과 같습니다.

  • 다양한 모델 평가: MLflow pyfunc 모델, 등록된 MLflow 모델을 가리키는 URI 또는 ​​모델을 나타내는 Python 호출 가능 모델 등 다양한 유형의 LLM을 평가하는 것을 지원합니다.
  • 종합적인 지표: SaaS 모델 기반 측정 항목(예: 답변 관련성)과 기능 기반 측정 항목(예: ROUGE, Flesch Kincaid)을 포함하여 LLM 평가에 맞춰 조정된 다양한 측정 항목을 제공합니다.
  • 미리 정의된 메트릭 컬렉션: 질문 답변이나 텍스트 요약과 같은 사용 사례에 따라 MLflow는 평가 프로세스를 단순화하기 위해 미리 정의된 메트릭을 제공합니다.
  • 사용자 정의 메트릭 생성: 사용자가 특정 평가 요구 사항에 맞춰 사용자 정의 메트릭을 정의하고 구현하여 모델 평가의 유연성과 심층성을 향상시킬 수 있습니다.
  • 정적 데이터 세트를 사용한 평가: 모델을 지정하지 않고도 정적 데이터 세트를 평가할 수 있으므로 모델 추론을 다시 실행하지 않고도 빠르게 평가하는 데 유용합니다.

배포 및 통합

MLflow는 또한 LLM의 원활한 배포 및 통합을 지원합니다.

  • MLflow 배포 서버: 여러 LLM 공급자와 상호 작용하기 위한 통합 인터페이스 역할을 합니다. 통합을 간소화하고, 자격 증명을 안전하게 관리하며, 일관된 API 경험을 제공합니다. 이 서버는 인기 있는 SaaS 공급업체의 다양한 기본 모델과 자체 호스팅 모델을 지원합니다.
  • 통합 엔드포인트: 코드 변경 없이 공급자 간을 쉽게 전환할 수 있어 다운타임이 최소화되고 유연성이 향상됩니다.
  • 통합 결과 보기: 포괄적인 평가 결과를 제공하며, 코드에서 직접 액세스하거나 자세한 분석을 위해 MLflow UI를 통해 액세스할 수 있습니다.

MLflow는 포괄적인 도구와 통합 기능을 갖추고 있어 고급 NLP 모델을 사용하는 엔지니어와 데이터 과학자에게 매우 귀중한 자산입니다.

환경 설정하기

MLflow로 LLM을 추적하기 전에 개발 환경을 설정해 보겠습니다. MLflow와 몇 가지 다른 주요 라이브러리를 설치해야 합니다.

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

설치 후 모든 라이브러리가 제대로 로드되었는지 확인하기 위해 Python 환경을 다시 시작하는 것이 좋습니다. Jupyter 노트북에서 다음을 사용할 수 있습니다.

import mlflowimport chromadbprint(f"MLflow version: {mlflow.__version__}")print(f"ChromaDB version: {chromadb.__version__}")

이렇게 하면 사용할 주요 라이브러리의 버전이 확인됩니다.

MLflow의 LLM 추적 기능 이해

MLflow의 LLM 추적 시스템은 기존 추적 기능을 기반으로 구축되어 LLM의 고유한 측면에 맞게 특별히 설계된 기능을 추가합니다. 주요 구성 요소를 분석해 보겠습니다.

실행 및 실험

MLflow에서 “실행”은 모델 코드의 단일 실행을 나타내는 반면 “실험”은 관련 실행의 모음입니다. LLM의 경우 실행은 모델에서 처리한 단일 쿼리 또는 프롬프트 배치를 나타낼 수 있습니다.

주요 추적 구성 요소

  1. 매개변수: 이는 온도, top_k 또는 max_tokens와 같은 LLM의 입력 구성입니다. 다음을 사용하여 이를 기록할 수 있습니다. 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 mlflowimport openaidef 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 = "Explain the concept of machine learning in simple terms."        # Log parameters    mlflow.log_param("model", "text-davinci-002")    mlflow.log_param("max_tokens", 100)        # Query the LLM and log the result    result = query_llm(prompt)    mlflow.log_metric("response_length", len(result))        # Log the prompt and response    mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})        print(f"Response: {result}")

MLflow를 사용하여 LLM 배포

MLflow는 LLM을 배포하기 위한 강력한 기능을 제공하여 프로덕션 환경에서 모델을 더 쉽게 제공할 수 있습니다. MLflow의 배포 기능을 사용하여 LLM을 배포하는 방법을 살펴보겠습니다.

엔드포인트 생성

먼저 MLflow의 배포 클라이언트를 사용하여 LLM에 대한 엔드포인트를 생성합니다.

import mlflowfrom mlflow.deployments import get_deploy_client# Initialize the deployment clientclient = get_deploy_client("databricks")# Define the endpoint configurationendpoint_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",            },        },    }],}# Create the endpointclient.create_endpoint(name=endpoint_name, config=endpoint_config)

이 코드는 Azure OpenAI를 사용하여 GPT-3.5-turbo 모델에 대한 엔드포인트를 설정합니다. 안전한 API 키 관리를 위해 Databricks secrets를 사용하는 것을 참고하세요.

엔드포인트 테스트

엔드포인트가 생성되면 테스트할 수 있습니다.

response = client.predict(endpoint=endpoint_name,inputs={"prompt": "Explain the concept of neural networks briefly.","max_tokens": 100,},)print(response)

이렇게 하면 배포된 모델에 프롬프트가 전송되고 생성된 응답이 반환됩니다.

MLflow를 사용한 LLM 평가

평가는 LLM의 성과와 행동을 이해하는 데 필수적입니다. MLflow는 기본 제공 및 사용자 지정 메트릭을 포함하여 LLM을 평가하기 위한 포괄적인 도구를 제공합니다.

LLM 평가를 위한 준비

LLM을 평가하려면 mlflow.evaluate()모델은 다음 형식 중 하나여야 합니다.

  1. mlflow.pyfunc.PyFuncModel 인스턴스 또는 로그인된 MLflow 모델을 가리키는 URI입니다.
  2. 문자열을 입력받아 단일 문자열을 출력하는 Python 함수입니다.
  3. MLflow 배포 엔드포인트 URI입니다.
  4. 세트 model=None 평가 데이터에 모델 출력을 포함합니다.

로깅된 MLflow 모델을 사용하는 예를 살펴보겠습니다.

import mlflowimport openaiwith mlflow.start_run():    system_prompt = "Answer the following question concisely."    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}"},        ],    )# Prepare evaluation dataeval_data = pd.DataFrame({    "question": ["What is machine learning?", "Explain neural networks."],    "ground_truth": [        "Machine learning is a subset of AI that enables systems to learn and improve from experience without explicit programming.",        "Neural networks are computing systems inspired by biological neural networks, consisting of interconnected nodes that process and transmit information."    ]})# Evaluate the modelresults = mlflow.evaluate(    logged_model_info.model_uri,    eval_data,    targets="ground_truth",    model_type="question-answering",)print(f"Evaluation metrics: {results.metrics}")

이 예제에서는 OpenAI 모델을 기록하고, 평가 데이터를 준비한 다음, 질문 답변 작업을 위한 MLflow의 기본 제공 메트릭을 사용하여 모델을 평가합니다.

사용자 정의 평가 지표

MLflow를 사용하면 LLM 평가를 위한 사용자 정의 메트릭을 정의할 수 있습니다. 다음은 응답의 전문성을 평가하기 위한 사용자 정의 메트릭을 만드는 예입니다.

from mlflow.metrics.genai import EvaluationExample, make_genai_metricprofessionalism = make_genai_metric(    name="professionalism",    definition="Measure of formal and appropriate communication style.",    grading_prompt=(        "Score the professionalism of the answer on a scale of 0-4:n"        "0: Extremely casual or inappropriaten"        "1: Casual but respectfuln"        "2: Moderately formaln"        "3: Professional and appropriaten"        "4: Highly formal and expertly crafted"    ),    examples=[        EvaluationExample(            input="What is MLflow?",            output="MLflow is like your friendly neighborhood toolkit for managing ML projects. It's super cool!",            score=1,            justification="The response is casual and uses informal language."        ),        EvaluationExample(            input="What is MLflow?",            output="MLflow is an open-source platform for the machine learning lifecycle, including experimentation, reproducibility, and deployment.",            score=4,            justification="The response is formal, concise, and professionally worded."        )    ],    model="openai:/gpt-3.5-turbo-16k",    parameters={"temperature": 0.0},    aggregations=["mean", "variance"],    greater_is_better=True,)# Use the custom metric in evaluationresults = mlflow.evaluate(    logged_model_info.model_uri,    eval_data,    targets="ground_truth",    model_type="question-answering",    extra_metrics=[professionalism])print(f"Professionalism score: {results.metrics['professionalism_mean']}")

이 맞춤형 지표는 GPT-3.5-turbo를 사용하여 응답의 전문성을 평가하고, LLM 자체를 어떻게 활용하여 평가할 수 있는지 보여줍니다.

고급 LLM 평가 기술

LLM이 더욱 정교해짐에 따라 이를 평가하는 기술도 정교해지고 있습니다. MLflow를 사용하여 몇 가지 고급 평가 방법을 살펴보겠습니다.

검색 증강 생성(RAG) 평가

RAG 시스템은 검색 기반 모델과 생성 모델의 힘을 결합합니다. RAG 시스템을 평가하려면 검색 및 생성 구성 요소를 모두 평가해야 합니다. 다음은 MLflow를 사용하여 RAG 시스템을 설정하고 평가하는 방법입니다.

from langchain.document_loaders import WebBaseLoaderfrom langchain.text_splitter import CharacterTextSplitterfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.chains import RetrievalQAfrom langchain.llms import OpenAI# Load and preprocess documentsloader = 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)# Create vector storeembeddings = OpenAIEmbeddings()vectorstore = Chroma.from_documents(texts, embeddings)# Create RAG chainllm = OpenAI(temperature=0)qa_chain = RetrievalQA.from_chain_type(    llm=llm,    chain_type="stuff",    retriever=vectorstore.as_retriever(),    return_source_documents=True)# Evaluation functiondef evaluate_rag(question):    result = qa_chain({"query": question})    return result["result"], [doc.page_content for doc in result["source_documents"]]# Prepare evaluation dataeval_questions = [    "What is MLflow?",    "How does MLflow handle experiment tracking?",    "What are the main components of MLflow?"]# Evaluate using MLflowwith mlflow.start_run():    for question in eval_questions:        answer, sources = evaluate_rag(question)                mlflow.log_param(f"question", question)        mlflow.log_metric("num_sources", len(sources))        mlflow.log_text(answer, f"answer_{question}.txt")                for i, source in enumerate(sources):            mlflow.log_text(source, f"source_{question}_{i}.txt")    # Log custom metrics    mlflow.log_metric("avg_sources_per_question", sum(len(evaluate_rag(q)[1]) for q in eval_questions) / len(eval_questions))

이 예제에서는 LangChain과 Chroma를 사용하여 RAG 시스템을 설정한 다음, 질문, 답변, 검색된 소스, 사용자 정의 메트릭을 MLflow에 기록하여 이를 평가합니다.

청킹 전략 평가

문서를 청크하는 방식은 RAG 성능에 상당한 영향을 미칠 수 있습니다. MLflow는 다양한 청크 전략을 평가하는 데 도움이 될 수 있습니다.

import mlflowfrom langchain.text_splitter import CharacterTextSplitter, TokenTextSplitterdef 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)        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__)                mlflow.log_metric("num_chunks", len(chunks))        mlflow.log_metric("avg_chunk_length", sum(len(chunk.page_content) for chunk in chunks) / len(chunks))                # Evaluate retrieval performance (simplified)        correct_retrievals = sum(1 for _ in range(100) if simulate_retrieval(chunks))        mlflow.log_metric("retrieval_accuracy", correct_retrievals / 100)# Evaluate different strategiesfor 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)# Compare resultsbest_run = mlflow.search_runs(order_by=["metrics.retrieval_accuracy DESC"]).iloc[0]print(f"Best chunking strategy: {best_run['params.splitter_class']} with size {best_run['params.chunk_size']} and overlap {best_run['params.chunk_overlap']}")

이 스크립트는 청크 크기, 중복, 분할 방법의 다양한 조합을 평가하고 결과를 MLflow에 기록하여 쉽게 비교할 수 있도록 합니다.

LLM 평가 결과 시각화

MLflow는 LLM 평가 결과를 시각화하는 다양한 방법을 제공합니다. 다음은 몇 가지 기술입니다.

MLflow UI 사용

평가를 실행한 후 MLflow UI를 사용하여 결과를 시각화할 수 있습니다.

  1. MLflow UI 시작: mlflow ui
  2. 웹 브라우저를 열고 이동하세요 http://localhost:5000
  3. 실험과 실행을 선택하여 메트릭, 매개변수 및 아티팩트를 확인하세요.

사용자 정의 시각화

Matplotlib 또는 Plotly와 같은 라이브러리를 사용하여 평가 결과의 사용자 정의 시각화를 만든 다음 이를 아티팩트로 기록할 수 있습니다.

 import matplotlib.pyplot as pltimport mlflowdef 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))        plt.title(f"Comparison of {metric_name}")    plt.xlabel("Step")    plt.ylabel(metric_name)    plt.legend()        # Save and log the plot    plt.savefig(f"{metric_name}_comparison.png")    mlflow.log_artifact(f"{metric_name}_comparison.png")# Usagewith mlflow.start_run():    plot_metric_comparison("answer_relevance", ["run_id_1", "run_id_2", "run_id_3"])

이 함수는 여러 번의 실행에 걸쳐 특정 지표를 비교하는 선형 플롯을 만들어 아티팩트로 기록합니다.

_*]:min-w-0″>

오픈소스 MLflow의 대안

오픈 소스에는 수많은 대안이 있습니다 ML플로우 각각 고유한 기능과 통합을 제공하는 머신 러닝 워크플로를 관리합니다.

Databricks의 관리형 MLflow

관리되는 MLflow, 호스팅됨 데이터브릭스오픈소스 MLflow의 핵심 기능을 제공하지만 Databricks의 생태계와의 원활한 통합, 고급 보안 기능 및 관리형 인프라와 같은 추가 이점이 있습니다. 따라서 견고한 보안과 확장성이 필요한 조직에 탁월한 선택입니다.

Azure 머신 러닝

Azure 머신 러닝 Microsoft의 Azure 클라우드 플랫폼에서 엔드투엔드 머신 러닝 솔루션을 제공합니다. MLflow 기반은 아니지만 모델 레지스트리 및 실험 추적기와 같은 MLflow 구성 요소와 호환됩니다.

전담 ML 플랫폼

여러 회사에서 다양한 기능을 갖춘 관리형 ML 제품을 제공합니다.

  • 넵튠.ai: 실험 추적 및 모델 관리에 중점을 둡니다.
  • 가중치 및 편향: 광범위한 실험 추적, 데이터 세트 버전 관리 및 협업 도구를 제공합니다.
  • 혜성 ML: 실험 추적, 모델 제작 모니터링, 데이터 로깅을 제공합니다.
  • 예언: 머신 러닝 파이프라인과 오케스트레이션을 전문으로 합니다.

메타플로우

메타플로우Netflix에서 개발한 는 데이터 워크플로와 ML 파이프라인을 조율하도록 설계된 오픈소스 프레임워크입니다. 대규모 배포를 관리하는 데 뛰어나지만 MLflow에 비해 포괄적인 실험 추적 및 모델 관리 기능이 부족합니다.

Amazon SageMaker와 Google의 Vertex AI

둘 다 아마존 세이지메이커 그리고 구글의 Vertex AI 각 클라우드 플랫폼에 통합된 엔드투엔드 MLOps 솔루션을 제공합니다. 이러한 서비스는 규모에 맞춰 머신 러닝 모델을 구축, 훈련 및 배포하기 위한 강력한 도구를 제공합니다. 이자형.

자세한 비교

관리형 MLflow 대 오픈소스 MLflow

Databricks의 관리형 MLflow는 오픈 소스 버전에 비해 다음을 포함한 여러 가지 이점을 제공합니다.

  • 설정 및 배포: Databricks와의 원활한 통합으로 설정 시간과 노력이 줄어듭니다.
  • 확장성: 대규모 머신 러닝 워크로드를 손쉽게 처리할 수 있습니다.
  • 보안 및 관리: 역할 기반 액세스 제어(RBAC) 및 데이터 암호화와 같은 기본 보안 기능.
  • 완성: Databricks 서비스와의 긴밀한 통합으로 상호 운용성과 기능성이 향상되었습니다.
  • 데이터 저장 및 백업: 자동화된 백업 전략을 통해 데이터의 안전성과 신뢰성이 보장됩니다.
  • 비용: 사용자는 플랫폼, 스토리지, 컴퓨팅 리소스에 대한 비용을 지불합니다.
  • 지원 및 유지 관리: Databricks가 전담 지원 및 유지 관리를 제공합니다.

결론

MLflow를 사용한 대규모 언어 모델 추적은 LLM 개발, 평가 및 배포의 복잡성을 관리하기 위한 강력한 프레임워크를 제공합니다. 이 가이드에 설명된 모범 사례를 따르고 고급 기능을 활용하면 보다 체계적이고 재현 가능하며 통찰력 있는 LLM 실험을 만들 수 있습니다.

LLM 분야는 빠르게 진화하고 있으며, 평가 및 추적을 위한 새로운 기술이 끊임없이 등장하고 있다는 점을 기억하세요. 최신 MLflow 릴리스와 LLM 연구로 최신 정보를 유지하여 추적 및 평가 프로세스를 지속적으로 개선하세요.

여러분의 프로젝트에 이러한 기술을 적용하면 LLM의 행동과 성과에 대한 더 깊은 이해가 생겨 더 효과적이고 신뢰할 수 있는 언어 모델이 탄생하게 됩니다.

게시물 MLflow를 사용한 대규모 언어 모델(LLM) 추적: 완전한 가이드 처음 등장 유나이트.AI.

Exit mobile version