모델 트레이닝 Runs 중 Trace 로그 기록하기
이제 모델 트레이닝 Runs 동안 Weave traces를 로그에 기록하고 개인 Workspace 에서 확인할 수 있습니다.
개인 Workspace 는 UI에서 사용자가 정의할 수 있는 대시보드로, 모델 트레이닝 Runs 에 대한 심층 분석 및 데이터 시각화 를 제공합니다. Workspace 에 Weave 패널을 추가하면, 모델 Runs 중에 기록된 trace 데이터에 엑세스하여 트레이닝 중 모델의 성능에 대한 더 나은 통찰력을 얻을 수 있습니다.
예를 들어, LLM 모델을 파인튜닝하는 중에 W&B Workspace 에서 500 step 부근에 정확도가 떨어지는 것을 발견했다면, 통합된 Weave traces를 통해 모델이 평가 기준을 통과하지 못할 정도로 너무 장황한 응답을 생성하기 시작했다는 등의 구체적인 원인을 정확히 파악할 수 있습니다.
Weave 패널 사용하기
기계학습 파이프라인에서 함수에 @weave.op 데코레이터를 추가함으로써, 실행 정보를 자동으로 캡처하고 개인 Workspace 에서 이에 엑세스할 수 있습니다.
예를 들어, 다음 스크립트는 Weave traces가 W&B 트레이닝 Runs 와 어떻게 통합되는지 보여줍니다. 이 스크립트는 각 트레이닝 단계가 W&B에 메트릭을 기록하는 동시에 상세한 Weave traces를 생성하는 기계학습 트레이닝 루프를 시뮬레이션합니다. 함수의 @weave.op 데코레이터는 입력, 출력 및 실행 세부 정보를 자동으로 캡처합니다. 트레이닝 루프가 wandb.log()로 메트릭을 로그할 때, Weave trace 정보도 프로젝트에 함께 기록됩니다.
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)
# trace를 포함한 평가
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 tracing을 사용하여 트레이닝 실행
results = training_step(epoch, run.config.lr)
# W&B에 로그 기록 - 통합 포인트 생성
run.log({
"epoch": epoch,
"loss": results["loss"],
"accuracy": results["accuracy"]
})
이 예제 스크립트를 실행하여 나머지 run 정보와 함께 trace가 어떻게 기록되는지 확인할 수 있습니다.
run 도중이나 종료 후 Workspace 에서 trace 정보를 보려면, run 시작 시 터미널 에 제공된 링크를 클릭하거나(wandb: 🚀 View run at https://wandb.ai/wandb/my-project/runs/<run-ID> 와 같은 형태) UI에서 Workspace 로 이동하면 됩니다.
UI에서 Workspace 로 이동하는 방법:
- W&B UI를 열고 Projects 탭을 클릭합니다. 프로젝트 목록이 나타납니다.
- 프로젝트 목록에서 run을 기록한 프로젝트를 클릭합니다. Workspaces 페이지가 열립니다.
- Workspace 가 자동 Workspace 로 설정된 경우, run에 대한 데이터 시각화 및 정보가 자동으로 채워집니다. 해당 run의 trace 데이터는 Workspace 의 Weave 섹션에서 확인할 수 있습니다. 수동 Workspace 인 경우, Add panels를 클릭하고 Weave 섹션에서 새 패널을 선택하여 Weave 패널을 추가할 수 있습니다.
Workspace 에 대한 자세한 내용은 실험 결과 보기를 참조하세요.
Weave trace에서 W&B Artifacts 참조하기
Weave traces에서 W&B Artifacts (모델, 데이터셋, 체크포인트 등)를 참조할 수 있습니다. 이렇게 하면 Weave UI에 아티팩트 상세 페이지로 바로 이동하는 클릭 가능한 링크가 생성되어, 특정 작업 중에 어떤 Artifact 버전이 사용되었는지 추적하는 데 도움이 됩니다.
예를 들어, 모델의 두 가지 버전(v1 및 v2)을 트레이닝한 경우, 해당 모델을 쿼리할 때 v1 Artifact 참조를 trace의 속성(attribute)으로 추가할 수 있습니다. 이를 통해 어떤 Artifact 버전이 특정 출력을 생성했는지 정확하게 추적할 수 있습니다.
Artifact를 trace와 연결하려면, wandb-artifact:/// 접두사와 Artifact의 전체 이름을 wandb-artifact:///<full-name-of-artifact> 형식으로 결합하여 Artifact URL을 생성합니다. 그런 다음 다음 두 가지 방법 중 하나로 Weave에 전달합니다:
- 임의의 속성(attribute)으로 전달
Model의 속성으로 전달
Artifact의 전체 이름은 W&B UI의 아티팩트 상세 페이지에서 확인할 수 있습니다. 형식은 <entity>/<project>/<artifact_name>:<version> 입니다. 상세 페이지에서 이 전체 이름을 복사할 수 있습니다.
Trace의 속성으로 추가하기
Artifact를 trace의 속성으로 추가하려면, weave.attributes() 컨텍스트 매니저에 키-값 쌍으로 전달합니다:
import weave
weave.init("your-team-name/your-project-name")
@weave.op
def my_function(name: str):
return f"Hello, {name}!"
# 임의의 키 이름과 Artifact URL을 값으로 추가합니다.
with weave.attributes({'artifact_id': 'wandb-artifact:///team-name/project-name/run-38m4t5ja-history:v0'}):
result = my_function("World")
import {init, op, withAttributes} from 'weave';
async function main() {
await init('wandb/docs');
const myFunction = op(async function myFunction(name: string) {
return `Hello, ${name}!`;
});
// 임의의 키 이름과 Artifact URL을 값으로 추가합니다.
const result = await withAttributes(
{artifact_id: "wandb-artifact:///team-name/project-name/run-38m4t5ja-history:v0"},
async () => myFunction('World')
);
console.log('Result:', result);
}
main().catch(console.error);
Model의 속성으로 Artifact 추가하기
Artifact를 Model의 속성으로 추가하려면, 모델을 인스턴스화할 때 Artifact URL을 전달합니다:
Model 클래스는 현재 Weave Python SDK에서만 지원됩니다.
import weave
weave.init("your-team-name/your-project-name")
class MyModel(weave.Model):
# Artifact 참조를 모델 속성으로 저장합니다.
artifact_id: str
temperature: float = 0.7
@weave.op
def predict(self, query: str) -> str:
# 여기에 모델 추론 로직을 작성합니다.
return f"Response to: {query}"
# Artifact URL을 모델의 속성으로 전달합니다.
model = MyModel(
artifact_id="wandb-artifact:///team-name/project-name/run-38m4t5ja-history:v0"
)
result = model.predict("Hello, World!")