> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# TensorFlow

> W&B를 TensorFlow와 통합하여 커스텀 메트릭 로깅, Estimator 훅 사용, TensorBoard 로그 동기화를 수행하세요.

export const ColabLink = ({url}) => <a href={url} target="_blank" rel="noopener noreferrer" className="colab-link">
    <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
      <path d="M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01.21.03zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z" />
    </svg>
    Try in Colab
  </a>;

<ColabLink url="https://colab.research.google.com/drive/1JCpAbjkCFhYMT7LCQ399y35TS3jlMpvM" />

이 페이지에서는 W\&B를 TensorFlow와 통합하여 실험을 추적하고, 메트릭을 로깅하고, TensorBoard 로그를 동기화하는 방법을 설명합니다. 다음 패턴에 따라 TensorFlow 모델의 트레이닝 데이터를 캡처하고, Estimator 훅이나 수동 로깅으로 로깅할 항목을 사용자 지정하며, 기존 TensorBoard 워크플로를 W\&B의 중앙 집중식 대시보드에서 그대로 활용하세요. TensorBoard만으로는 부족한, 더 풍부한 실험 추적이 필요할 때 이 인테그레이션을 사용하세요.

<h2 id="get-started">
  시작하기
</h2>

이미 TensorBoard를 사용하고 있다면 W\&B와 통합할 수 있습니다. 두 라이브러리를 모두 임포트하면 스크립트에서 W\&B API와 TensorFlow API를 사용할 수 있습니다.

```python theme={"system"}
import tensorflow as tf
import wandb
```

<h2 id="log-custom-metrics">
  커스텀 메트릭 로깅하기
</h2>

이 섹션에서는 TensorBoard가 캡처하지 않는 메트릭을 로깅하여 표준 TensorBoard 요약과 함께 추가 값을 추적하는 방법을 설명합니다.

TensorBoard가 로깅하지 않는 커스텀 메트릭을 추가로 로깅해야 하는 경우 코드에서 `run.log()`를 호출하면 됩니다(예: `run.log({"custom": 0.8})`).

W\&B는 TensorBoard를 동기화할 때 `run.log()`의 step 인수를 비활성화합니다. 다른 step 카운트를 설정하려면 다음과 같이 step 메트릭과 함께 메트릭을 로깅하세요.

```python theme={"system"}
with wandb.init(config=tf.flags.FLAGS, sync_tensorboard=True) as run:
    run.log({"custom": 0.8, "global_step":global_step}, step=global_step)
```

<h2 id="tensorflow-estimators-hook">
  TensorFlow estimators 훅
</h2>

이 섹션에서는 TensorFlow estimators용 W\&B 훅을 설명합니다. 이 훅을 사용하면 estimator 트레이닝 중에 W\&B가 캡처하는 항목을 세밀하게 제어할 수 있습니다.

로깅할 항목을 더 세밀하게 제어하고 싶다면 W\&B에서 제공하는 TensorFlow estimators용 훅을 사용하세요. 이 훅은 그래프의 모든 `tf.summary` 값을 로깅합니다.

```python theme={"system"}
import tensorflow as tf
import wandb

run = wandb.init(config=tf.FLAGS)

estimator.train(hooks=[wandb.tensorflow.WandbHook(steps_per_log=1000)])
run.finish()
```

<h2 id="log-manually">
  수동으로 로깅하기
</h2>

estimator를 사용하지 않거나 특정 요약을 명시적으로 로깅하려는 경우, 이 섹션에서는 `tf.summary` 값을 W\&B에 직접 전송하는 방법을 설명합니다.

TensorFlow에서 메트릭을 로깅하는 한 가지 방법은 TensorFlow 로거로 `tf.summary`를 로깅하는 것입니다.

```python theme={"system"}
import wandb
run = wandb.init(config=tf.flags.FLAGS, sync_tensorboard=True)
with tf.Session() as sess:
    # ...
    wandb.tensorflow.log(tf.summary.merge_all())
```

