LLMOps는 Observability부터, Langfuse

LLMOps는 Observability부터, Langfuse

오픈소스 Observability 툴인 Langfuse에 대해서 알아봅시다.

LLMOps

LLMOps는 대형 언어 모델(LLM)을 효과적으로 개발, 운영, 모니터링, 유지보수하기 위한 도구와 프로세스를 포괄합니다. 이는 OpenAI의 GPT, Anthropic의 Claude, Google의 Gemini와 같은 다양한 LLM을 프로덕션 환경에서 안정적으로 배포하고 관리하는 데 중점을 둡니다. LLMOps는 모델의 성능 최적화, 비용 절감, 데이터 품질 관리, 지속적 모니터링을 포함하는 일련의 프로세스와 도구를 통해 AI/LLM 기반 비즈니스 애플리케이션에서 필수적인 역할을 수행합니다. 이러한 운영 프로세스는 모델의 품질과 신뢰성을 유지하고, 운영 비용을 줄이며, 서비스의 일관성과 확장성을 보장하기 위해 중요합니다. LLMOps의 주요 요소들은 다음과 같습니다.

  1. 모델의 성능 최적화: LLM은 학습 데이터와 컴퓨팅 자원에 따라 성능이 달라질 수 있으므로, 모델의 학습 프로세스를 최적화하거나 파인튜닝을 통해 모델의 정확도와 반응성을 개선하는 것이 필수적입니다. 이를 위해 주로 훈련 파라미터 조정, 프롬프트 엔지니어링, 지식 주입 등의 방법을 사용하여 특정 도메인 또는 비즈니스 요구에 맞는 결과를 도출합니다. 이러한 최적화 과정은 서비스의 일관성을 유지하면서도 사용자 경험을 극대화하는 데 중요한 역할을 합니다.

  2. 비용 절감: LLM은 높은 컴퓨팅 자원과 스토리지를 요구하므로, 운영 비용이 상당히 클 수 있습니다. 비용 절감을 위해 모델 최적화, GPU 자원의 효율적 사용과 같은 기술을 활용하며, 필요에 따라 온디맨드 인프라를 사용해 컴퓨팅 자원을 유연하게 조절할 수 있습니다. 또한 캐싱 전략을 사용해 반복적인 요청에 대해 빠른 응답을 제공함으로써 비용을 줄이고 성능을 향상시킬 수 있습니다.

  3. 지속적 모니터링과 관찰 가능성 (Observability): 프로덕션 환경에서 LLM의 성능을 안정적으로 유지하려면 지속적인 모니터링과 알림 시스템이 필수적입니다. 이 모니터링은 LLM 애플리케이션의 응답 내용, 응답 속도, 응답의 정확성, 비용, 사용자 피드백 등을 포함하며, 이러한 관찰 가능한 지표를 설정해 문제가 발생할 때 즉시 감지하고 대응할 수 있도록 해야 합니다. 또한, 평가 시스템을 구축하여 프롬프트나 파라미터의 변경이 LLM 애플리케이션 성능에 미치는 영향을 정확히 파악하고 조정할 수 있어야 합니다.

  4. 프롬프트 및 파인튜닝 관리: 다양한 프롬프트 조합과 파인튜닝 전략을 지속적으로 실험하고 관리하는 것도 LLMOps의 중요한 부분입니다. 이를 통해 모델이 특정 사용자 시나리오에서 더 나은 성능을 발휘할 수 있도록 맞춤형으로 최적화할 수 있으며, 사용자 니즈에 맞춘 솔루션을 제공하게 됩니다.

  5. LLM의 안전성 (Safety): LLM의 프로덕션 환경 배포 시 안전성을 확보하는 것도 매우 중요합니다. 특히 jailbreaking과 같은 공격에 대비해야 합니다. Jailbreaking은 모델의 의도된 제한을 우회하여 비윤리적이거나 유해한 응답을 유도하는 행위입니다. 이를 방지하기 위해 철저한 입력 검증, 정기적인 취약성 테스트, 방어적 프롬프트 설계 등이 필요합니다. 또한, 사용자 모니터링을 통해 잠재적인 악용 시도를 감지하고, 사전 정의된 알림 및 대응 절차를 마련해야 합니다.

