본문으로 건너뛰기

© 2026 Molayo

LangChain헤드라인2026. 05. 21. 04:04

LangSmith에서 미세 조정된 오픈 소스 모델 테스트하기

요약

Mistral 7b 및 Llama2와 같은 오픈 소스 모델의 미세 조정(Fine-tuning) 성능을 체계적으로 평가하기 위한 방법을 다룹니다. LangSmith를 활용하여 평가 데이터셋을 생성하고, 여러 모델 버전을 프로덕션 환경에서 효율적으로 비교 및 테스트하는 워크플로우를 소개합니다.

핵심 포인트

  • LangSmith를 사용하여 파이썬 스크립트 기반의 복잡한 평가 과정을 UI와 API로 간소화할 수 있습니다.
  • Hugging Face 데이터셋을 .jsonl 형식으로 변환하고 GPT-4를 통해 샘플링하여 검증 세트를 구축하는 프로세스를 제시합니다.
  • 미세 조정된 다양한 오픈 소스 모델의 성능을 동일한 데이터셋 위에서 직접 비교하여 최적의 모델을 선택할 수 있습니다.
  • LangSmith API를 통해 자동화된 모델 평가 및 테스트 환경 구축이 가능합니다.

오픈 소스 모델 (Open source models)은 애플리케이션 사용에 있어 점점 더 유능해지고 있습니다. 이러한 추세는 Mistral 7bLlama2 제품군과 같은 최근 출시와 함께 더욱 가속화되고 있습니다. 미래는 마치 오래된 게임 콘솔의 카트리지처럼, 더 나은 모델을 애플리케이션에 빠르게 교체하여 넣고 뺄 수 있는 능력에 달려 있는 것으로 보입니다. 모델의 다양한 버전을 미세 조정 (Fine tuning)하는 것은 개발자가 비교해야 할 가능한 카트리지의 수를 증가시킬 뿐입니다.

따라서 다음과 같은 질문이 생깁니다. 작업에 가장 적합한 도구를 선택할 수 있도록 모델 평가를 어떻게 프로덕션화 (productionize)할 수 있을까요? LangSmith는 평가 데이터셋 (evaluation datasets)을 생성하기 위한 편리한 UI와 API를 통해 파이썬 스크립트 지옥 (python script hell)에서 벗어날 방법을 제공합니다. 이러한 데이터셋을 사용하면 여러 모델에 대해 테스트를 실행하고 여러 축에서 성능을 직접 비교할 수 있습니다.

파이썬 (python) 또는 사용자 인터페이스를 통해 LangSmith에 데이터를 업로드하는 것은 쉽습니다. 예제 노트북의 경우 끝까지 스크롤하십시오.

프로세스 (The Process)

연구를 구성한 방식은 다음과 같습니다:

시작 (Initiation): 작업은 Hugging Face의 sql-create-context 데이터셋을 사용하여 Llama2-7b 및 Llama2-13b 모델을 미세 조정 (fine-tune)하는 목표로 시작되었습니다. 데이터 변환 (Data Conversion): 원래 JSON 형식이었던 Hugging Face의 데이터셋은 채팅 미세 조정 (chat fine-tuning)을 위해 .jsonl로 변환되었습니다. GPT-4를 이용한 데이터 샘플링 (Data Sampling with GPT-4): GPT-4의 코드 인터프리터 (Code Interpreter)를 사용하여 데이터셋에서 10,000개의 행을 선택했습니다. 검증 세트 생성 (Validation Set Creation): 1,000개의 고유한 sql 행을 검증 세트 (validation set)로 선택하여 훈련 데이터와 중복되지 않도록 했습니다. 우리는 평가를 자동화할 수 있도록 해당 테스트 행들을 LangSmith에 업로드했습니다.

from langsmith import Client

def create_dataset(dataset_name=None):

"""기존 데이터셋에 입력 및 출력이 포함된 예시 실행을 추가합니다"""

client = Client()

dataset_name = dataset_name

client.create_dataset(dataset_name=dataset_name)

return dataset_name

def add_to_dataset(dataset_name, validation_file_path):

client = Client()

dataset = client.read_dataset(dataset_name=dataset_name)

검증 파일을 열고 처리합니다

with open(validation_file_path, 'r') as f:

for line in f:

data = json.loads(line)
example = data['prompt']
assistant_content = data['completion']

데이터셋을 클라이언트 API를 사용하여 추가합니다

client.create_chat_example(
messages=[
{"type": "system", "data": {"content": "당신은 SQL에 지식이 풍부한 유용한 어시스턴트입니다. SQL만 출력하세요."}},
{"type": "human", "data": {"content": example}}
],
generations={"type": "ai", "data": {"content": assistant_content}},
dataset_id=dataset.id
)
**5. 미세 조정 및 평가(Fine-tuning and Assessment): **주요 목표는 Llama2-7b-chat과 Llama2-13b-chat을 특정 SQL 출력을 위해 개선하는 것이었습니다. 저희는 78k개의 SQL 데이터로 Llama2-7b-chat을 미세 조정했고, 비용 통제를 위해 Llama2-13b-chat은 10k개 행으로 미세 조정했습니다. 미세 조정과 추론(inference) 모두 8xA40 클러스터에서 수행되었습니다. 저희는 LoRA가 아닌 전체 매개변수 조정(full parameter tuning)을 했습니다. 이를 위해 모델 호스팅 및 미세 조정 플랫폼인 Replicate를 사용했습니다. 더 자세한 내용은 여기서 학습할 수 있습니다.

import replicate