TensorFlow 2에서 맞춤형 루프로 모델을 트레이닝할 때는 `tf.GradientTape`를 사용하는 것이 권장됩니다. 자세한 내용은 [TensorFlow 맞춤형 트레이닝 워크스루](https://www.tensorflow.org/tutorials/customization/custom_training_walkthrough)를 참조하세요. 맞춤형 TensorFlow 트레이닝 루프에 W\&B를 통합하여 메트릭을 로깅하려면 다음 스니펫을 참고하세요.

```python theme={"system"}
    with tf.GradientTape() as tape:
        # 확률 조회
        predictions = model(features)
        # 손실 계산
        loss = loss_func(labels, predictions)

    # 메트릭 로깅
    run.log({"loss": loss.numpy()})
    # 그라디언트 조회
    gradients = tape.gradient(loss, model.trainable_variables)
    # 가중치 업데이트
    optimizer.apply_gradients(zip(gradients, model.trainable_variables))
```

[TensorFlow 2에서 트레이닝 루프를 맞춤형으로 구성하는 전체 예시](https://www.wandb.com/articles/wandb-customizing-training-loops-in-tensorflow-2)를 사용할 수 있습니다.

<h2 id="differences-between-wb-and-tensorboard">
  W\&B와 TensorBoard의 차이
</h2>

W\&B를 TensorBoard와 함께 사용하거나 대신 도입할지 평가 중이라면, 이 섹션에서 주요 차이점을 확인하세요.

W\&B는 TensorBoard 사용자가 겪는 일반적인 한계를 해결하기 위해 만들어졌습니다. W\&B가 다른 점은 다음과 같습니다:

* **모델 재현**: W\&B는 실험, 탐색 및 나중에 모델을 재현하는 기능을 지원합니다. W\&B는 메트릭, 하이퍼파라미터 및 코드 버전을 캡처하며, 버전 제어 상태와 모델 체크포인트를 저장하여 프로젝트를 재현 가능하게 만듭니다.
* **자동 정리**: 협업자의 프로젝트를 이어서 진행하거나, 오랜만에 돌아오거나, 이전 프로젝트를 다시 볼 때 W\&B를 사용하면 시도한 모델을 확인할 수 있어 불필요하게 실험을 다시 실행하지 않아도 됩니다.
* **유연한 인테그레이션**: 오픈 소스 Python 패키지를 설치하고 코드에 몇 줄만 추가하면 W\&B를 프로젝트에 추가할 수 있습니다. 각 run은 로깅된 메트릭과 레코드를 생성합니다.
* **지속적이고 중앙화된 대시보드**: 로컬 머신, 공유 랩 클러스터 또는 클라우드의 Spot Instances에서 모델을 트레이닝하든, W\&B는 결과를 동일한 중앙화된 대시보드로 전송합니다. 여러 머신에서 TensorBoard 파일을 복사하고 정리할 필요가 없습니다.
* **Tables**: 여러 모델의 결과를 검색, 필터링, 정렬 및 그룹화할 수 있습니다. 모델 버전을 검토하고 다양한 작업에 가장 성능이 좋은 모델을 찾을 수 있습니다.
* **협업 도구**: W\&B를 사용하여 머신 러닝 프로젝트를 정리하세요. W\&B 링크를 공유하거나 private 팀을 사용하여 결과를 공유 프로젝트로 보낼 수 있습니다. Reports는 대화형 시각화와 Markdown 설명을 통해 협업을 지원하므로, 작업 로그를 기록하거나 상사에게 발견 사항을 공유하거나 연구실 또는 팀에 결과를 발표하는 데 활용할 수 있습니다.

W\&B를 사용해 보려면 [무료 계정을 만드세요](https://id.coreweave.com/signup).

<h2 id="examples">
  예시
</h2>

이러한 인테그레이션 패턴이 전체 프로젝트에 적용된 모습을 보려면 다음 예시를 살펴보세요.

* [TensorFlow Estimators를 사용한 MNIST 예시](https://github.com/wandb/examples/blob/master/examples/tensorflow/tf-estimator-mnist/mnist.py).
* [순수 TensorFlow를 사용한 Fashion MNIST 예시](https://github.com/wandb/examples/blob/master/examples/tensorflow/tf-cnn-fashion/train.py).
* [MNIST 예시의 W\&B 대시보드](https://forge.coreweave.com/wandb/l2k2/examples-tf-estimator-mnist/runs/p0ifowcb).
* TensorFlow 2에서 트레이닝 루프 맞춤 설정하기: [아티클](https://www.wandb.com/articles/wandb-customizing-training-loops-in-tensorflow-2) 및 [대시보드](https://app.wandb.ai/sayakpaul/custom_training_loops_tf).