LLMOps는 이러한 주요 사항들을 통해 LLM의 성능을 지속적으로 개선하고, 실질적인 비즈니스 가치를 창출하는 데 중요한 역할을 합니다. 애플리케이션을 개발하는 것에서 그치지 않고, 실제 환경에서의 운영과 개선을 담당하는 모든 과정을 포괄하며, 이를 통해 기업은 AI를 활용한 혁신적인 서비스를 안정적으로 제공할 수 있게 됩니다.



Langfuse

Langfuse는 LLMOps 환경에서 관찰성과 디버깅을 위한 강력한 도구로 자리 잡고 있습니다. 주로 대형 언어 모델(LLM)과 AI 파이프라인을 개발하거나 운영하는 과정에서 발생할 수 있는 복잡한 문제를 분석하고 해결하는 데 큰 도움이 됩니다. 최근 AI와 LLM 애플리케이션이 빠르게 발전함에 따라, 다양한 단계에서 발생하는 문제를 신속하게 파악하고 처리하는 역량이 점점 더 중요해지고 있습니다. Langfuse는 이 역할에 알맞은 도구로, LLM 애플리케이션 성능 모니터링과 문제 해결을 위한 직관적인 인터페이스를 제공합니다.

Langfuse의 가장 큰 장점 중 하나는 LLM 애플리케이션의 성능을 실시간으로 추적하고 평가할 수 있다는 점입니다. 이를 통해 모델이 예측한 출력이 정확한지, 기대한 대로 작동하고 있는지를 신속하게 파악할 수 있습니다. 또한, Langfuse는 LLM 애플리케이션의 여러 태스크들을 시각화하고 Tracing하는 기능을 지원하여 문제를 쉽게 파악할 수 있습니다. 애플리케이션의 각 단계에서 발생할 수 있는 지연이나 오류를 시각적으로 한눈에 확인할 수 있어, 문제 해결 시간을 단축시켜 줍니다.

Langfuse는 오픈 소스 LLM 엔지니어링 플랫폼입니다. 이 플랫폼은 팀원들이 협력하여 LLM 애플리케이션을 디버깅하고 성능을 분석하며 반복적으로 개선할 수 있도록 도와줍니다. 개발자들은 이 도구를 활용하여 모델의 로그를 투명하게 공유하고, 개선할 부분을 빠르게 식별하며, 실험을 반복하는 과정을 최적화할 수 있습니다. 특히, 여러 팀원이 참여하는 대규모 프로젝트에서 Langfuse의 협업 기능은 효율적인 운영을 위한 필수적인 요소로 작용합니다.

Langfuse는 모니터링, 로깅, 시각화, 성능 분석 기능을 통합한 관찰성 플랫폼으로, AI와 LLM 애플리케이션의 성공적인 운영을 위해 꼭 필요한 도구입니다. AI 파이프라인의 모든 부분을 투명하게 관리할 수 있는 이 도구는 빠르게 변화하는 AI 생태계에서 경쟁력을 유지하는 데 있어 중요한 역할을 합니다.

비슷한 도구로 Langsmith가 있습니다. Langsmith는 Langchain 애플리케이션 프레임워크를 오픈 소스로 개발하는 Langchain 팀에서 개발했고 따라서 Langchain기반으로 애플리케이션을 개발할 때 매우 유용한 도구입니다. 다만 Langsmith는 Closed source project로 오픈 소스로 사용할 수 없고, 혼자서 사용할 때는 훌륭하지만 팀으로 개발하거나 협업이 필요한 경우 비용을 지불해야한다는 큰 단점이 있습니다.

