메인 콘텐츠로 건너뛰기

모델 트레이닝 run 중 트레이스 로깅

Workspaces에서의 Weave Trace
이제 모델 트레이닝 run 중에 Weave 트레이스를 로깅하고 개인 Workspace에서 확인할 수 있습니다. 개인 Workspace는 UI에서 사용자 지정 가능한 대시보드로, 모델 트레이닝 run에 대한 심층 분석과 데이터 시각화를 제공하는 기능입니다. Workspace에 Weave 패널을 추가하면, 모델 run 동안 로깅된 트레이스 데이터를 확인하고 활용하여 트레이닝 중 모델이 어떻게 동작하는지 더 잘 이해할 수 있습니다. 예를 들어, LLM 모델을 파인튜닝하는 동안 W&B Workspace에서 스텝 500에서 정확도가 떨어지는 것을 발견했다면, 통합된 Weave 트레이스는 모델이 평가 기준을 통과하지 못한 지나치게 장황한 응답을 생성하기 시작한 것처럼, 정확히 어떤 일이 발생했는지를 보여줄 수 있습니다.

Weave 패널 사용하기

ML 파이프라인에서 함수에 @weave.op 데코레이터를 추가하면, 함수 실행 정보를 자동으로 수집하고 개인 워크스페이스에서 이를 확인할 수 있습니다. 예를 들어, 다음 스크립트는 Weave 트레이스가 W&B 트레이닝 run과 어떻게 통합되는지 보여줍니다. 이 스크립트는 각 트레이닝 스텝마다 W&B에 메트릭을 로깅하는 동시에, 상세한 Weave 트레이스를 생성하는 머신 러닝 트레이닝 루프를 시뮬레이션합니다. 함수에 있는 @weave.op 데코레이터는 입력, 출력, 실행 세부 정보를 자동으로 수집합니다. 트레이닝 루프에서 wandb.log()로 메트릭을 로깅하면 Weave 트레이스 정보도 함께 프로젝트에 로깅됩니다.
import wandb
import weave
import random

# 동일한 프로젝트로 W&B와 Weave를 모두 초기화
project = "my-workspace-project"
weave.init(project)

@weave.op
def evaluate_model(model_state, epoch):
    # 평가 메트릭 시뮬레이션
    accuracy = 0.7 + epoch * 0.02 + random.uniform(-0.05, 0.05)
    
    # 특정 모델 동작 추적
    test_responses = {
        "conciseness_check": "Model generated 500 words for simple question",
        "accuracy_check": "Model answered 8/10 questions correctly",
        "hallucination_check": "No factual errors detected"
    }
    
    return {
        "accuracy": accuracy,
        "diagnostic_results": test_responses
    }

@weave.op
def training_step(epoch, lr):
    # 트레이닝 로직 시뮬레이션
    loss = 1.0 / (epoch + 1) + random.uniform(-0.1, 0.1)
    
    # 트레이스를 활용한 평가
    eval_results = evaluate_model(f"checkpoint_{epoch}", epoch)
    
    return {
        "loss": loss,
        "accuracy": eval_results["accuracy"],
        "diagnostics": eval_results["diagnostic_results"]
    }

# 트레이닝 루프
with wandb.init(project=project, config={"lr": 0.01}) as run:
    for epoch in range(5):
        # Weave 트레이싱으로 트레이닝 실행
        results = training_step(epoch, run.config.lr)
        
        # W&B에 로그 기록 - 인테그레이션 지점 생성
        run.log({
            "epoch": epoch,
            "loss": results["loss"],
            "accuracy": results["accuracy"]
        })
