이제 모델 학습 실행 중에 Weave 트레이스를 기록하고, 개인 워크스페이스에서 확인할 수 있습니다.
개인 워크스페이스는 UI에서 사용자 정의 가능한 대시보드로, 모델 학습 실행에 대한 심층 분석과 데이터 시각화를 제공하는 공간입니다. 워크스페이스에 Weave 패널을 추가하면 모델 실행 중에 기록된 트레이스 데이터를 확인하고 탐색할 수 있어, 모델이 학습 중에 어떻게 동작하는지에 대한 인사이트를 더 잘 얻을 수 있습니다.
예를 들어 LLM 모델을 파인튜닝하는 상황에서, W&B 워크스페이스에서 스텝 500에서 정확도가 떨어지는 것을 발견했다고 가정해 보겠습니다. 이때 통합된 Weave 트레이스는 어떤 일이 발생했는지 정확히 보여줄 수 있습니다. 예를 들어 모델이 지나치게 장황한 응답을 생성하기 시작해, 그 결과 평가 기준을 통과하지 못했을 수 있습니다.
ML 파이프라인에서 함수에 @weave.op 데코레이터를 적용하면, 해당 함수들의 실행 정보를 자동으로 수집하고 개인 워크스페이스에서 확인할 수 있습니다.
예를 들어, 다음 스크립트는 Weave 트레이스가 W&B 학습 실행과 어떻게 연동되는지 보여줍니다. 이 스크립트는 각 학습 단계에서 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"]
})
이 예제 스크립트를 실행하여 트레이스가 실행의 다른 정보와 함께 어떻게 로그되는지 확인할 수 있습니다.
실행 중이거나 실행이 끝난 후 워크스페이스에서 트레이스 정보를 보려면, 실행 시작 시 터미널에 표시되는 링크(다음과 같은 형태: wandb: 🚀 View run at https://wandb.ai/wandb/my-project/runs/<run-ID>)를 열거나, UI에서 워크스페이스로 이동하면 됩니다.
UI에서 워크스페이스로 이동하려면:
- W&B UI를 열고 Projects 탭을 클릭합니다. 그러면 사용자의 프로젝트 목록이 열립니다.
- 프로젝트 목록에서 실행을 기록한 프로젝트를 클릭합니다. 그러면 Workspaces 페이지가 열립니다.
- 워크스페이스를 자동 워크스페이스로 설정한 경우, 워크스페이스에는 실행에 대한 데이터 시각화와 정보가 자동으로 채워집니다. 실행에 대한 트레이스 데이터는 워크스페이스의 Weave 섹션에 있습니다. 워크스페이스가 수동 워크스페이스인 경우, Add panels를 클릭하고 Add panels 메뉴의 Weave 섹션에서 새 패널을 선택하여 Weave 패널을 추가할 수 있습니다.
워크스페이스에 대한 자세한 내용은 실험 결과 보기를 참조하세요.
Weave 트레이스에서 W&B 아티팩트 참조하기
Weave 트레이스에서 W&B 아티팩트 (예: 모델, 데이터셋, 체크포인트)를 참조할 수 있습니다. 이렇게 하면 Weave UI에 아티팩트 상세 페이지로 바로 이동하는 클릭 가능한 링크가 생성되어, 특정 작업에서 어떤 아티팩트 버전이 사용되었는지 추적하는 데 도움이 됩니다.
예를 들어, 두 개의 모델 버전(v1과 v2)을 학습했다면, 해당 모델을 조회할 때 v1 아티팩트 참조를 트레이스의 속성으로 추가할 수 있습니다. 이렇게 하면 어떤 아티팩트 버전이 특정 출력값을 생성했는지 정확히 추적할 수 있습니다.
트레이스에 아티팩트를 연결하려면, wandb-artifact:/// 접두사에 아티팩트의 전체 이름을 이어 붙여 wandb-artifact:///<full-name-of-artifact> 형식의 아티팩트 URL을 만듭니다. 그런 다음 아래 두 가지 방법 중 하나로 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")
import {init, op, withAttributes} from 'weave';
async function main() {
await init('wandb/docs');
const myFunction = op(async function myFunction(name: string) {
return `Hello, ${name}!`;
});
// 임의의 키 이름과 아티팩트 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의 속성으로 아티팩트를 추가하려면 모델 인스턴스를 생성할 때 아티팩트 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!")