메인 콘텐츠로 건너뛰기

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

모델 트레이닝 run 중에 Weave 트레이스를 로깅하고 개인 워크스페이스에서 확인할 수 있습니다.
트레이닝 run 메트릭과 함께 Weave 트레이스 패널을 표시하는 W&B 워크스페이스.
개인 워크스페이스는 UI에서 모델 트레이닝 run에 대한 심층 분석과 데이터 시각화를 볼 수 있는 맞춤형 대시보드입니다. 워크스페이스에 Weave 패널을 추가하면 모델 run 중에 로깅된 트레이스 데이터를 조회하고 액세스하여 트레이닝 중 모델의 성능을 파악할 수 있습니다. 예를 들어 LLM 모델을 파인튜닝하는 중에 W&B 워크스페이스에서 step 500에 accuracy가 떨어지는 것이 보인다면, 통합된 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 패널을 추가할 수 있습니다.
워크스페이스에 대한 자세한 내용은 실험 결과 보기를 참조하세요.

특정 W&B run에 트레이스 연결

경우에 따라 Weave가 자동으로 감지한 run이 아닌 다른 run에 트레이스를 연결하고 싶을 수 있습니다. 기본적으로 Weave는 활성 wandb.run을 자동으로 감지해 해당 run에 트레이스를 연결합니다. 전역 wandb.run이 아닌 특정 run에 트레이스를 연결해야 하는 경우 set_wandb_run_context를 사용하세요. 특정 run과 run step에 트레이스를 연결하려면 run_idstep 인수 값을 지정하세요:
import weave

client = weave.init("[YOUR-TEAM-NAME]/[YOUR-PROJECT-NAME]")

# 이후의 모든 트레이스를 특정 run과 연결합니다.
client.set_wandb_run_context(run_id="[YOUR-RUN-ID]", step=[INTEGER])

@weave.op
def my_function(x):
    return x * 2

my_function(10)  # 이 트레이스는 step 5의 "my-run-id"에 연결됩니다.
run_id는 전체 entity/project/run_id 경로가 아니라 run의 짧은 ID(예: 38m4t5ja)입니다. run의 짧은 ID는 run URL(https://wandb.ai/team/project/runs/[RUN-ID])에서 확인하거나 코드에서 wandb.run.id에 액세스해 찾을 수 있습니다. override를 해제하고 전역 wandb.run으로 돌아가려면 clear_wandb_run_context를 호출하세요:
client.clear_wandb_run_context()

my_function(20)  # 이 트레이스는 전역 wandb.run을 사용합니다(있는 경우).

Weave 트레이스에서 W&B 아티팩트 레퍼런스하기

Weave 트레이스에서 W&B 아티팩트(모델, 데이터셋, checkpoint 등)를 레퍼런스할 수 있습니다. 그러면 Weave UI에 아티팩트의 세부 정보 페이지로 바로 이동할 수 있는 클릭 가능한 링크가 생성되며, 이를 통해 특정 오퍼레이션 중 사용한 아티팩트 버전을 추적하는 데 도움이 됩니다. 예를 들어, 모델의 두 버전(v1v2)을 트레이닝한 경우, 해당 모델을 쿼리할 때 v1 아티팩트 레퍼런스를 트레이스의 속성으로 추가할 수 있습니다. 이렇게 하면 주어진 출력이 정확히 어떤 아티팩트 버전에서 생성되었는지 추적하는 데 도움이 됩니다. 아티팩트를 트레이스와 연결하려면, 다음 구문을 사용해 wandb-artifact:/// 접두사와 아티팩트의 전체 이름을 이어 붙여 아티팩트 URL을 구성합니다: wandb-artifact:///[FULL-NAME-OF-ARTIFACT]. 그런 다음 다음 두 가지 방법 중 하나로 이를 Weave에 전달합니다.
  • 임의의 속성으로
  • Model의 속성으로
아티팩트의 전체 이름은 W&B UI의 세부 정보 페이지에서 확인할 수 있습니다. 형식은 다음과 같습니다: [ENTITY]/[PROJECT]/[ARTIFACT-NAME]:[VERSION]. W&B UI의 아티팩트 세부 정보 페이지에서 전체 이름을 복사할 수 있습니다. 다음 섹션에서는 각 접근 방식을 보여줍니다.

트레이스의 속성으로 아티팩트 추가하기

트레이스의 속성으로 아티팩트를 추가하려면 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!")