이 예제 스크립트를 실행해 트레이스가 다른 run 정보와 함께 어떻게 로그되는지 확인할 수 있습니다. run 중이거나 완료된 후에 워크스페이스에서 트레이스 정보를 보려면, run 시작 시 터미널에 표시되는 링크(다음과 같은 형태: wandb: 🚀 View run at https://wandb.ai/wandb/my-project/runs/<run-ID>)를 열거나 UI에서 워크스페이스로 이동하면 됩니다. UI에서 워크스페이스로 이동하려면:
  1. W&B UI를 열고 Projects 탭을 클릭합니다. 그러면 프로젝트 목록이 열립니다.
  2. 프로젝트 목록에서 run을 로깅한 프로젝트를 클릭합니다. 그러면 Workspaces 페이지가 열립니다.
  3. 워크스페이스를 자동 워크스페이스로 설정한 경우, 워크스페이스에는 run에 대한 데이터 시각화와 정보가 자동으로 채워집니다. run의 트레이스 데이터는 워크스페이스의 Weave 섹션에 있습니다. 워크스페이스를 수동 워크스페이스로 사용하는 경우, Add panels를 클릭하고 Add Panels 메뉴의 Weave 섹션에서 새 패널을 선택해 Weave 패널을 추가할 수 있습니다.
워크스페이스에 대한 자세한 내용은 실험 결과 보기를 참조하세요.

Weave trace에서 W&B artifacts 참조하기

Weave trace에서 W&B artifacts (예: 모델, 데이터셋, 체크포인트 등)을 참조할 수 있습니다. 이렇게 하면 Weave UI에 클릭 가능한 링크가 생성되어 해당 아티팩트의 상세 페이지로 바로 이동할 수 있고, 특정 작업 동안 어떤 아티팩트 버전이 사용되었는지 추적하는 데 도움이 됩니다. 예를 들어, 두 버전의 모델(v1v2)을 학습했다면, 해당 모델을 쿼리할 때 v1 아티팩트 참조를 trace의 속성으로 추가할 수 있습니다. 이를 통해 어떤 아티팩트 버전이 주어진 출력을 생성했는지 정확히 추적할 수 있습니다. trace와 아티팩트를 연결하려면, 다음 구문을 사용해 wandb-artifact:/// 접두사(prefix)에 아티팩트의 전체 이름을 이어 붙여 아티팩트의 URL을 구성합니다: wandb-artifact:///<full-name-of-artifact>. 그런 다음 아래 두 가지 방법 중 하나로 Weave에 전달합니다:
  • 임의의 속성으로 전달
  • Model의 속성으로 전달
아티팩트의 전체 이름은 W&B UI의 아티팩트 상세 페이지에서 찾을 수 있습니다. 형식은 다음과 같습니다: <entity>/<project>/<artifact_name>:<version>. 전체 이름은 W&B UI의 아티팩트 상세 페이지에서 복사할 수 있습니다.

trace의 속성으로 추가하기

trace의 속성으로 아티팩트를 추가하려면 weave.attributes() 컨텍스트 매니저에 키-값 쌍으로 전달하세요:
import weave

weave.init("your-team-name/your-project-name")

@weave.op
def my_function(name: str):
    return f"Hello, {name}!"

# 임의의 키 이름과 아티팩트의 URL을 값으로 추가합니다
with weave.attributes({'artifact_id': 'wandb-artifact:///team-name/project-name/run-38m4t5ja-history:v0'}):
    result = my_function("World")

Model의 속성으로 아티팩트를 추가하기

Model의 속성으로 아티팩트를 추가하려면 모델을 인스턴스화할 때 아티팩트 URL을 전달하세요:
Model 클래스는 현재 Weave Python SDK에서만 지원됩니다.
import weave

weave.init("your-team-name/your-project-name")

class MyModel(weave.Model):
    # 아티팩트 참조를 모델 속성으로 저장
    artifact_id: str
    temperature: float = 0.7
    
    @weave.op
    def predict(self, query: str) -> str:
        # 모델 추론 로직을 여기에 작성
        return f"Response to: {query}"

# 아티팩트 URL을 모델 속성으로 전달
model = MyModel(
    artifact_id="wandb-artifact:///team-name/project-name/run-38m4t5ja-history:v0"
)

result = model.predict("Hello, World!")