이제 모델 트레이닝 run 중에 Weave 트레이스를 로깅하고 개인 워크스페이스에서 확인할 수 있습니다.
개인 워크스페이스는 UI에서 모델 트레이닝 run에 대한 심층 분석과 데이터 시각화를 볼 수 있는 맞춤형 대시보드입니다. 워크스페이스에 Weave 패널을 추가하면 모델 run 중에 로깅된 트레이스 데이터를 조회하고 액세스하여 트레이닝 중 모델의 성능을 더 잘 파악할 수 있습니다.
예를 들어 LLM 모델을 파인튜닝하는 중에 W&B 워크스페이스에서 step 500에 accuracy가 떨어지는 것이 보인다면, 통합된 Weave 트레이스를 통해 모델이 평가 기준을 충족하지 못할 정도로 지나치게 장황한 응답을 생성하기 시작하는 등 정확히 어떤 일이 있었는지 확인할 수 있습니다.
ML 파이프라인에서 함수에 @weave.op를 적용하면 해당 함수의 실행 정보를 자동으로 캡처하고, 이를 개인 워크스페이스에서 확인할 수 있습니다.
예를 들어, 다음 스크립트는 Weave 트레이스가 W&B 트레이닝 runs와 어떻게 통합되는지 보여줍니다. 이 스크립트는 각 트레이닝 step이 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에서 워크스페이스로 이동하려면 다음 단계를 따르세요:
- W&B UI를 열고 Projects 탭을 클릭합니다. 그러면 프로젝트 목록이 열립니다.
- 프로젝트 목록에서 run을 로깅한 프로젝트를 클릭합니다. 그러면 Workspaces 페이지가 열립니다.
- 워크스페이스를 자동 워크스페이스로 설정한 경우, 워크스페이스에 데이터 시각화와 run 정보가 자동으로 채워집니다. run의 트레이스 데이터는 워크스페이스의 Weave 섹션 아래에 있습니다. 워크스페이스가 수동 워크스페이스인 경우에는 Add panels를 클릭한 다음 Add Panels 메뉴의 Weave 섹션에서 새 패널을 선택해 Weave 패널을 추가할 수 있습니다.
워크스페이스에 대한 자세한 내용은 실험 결과 보기를 참조하세요.
기본적으로 Weave는 활성 상태인 wandb.run을 자동으로 감지하고 해당 run에 트레이스를 연결합니다. 전역 wandb.run이 아닌 특정 run에 트레이스를 연결해야 하는 경우 set_wandb_run_context를 사용하세요. run_id 및 step 인수에 값을 지정하여 트레이스를 특정 run과 run step에 연결할 수 있습니다:
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 artifact 레퍼런스하기
Weave 트레이스에서 W&B artifacts(모델, 데이터셋, checkpoint 등)를 레퍼런스할 수 있습니다. 그러면 Weave UI에 artifact의 세부 정보 페이지로 바로 이동할 수 있는 클릭 가능한 링크가 생성되어, 특정 오퍼레이션 중 어떤 artifact 버전이 사용되었는지 추적하는 데 도움이 됩니다.
예를 들어, 모델의 두 버전(v1 및 v2)을 트레이닝한 경우, 해당 모델을 쿼리할 때 v1 artifact 레퍼런스를 트레이스의 속성으로 추가할 수 있습니다. 이렇게 하면 주어진 출력이 정확히 어떤 artifact 버전에서 생성되었는지 추적하는 데 도움이 됩니다.
artifact를 트레이스와 연결하려면, 다음 구문을 사용해 wandb-artifact:/// 접두사와 artifact의 전체 이름을 이어 붙여 artifact URL을 구성합니다: wandb-artifact:///<full-name-of-artifact>. 그런 다음 다음 두 가지 방법 중 하나로 이를 Weave에 전달합니다.
artifact의 전체 이름은 W&B UI의 세부 정보 페이지에서 확인할 수 있습니다. 형식은 다음과 같습니다: <entity>/<project>/<artifact_name>:<version>. W&B UI의 artifact 세부 정보 페이지에서 전체 이름을 복사할 수 있습니다.
artifact를 트레이스의 속성으로 추가하려면 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);
artifact를 Model의 속성으로 추가하기
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:
# 모델 Inference 로직을 여기에 작성
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!")