training = replicate.trainings.create(
version="meta/llama-2-13b-chat:f4e2de70d66816a838a89eeeb621910adffb0dd0baba3976c96980970978018d",
input={
"train_data": "https://storage.googleapis.com/chatopensource-replicate-demo/selected_sql_create_context_v4.jsonl",
"num_train_epochs": 3
},
destination="papermoose/test"
)
**6. LangSmith 평가(LangSmith Evaluation): **저희는 LangSmith를 사용하여 각 모델에 대해 1000개의 프롬프트를 테스트했습니다. 모델의 출력이 올바른지 아닌지를 판단하기 위해 그 결과를 알려진 정답과 비교했습니다. 저희는 GPT-4를 사용하여 자체적으로 평가를 수행했습니다. LangSmith 덕분에 과정이 아래와 같이 매우 간단해졌습니다.

import replicate

async def evaluate_dataset(dataset_name=None, num_repetitions=1, model="gpt-4-0613", project_name=None):
"""평가하려는 모델을 데이터셋에 있다고 가정되는 정답 예제와 비교하여 실행하고, 평가된 모델 출력이 올바른지 또는 잘못되었는지 등급을 매깁니다."""
from langchain.smith import run_on_dataset, RunEvalConfig, arun_on_dataset

from langchain.chat_models import ChatOpenAI

테스트하려는 채팅 모델, 이 경우에는 Replicate를 복제합니다.

model_to_test = Replicate(

model=model,

model_kwargs={"temperature": 0.75, "max_length": 500, "top_p": 1},

)

client = Client()

"""질문/답변 평가 (question/answer evaluation)를 실행합니다. 여기서 평가용 LLM (gpt-4)은 이전 단계에서 업로드한 example_dataset을 기반으로 model_to_test의 출력이 올바른지 판단합니다. example_dataset은 평가 시 주어진 입력에 대한 정답으로 취급됩니다."""

eval_config = RunEvalConfig(

evaluators=[

"cot_qa"

],
)

chain_results = await arun_on_dataset(

client,

dataset_name=dataset_name,

llm_or_chain_factory=model_to_test,

evaluation=eval_config,

num_repetitions=num_repetitions,

project_name=project_name
)

LangSmith 플랫폼 자체를 통해 우리의 평가 결과, 즉 이 경우에는 생각의 사슬 (Chain of Thought, CoT) 질문/답변 내장 평가 결과를 확인할 수 있습니다. 여기에서 보여주는 것처럼 원하는 경우 직접 평가기를 작성할 수도 있습니다!

LangSmith에서의 분석 결과

다음은 결과이며, 데이터셋 이름은 무작위로 생성되었습니다. UI에서 데이터셋 이름을 변경하는 쉬운 방법이 아직 없기 때문에, 아래에 더 이해하기 쉬운 방식으로 차트를 그려 정리했습니다.

여기에서 ChatGPT를 사용하여 이 차트를 어떻게 생성했는지 확인할 수 있습니다!

결과에 대한 관찰 사항

매개변수(Parameters) vs 데이터: 데이터는 모델의 매개변수와 학습 데이터 양 사이의 관계를 보여줍니다. 매개변수가 더 적은 llama2-7b-chat-ft-78k도 성능이 좋았지만, 매개변수가 더 많은 llama2-13b-chat-ft-10k가 더 뛰어난 성능을 보였습니다. 이는 다음과 같은 질문을 던지게 합니다: 13b 모델이 더 큰 78k 데이터셋을 사용했다면 결과가 어땠을까요? 정확도는 학습 세트의 크기 및 품질과 상관관계가 있을 가능성이 높습니다. 응답 시간 (Response Times): 정확도뿐만 아니라, 모델의 효율성을 평가하기 위해서는 응답 시간, 특히 p50 및 p99가 중요합니다. 여기서 llama2-7b-chat-ft-78k

해당 모델은 높은 정확도와 효율적인 응답 시간(response times)을 모두 보여주었습니다. 이 Llama 모델들의 응답 시간은 Replicate를 기반으로 측정되었으며, 실행하는 하드웨어에 따라 달라질 수 있다는 점을 유념할 가치가 있습니다. GPT-3.5T와의 비교: 데이터는 이 모델들이 GPT-3.5-turbo-base와 어떻게 비교되는지를 강조합니다. 특히, llama2-13b-chat-ft-10k의 정확도는 GPT-3.5T와 유사했는데, 이는 최적화된 오픈 소스 모델이 기존의 모델들과 대등하거나 심지어 능가할 수 있는 잠재력이 있음을 시사합니다.

요약

  • LangSmith가 오픈 소스든 폐쇄형(closed source) 모델이든 상관없이 어떻게 작동하는지 살펴보았습니다.
  • LangSmith와 상호작용하는 과정을 상세히 설명하는 코드 스니펫(code snippets)과 UI의 스크린샷 결과물을 모두 확인했습니다.
  • ChatGPT의 고급 데이터 분석(advanced data analysis) 기능을 사용하여 결과를 그래프로 나타냈습니다.
  • 특정 도메인에서는 오픈 소스 모델이 OpenAI와 경쟁할 수 있음을 확인했습니다.
  • LangSmith 사용에 대한 더 인터랙티브한 예시를 보려면, 여기의 Python 노트북을 확인하세요.

또한 저희는 기업을 위해 ChatGPT를 완전히 데이터 프라이버시가 보장되고 감사 가능한(auditable) 채팅 대체제로 제공하는 ChatOpenSource를 운영하고 있습니다. 기업은 문서와 데이터를 쉽게 구성하여 적절한 팀만이 해당 데이터에 대해 질문할 수 있도록 설정할 수 있으며, 어떤 데이터도 기업 환경을 벗어나지 않습니다. 더 자세히 알고 싶으시다면 저희와 빠르게 상담 일정을 잡아보세요!

AI 자동 생성 콘텐츠

본 콘텐츠는 LangChain Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0