[3週間]8.20金


✏️Multi-GPU


  • 今日の深い学習と大量のデータの比較
  • 最近データの増加のため、多くのGPUで学ぶのはすでに日常化の時代に入った.
  • 概念まとめ
  • Single vs. Multi
    ->1 vs.2以上
  • GPU vs. Node
    -> GPU vs. System(computer with GPU)
  • Single Node Single GPU
    ->1台のコンピュータ上の単一GPU
  • Single Node Multi GPU
    ->1台のコンピュータ上の複数のGPU
    ->主に使用する環境
  • Multi Node Multi GPU
    -> Multi computer & Multi GPU
    ->ex)サーバルーム
  • モデル並列(モデル並列)

  • 学習をマルチGPUに分散する2つの方法の1つである
  • (Alexnet)
  • 型のボトルネック、パイプラインの困難などが原因で、これらはいずれも難易度の高い難題である.
  • データへいれつ

  • データがGPUに割り当てられた後の平均結果
  • minibatch修飾に類似する.シリアルminibatch学習を複数のGPU上で並列に実行することは、非常に便利です.
  • Pytochは2つの方法を提供します
  • DataParallel
  • DistributedDataParallel
  • DataParallel
    ->データ配分演算を簡単に行い、平均値を得るためにまとめます
    ->コーディネータGPUの集約によるGPU使用のアンバランス問題&Batchサイズの減少→GPUボトルネック&GIL
  • DistributedDataParallel
    ->CPUごとにプロセスを作成し、各GPUに割り当てる
    ->平均単一演算
  • ✏️Hyperparameter Tuning

  • モデルの自己学習しない値は、ユーザーによって指定されます.
    ->学習率、layer input/output dimension、オプティマイザなど
  • の超パラメータを調整する実験で、少し良い性能モデルを学びましょう!
  • 以前は、データ不足のため、スーパーパラメータで大きく値を左右することがあった.最近ですね.
  • 最後の0.01の時に挑戦してみてください!
    -> Acc ⬆, Loss ⬇
  • Hyperparameter Tuning Methods

  • 最も基本的な方法-grid vs.random
    ->ランダム検索スペースとグリッド検索が一般的(旧学校)
  • は最近,ベージュスキームに基づく技術が主導している(BOHB-2018論文)
  • Hyperparameter Tuning Tool - Ray

  • マルチノードマルチプロセッシングサポートモジュール
  • ML/DL並列処理モジュール
  • は、基本的に現在の分散パラレルML/DLモジュールの標準
  • である.
  • HyperParameter Search用の複数のモジュール
  • 🔗Image Reference

  • https://content.iospress.com/articles/journal-of-intelligent-and-fuzzy-systems/ifs190033
  • https://dl.acm.org/doi/pdf/10.5555/2188385.2188395
  • ✏️Pytorch Troubleshooting


    Out Of Memory(OOM)

  • なぜ、どこで起きたのですか?
  • Error遡及異常点
  • メモリの移行状況を把握するのは難しい
    ->通常は反復の間に発生するので難しいです.
  • 最も便利な方法:
    Batch Size ⬇ → GPU clean → Run
  • GPUtilの使用


    モジュール
  • nvidia-simiはGPUの状態を表示する
    !pip install GPUtil
    
    import GPUtil
    GPUtil.showUtilization()

    torch.cuda.空のcache()の使用

  • 未使用GPU上のキャッシュ
  • をクリアする.
  • 使用可能メモリ
  • DELと区別する必要があります
    →graphと直接関係を断つ命令
  • reset
  • ではなく

    トレーニングサイクルにテンソル形式で蓄積された変数は確認する必要がある.

  • テンソル変数GPUメモリ
  • を使用
  • 1-dテンソルはPython基本オブジェクト処理
  • に変換する.
    total_loss = 0
    for i in range(10000):
        optimizer.zero_grad()
        output = model(input)
        loss = criterion(output, label)
        loss.backward()
        optimizer.step()
        total_loss += loss # should be float(loss) or loss.item() to make it tensor → float

    delコマンドを正しく使用

  • を必要としない変数は、対応する削除
  • を必要とする.
    # python의 메모리 배치 특성 상 loop이 끝나도 메모리를 차지
    for x in range(10):
        i = x
    
    print(i) # 9 is printed

    実験可能なbatchサイズ

  • 学習中にOOMが発生した場合batchサイズ1で実験
  • を行う.
    oom = False
    try:
        run_model(batch_size) # 64 → 32 → ...
    except: RuntimeError:
        oom = True
    
    if oom:
        for _ in range(batch_size):
            run_model(1)

    torch.No grad()の使用

  • 推定点で、torchです.No grad()構文を使用する
  • は、バックパスを介してスタックメモリから
  • を解放する.
    必ず
  • を使います!
  • それ以外は

  • colabで大きなサイズを運転しないでください
    ->pretravidモデル推奨
  • CNNの大部分のエラーは大きさの違いによって発生した.
    ->torchsummary
  • の使用を推奨
  • テンソルの浮動小数点精度を16ビットに低減することができる.
    ->大型でなければ
  • はあまり使いません

    毎週学習のまとめ

  • 8.17(火):https://velog.io/@blackpudding96/3%EC%A3%BC%EC%B0%A8-8.17-%ED%99%942
  • 8.18(数量):https://velog.io/@blackpudding96/3%EC%A3%BC%EC%B0%A8-8.18-%EC%88%982
  • 8.19(木):https://velog.io/@blackpudding96/3%EC%A3%BC%EC%B0%A8-8.19-%EB%AA%A92
  • 課題実行プロセス/成果整理

  • 要求:
  • を完了して提出する
  • 選択:
  • ピア・セッションのクリア


    今週はpytorchを使ってモデルを作成したり、datasetやdataloaderを使ったりするなどpytorchを正しく学ぶことができる課題なので、量が非常に多いです.授業のコメントと課題コードのコメントはほとんど対等な会話の大部分を占めている.たくさん学べて、たくさんもらえてよかったです.

    学習の回顧


    時間が経つにつれて、私が知っていることが多くなり、輪郭もぼやけてきたような気がします.ちょっと不安急いで勉強したからだと思いますが...もう一度復習して整理したいのですが、毎日の勉強量が大きすぎてついていけず、100%満足できる復習や整理ができません.仕方がない.もっと時間をかけて作るしかない...来週も頑張ります!