MLflow 개요

MLflow는 머신러닝 실무자와 팀이 머신러닝 프로세스의 복잡성을 관리하는 데 도움을 주기 위한 오픈소스 플랫폼이다.

MLflow는 생성형 AI 애플리케이션에서 LLM(대형 언어 모델)의 관측 가능성을 향상시키는 트레이싱 기능을 제공한다. 이 기능은 애플리케이션 서비스의 실행에 대한 상세한 정보를 캡처한다. 트레이싱은 요청의 각 중간 단계와 관련된 입력, 출력, 메타데이터를 기록하는 방법을 제공하여 버그와 예상치 못한 동작의 원인을 쉽게 찾을 수 있게 한다.

주요 기능

  • 트레이싱 대시보드: crewAI 에이전트의 활동을 상세히 모니터링한다. 입력, 출력, 그리고 스팬의 메타데이터를 포함한 대시보드를 제공한다.

  • 자동화된 트레이싱: mlflow.crewai.autolog()를 실행하면 crewAI와 완전히 자동으로 통합된다.

  • 간편한 수동 트레이스 도구화: 데코레이터, 함수 래퍼, 컨텍스트 매니저와 같은 MLflow의 고수준 API를 통해 트레이스 도구화를 커스터마이징할 수 있다.

  • OpenTelemetry 호환성: MLflow 트레이싱은 OpenTelemetry Collector로 트레이스를 내보내는 기능을 지원한다. 이를 통해 Jaeger, Zipkin, AWS X-Ray 등 다양한 백엔드로 트레이스를 내보낼 수 있다.

  • 에이전트 패키징 및 배포: 다양한 배포 대상에 crewAI 에이전트를 패키징하고 추론 서버에 배포할 수 있다.

  • 안전한 LLM 호스팅: MLflow 게이트웨이를 통해 여러 프로바이더의 LLM을 하나의 통합 엔드포인트에서 호스팅할 수 있다.

  • 평가: mlflow.evaluate() API를 사용해 다양한 메트릭으로 crewAI 에이전트를 평가할 수 있다.

설정 안내

1

MLflow 패키지 설치

# crewAI 통합은 mlflow>=2.19.0에서 사용 가능
pip install mlflow
2

MLflow 트래킹 서버 시작

# 이 과정은 선택 사항이지만, MLflow 트래킹 서버를 사용하면 더 나은 시각화와 다양한 기능을 활용할 수 있다.
mlflow server
3

애플리케이션에서 MLflow 초기화

애플리케이션 코드에 다음 두 줄을 추가한다:

import mlflow

mlflow.crewai.autolog()

# 선택 사항: 트래킹 서버가 있다면 트래킹 URI와 실험 이름을 설정
mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("CrewAI")

CrewAI 에이전트 트레이싱 예제:

from crewai import Agent, Crew, Task
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
from crewai_tools import SerperDevTool, WebsiteSearchTool

from textwrap import dedent

content = "Users name is John. He is 30 years old and lives in San Francisco."
string_source = StringKnowledgeSource(
    content=content, metadata={"preference": "personal"}
)

search_tool = WebsiteSearchTool()


class TripAgents:
    def city_selection_agent(self):
        return Agent(
            role="City Selection Expert",
            goal="Select the best city based on weather, season, and prices",
            backstory="An expert in analyzing travel data to pick ideal destinations",
            tools=[
                search_tool,
            ],
            verbose=True,
        )

    def local_expert(self):
        return Agent(
            role="Local Expert at this city",
            goal="Provide the BEST insights about the selected city",
            backstory="""A knowledgeable local guide with extensive information
        about the city, it's attractions and customs""",
            tools=[search_tool],
            verbose=True,
        )


class TripTasks:
    def identify_task(self, agent, origin, cities, interests, range):
        return Task(
            description=dedent(
                f"""
                Analyze and select the best city for the trip based
                on specific criteria such as weather patterns, seasonal
                events, and travel costs. This task involves comparing
                multiple cities, considering factors like current weather
                conditions, upcoming cultural or seasonal events, and
                overall travel expenses.
                Your final answer must be a detailed
                report on the chosen city, and everything you found out
                about it, including the actual flight costs, weather
                forecast and attractions.

                Traveling from: {origin}
                City Options: {cities}
                Trip Date: {range}
                Traveler Interests: {interests}
            """
            ),
            agent=agent,
            expected_output="Detailed report on the chosen city including flight costs, weather forecast, and attractions",
        )

    def gather_task(self, agent, origin, interests, range):
        return Task(
            description=dedent(
                f"""
                As a local expert on this city you must compile an
                in-depth guide for someone traveling there and wanting
                to have THE BEST trip ever!
                Gather information about key attractions, local customs,
                special events, and daily activity recommendations.
                Find the best spots to go to, the kind of place only a
                local would know.
                This guide should provide a thorough overview of what
                the city has to offer, including hidden gems, cultural
                hotspots, must-visit landmarks, weather forecasts, and
                high level costs.
                The final answer must be a comprehensive city guide,
                rich in cultural insights and practical tips,
                tailored to enhance the travel experience.

                Trip Date: {range}
                Traveling from: {origin}
                Traveler Interests: {interests}
            """
            ),
            agent=agent,
            expected_output="Comprehensive city guide including hidden gems, cultural hotspots, and practical travel tips",
        )


class TripCrew:
    def __init__(self, origin, cities, date_range, interests):
        self.cities = cities
        self.origin = origin
        self.interests = interests
        self.date_range = date_range

    def run(self):
        agents = TripAgents()
        tasks = TripTasks()

        city_selector_agent = agents.city_selection_agent()
        local_expert_agent = agents.local_expert()

        identify_task = tasks.identify_task(
            city_selector_agent,
            self.origin,
            self.cities,
            self.interests,
            self.date_range,
        )
        gather_task = tasks.gather_task(
            local_expert_agent, self.origin, self.interests, self.date_range
        )

        crew = Crew(
            agents=[city_selector_agent, local_expert_agent],
            tasks=[identify_task, gather_task],
            verbose=True,
            memory=True,
            knowledge={
                "sources": [string_source],
                "metadata": {"preference": "personal"},
            },
        )

        result = crew.kickoff()
        return result


trip_crew = TripCrew("California", "Tokyo", "Dec 12 - Dec 20", "sports")
result = trip_crew.run()

print(result)

더 많은 설정과 사용 사례는 MLflow 트레이싱 문서를 참고한다.

4

에이전트 활동 시각화

이제 crewAI 에이전트의 트레이스가 MLflow에 캡처된다. MLflow 트래킹 서버를 방문해 트레이스를 확인하고 에이전트에 대한 통찰력을 얻는다.

브라우저에서 127.0.0.1:5000을 열어 MLflow 트래킹 서버에 접속한다.

MLflow 트레이싱 대시보드