모델 트레이닝 run 중에 Weave 트레이스를 로깅하고 개인 워크스페이스에서 확인할 수 있습니다.
개인 워크스페이스는 UI에서 모델 트레이닝 run에 대한 심층 분석과 데이터 시각화를 볼 수 있는 맞춤형 대시보드입니다. 워크스페이스에 Weave 패널을 추가하면 모델 run 중에 로깅된 트레이스 데이터를 조회하고 액세스하여 트레이닝 중 모델의 성능을 파악할 수 있습니다.
예를 들어 LLM 모델을 파인튜닝하는 중에 W&B 워크스페이스에서 step 500에 accuracy가 떨어지는 것이 보인다면, 통합된 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에서 워크스페이스로 이동하려면:
- W&B UI를 열고 Projects 탭을 클릭하세요. 그러면 프로젝트 목록이 열립니다.
- 프로젝트 목록에서 run을 로깅한 프로젝트를 클릭하세요. 그러면 Workspaces 페이지가 열립니다.
- 워크스페이스를 자동 워크스페이스로 설정한 경우, 워크스페이스에 데이터 시각화와 run 정보가 자동으로 표시됩니다. run의 트레이스 데이터는 워크스페이스의 Weave 섹션에서 확인할 수 있습니다. 워크스페이스가 수동 워크스페이스인 경우에는 Add panels를 클릭한 다음 Add Panels 메뉴의 Weave 섹션에서 패널을 선택해 Weave 패널을 추가할 수 있습니다.
워크스페이스에 대한 자세한 내용은 실험 결과 보기를 참조하세요.
경우에 따라 Weave가 자동으로 감지한 run이 아닌 다른 run에 트레이스를 연결하고 싶을 수 있습니다. 기본적으로 Weave는 활성 wandb.run을 자동으로 감지해 해당 run에 트레이스를 연결합니다. 전역 wandb.run이 아닌 특정 run에 트레이스를 연결해야 하는 경우 set_wandb_run_context를 사용하세요. 특정 run과 run step에 트레이스를 연결하려면 run_id 및 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 아티팩트 레퍼런스하기
Weave 트레이스에서 W&B 아티팩트(모델, 데이터셋, checkpoint 등)를 레퍼런스할 수 있습니다. 그러면 Weave UI에 아티팩트의 세부 정보 페이지로 바로 이동할 수 있는 클릭 가능한 링크가 생성되며, 이를 통해 특정 오퍼레이션 중 사용한 아티팩트 버전을 추적하는 데 도움이 됩니다.
예를 들어, 모델의 두 버전(v1 및 v2)을 트레이닝한 경우, 해당 모델을 쿼리할 때 v1 아티팩트 레퍼런스를 트레이스의 속성으로 추가할 수 있습니다. 이렇게 하면 주어진 출력이 정확히 어떤 아티팩트 버전에서 생성되었는지 추적하는 데 도움이 됩니다.
아티팩트를 트레이스와 연결하려면, 다음 구문을 사용해 wandb-artifact:/// 접두사와 아티팩트의 전체 이름을 이어 붙여 아티팩트 URL을 구성합니다: wandb-artifact:///[FULL-NAME-OF-ARTIFACT]. 그런 다음 다음 두 가지 방법 중 하나로 이를 Weave에 전달합니다.
아티팩트의 전체 이름은 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!")