Langfuse 공식 문서에도 나와있듯, Langfuse는 Langsmith의 대안으로 사용할 수 있습니다.
Is Langfuse a Langsmith Alternative? - The answer is yes, Langfuse is an open-source alternative to Langsmith.(https://langfuse.com/faq/all/langsmith-alternative)



Langfuse의 주요기능

Langfuse는 LLM 애플리케이션 개발 및 운영의 여러 중요한 문제를 해결하는 데 도움을 줍니다. 주요 기능은 다음과 같습니다:

  1. 관찰 가능성 및 디버깅: Langfuse는 LLM 애플리케이션 내의 모든 데이터 포인트와 상호작용을 포괄적으로 추적하여 복잡하고 반복적인 연쇄 호출이나 에이전트 기반 호출의 문제 근본 원인을 쉽게 파악할 수 있습니다. Python과 JavaScript/TypeScript용 비동기 SDK와 OpenAI SDK, Langchain, LlamaIndex 등의 프레임워크와의 통합을 지원합니다. UI에 접속하면 아래 그림과 같이 대시보드를 확인할 수 있어 한 눈에 비용과 모델 사용량, Trace들을 볼 수 있습니다.
    Langfuse Dashboard
  1. 프롬프트 관리: 프롬프트를 효율적으로 관리하고 버전 관리하며 배포할 수 있는 기능을 제공합니다. 또한, LLM의 성능을 개선하기 위해 프롬프트를 테스트하고 반복할 수 있는 LLM 플레이그라운드를 지원합니다. 아래 그림에서 처럼 프롬프트를 등록할 수 있으며, 버저닝과 태깅이 가능합니다. 프롬프트를 코드로 등록하고 관리하는 내용은 여기에서 확인할 수 있습니다.

    Langfuse Prompt Management

  2. 품질 모니터링 및 평가: Langfuse와 연동이 된 이후에는 애플리케이션에 대한 입력과 출력, 그리고 그 과정에 대한 내용이 Trace로 기록됩니다. 또한 Tracing에 Score를 부여하여 LLM 품질을 면밀히 모니터링할 수 있습니다. 모델 기반 평가, 사용자 피드백 수집, 수동 주석 기능을 통해 더욱 정교한 품질 평가가 가능합니다. 자세한 내용은 여기에서 확인할 수 있습니다.

    Langfuse Trace에서 세부사항들을 볼 수 있다

  3. 실험 및 테스트: 새로운 버전을 배포하기 전에 Dataset을 이용해 애플리케이션의 동작을 추적하고 테스트할 수 있습니다. Dataset을 이용하면 예상 입력-출력을 테스트하고 성능을 벤치마킹할 수 있습니다. Testing 에 대한 내용.

    Langfuse Dataset 기능

  1. 사용자 행동 분석: 입력을 분류하고 사용자 행동을 심층 분석하여 LLM 애플리케이션이 다양한 사용자 입력과 의도를 더 잘 이해할 수 있도록 돕습니다. 사용 전에 user id는 미리 코드를 통해 등록해야 합니다.

    Langfuse Users 기능



Langfuse 설치

로컬 설치

로컬에 Langfuse를 설치하는 방법은 매우 간단합니다.

1
2
pip install langfuse openai
#Not using OpenAI? Switch to the “Python Decorator + any LLM” tab.

설치된 이후에 Langfuse의 키와 호스트 주소를 환경변수에 등록하고 사용하면 LLM 애플리케이션에서 사용하는 내역들이 Langfuse에 등록됩니다.

1
2
3
4
LANGFUSE_SECRET_KEY="sk-lf-..."
LANGFUSE_PUBLIC_KEY="pk-lf-..."
LANGFUSE_HOST="https://cloud.langfuse.com" # 🇪🇺 EU region
# LANGFUSE_HOST="https://us.cloud.langfuse.com" # 🇺🇸 US region

Docker 사용 설치 -1

Langfuse Github 레포지토리와 Docker Compose를 사용하는 방법은 다음과 같습니다.

1
2
3
4
5
6
# Clone the Langfuse repository
git clone https://github.com/langfuse/langfuse.git
cd langfuse

# Start the database and langfuse server
docker compose up

Langfuse는 로컬에서 3000포트로 실행됩니다. 따라서 http://localhost:3000 로 접속하면 Langfuse UI가 등장하게 됩니다. 아이디를 생성하고 여러 기능들을 테스트해 볼 수 있습니다.

Docker 사용 설치 -2

Docker image를 직접 받아서 사용하는 방법도 존재합니다. 다만 사용을 위해서는 Postgresql DB가 준비되어 있어야 합니다. 적어도 버전 12 이상을 준비해주시길 바랍니다.

1
2
3
4
5
6
7
8
9
10
11
docker pull langfuse/langfuse:2

docker run --name langfuse \
-e DATABASE_URL=postgresql://hello \
-e NEXTAUTH_URL=http://localhost:3000 \
-e NEXTAUTH_SECRET=mysecret \
-e SALT=mysalt \
-e ENCRYPTION_KEY=0000000000000000000000000000000000000000000000000000000000000000 \ # generate via: openssl rand -hex 32
-p 3000:3000 \
-a STDOUT \
langfuse/langfuse

Helm Chart 설치

Langfuse-k8s 레포에는 Langfuse helm chart가 올라와 있습니다. 자세한 사항은 레포를 참조해주세요.

다음과 같은 방법으로 설치해주면 됩니다.

1
2
3
helm repo add langfuse https://langfuse.github.io/langfuse-k8s
helm repo update
helm install langfuse langfuse/langfuse



Integration

Langchain Integration

LLM 애플리케이션을 개발할 때 Langchain을 주로 사용합니다. 이미 개발중인 LLM 애플리케이션이더라도 Langfuse 키만 등록하면 누구나 쉽게 Langfuse의 Trace 및 기타 기능을 사용할 수 있습니다.

먼저 langfuse를 설치합니다.

1
pip install langfuse

설치된 이후에는 위에서 설명한 것 처럼 환경변수로 키와 호스트 주소를 등록하거나 아래처럼 CallbackHandler를 불러와서 키와 호스트 주소를 넣어줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# Initialize Langfuse handler
from langfuse.callback import CallbackHandler
langfuse_handler = CallbackHandler(
secret_key="sk-lf-...",
public_key="pk-lf-...",
host="https://cloud.langfuse.com", # 🇪🇺 EU region
# host="https://us.cloud.langfuse.com", # 🇺🇸 US region
)

# Your Langchain code

# Add Langfuse handler as callback (classic and LCEL)
chain.invoke({"input": "<user_input>"}, config={"callbacks": [langfuse_handler]})



Langflow Integration

Langflow는 LangChain 라이브러리를 기반으로 한 시각적 LLM 워크플로우 설계 도구로 누구나 쉽게 LLM 개발을 할 수 있도록 도와주는 툴입니다. Langflow 차트에 values 부분에 환경 변수만 넣어주면 Langflow에서 사용되는 내용들도 Langfuse를 통해 통합적으로 관리할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
env:
- name: LANGFUSE_SECRET_KEY
valueFrom:
secretKeyRef:
name: langfuse-key
key: secret_key
- name: LANGFUSE_PUBLIC_KEY
valueFrom:
secretKeyRef:
name: langfuse-key
key: public_key
- name: LANGFUSE_HOST
value: https://your_langfusehost.com

위의 yaml과 같이 key에 대한 내용을 secret으로 등록해 사용하면 좀 더 안전하게 키를 관리할 수 있습니다.

문서를 참조해서 등록 할 수 있습니다. 하지만 문서에는 LANGFLOW_LANGFUSE_PUBLIC_KEY, LANGFLOW_LANGFUSE_SECRET_KEY 로 사용하도록 가이드하고 있는데 실제 사용한 결과로는 위 처럼 사용해야 제대로 연동이 됩니다.



아쉬운 점?

Langfuse는 실제 사용하고 있는 Observability 도구로 사용자들의 만족도가 굉장히 높은 도구입니다. 하지만 사용하면서 몇 가지 아쉬운 점들이 있는데 그것은 LLM모델의 API 콜에 대한 price에 대한 부분입니다. OpenAI의 GPT모델들은 트래킹이 되고 사용 비용에 대한 내용도 꽤 정확합니다. 그러나 Google의 Gemini 모델의 경우에는 한 두가지 모델을 제외하면 가격 트래킹이 되지 않습니다.

Langfuse Model Usage에서 gemini 부분만 가격이 나와있지 않다

직접 등록해서 사용해도 되지만 트래킹이 잘 되지는 않았습니다. 그래서 github에서도 이에 관련된 내용이 Issue로 등록되고 있는데 꽤나 희망적인 이야기가 최근에 등록되었습니다.

요약하자면, gemini 모델들을 커스텀으로 등록해도 동작하지 않는다는 것인데 곧 새 기능을 통해 잘 동작하게 될 것이라는 내용입니다. PR 내용이 Merge되었으니 다음 Release때는 Gemini 모델의 비용 트래킹도 가능해지지 않을까 기대해보고 있습니다.




Reference

LLMOps는 Observability부터, Langfuse

http://tkdguq05.github.io/2024/10/27/langfuse/

Author

SangHyub Lee, Jose

Posted on

2024-10-27

Updated on

2024-10-27

Licensed under

Comments