GPU CIとは? GPUランナーでのパイプライン実行の解説
GPU CIとは、GPU搭載のランナーで継続的インテグレーションのジョブを実行することで、機械学習のトレーニング、推論テスト、CUDAビルドをパイプライン内で実行できるようにするものです。
ほとんどのCIはCPUで実行され、通常のソフトウェアのビルドやテストにはそれで十分です。機械学習は違います。トレーニングや多くのモデルテストはGPUの方が劇的に高速です。GPU CIはパイプラインにそのハードウェアへのアクセスを与え、ML作業を誰かのラップトップ上だけでなく自動で実行できるようにします。
GPU CIとは
GPU CIとは、1つ以上のGPUを搭載したCIランナーをプロビジョニングすることを意味し、ジョブがPyTorchやTensorFlowのようなフレームワークをハードウェアアクセラレーションとともに使えるようにします。これにより、トレーニング、GPU推論テスト、CUDAに依存するビルドを自動化されたパイプライン内で実行できます。
なぜMLに必要なのか
CPUでのディープラーニングのトレーニングはGPUより数十倍から数百倍遅くなることがあります。これらのジョブをGPUなしで実行するのはしばしば非現実的です。GPU CIはGPUコードパスが実際に動作するかをテストする上でも重要です。CPUのみのテストではCUDAカーネルを動かせないためです。
コストの観点
GPUランナーは分あたりのコストが高いため、目標は役立つ場所でのみ使うことです。良いパターンは、重いトレーニングや推論のジョブをGPUランナーにルーティングしつつ、それ以外のすべて - lint、データ検証、CPUテスト - を安価なCPUランナーに残すことです。
GPU CIの実践
必要とするジョブだけにGPUランナーを選択し、パイプラインの残りはCPUに保ちます。
jobs:
lint: { runs-on: small } # cheap CPU
train:
runs-on: gpu-large # GPU only here
steps:
- run: nvidia-smi
- run: python train.pyLatchkeyのメモ
Latchkeyでは、GPUや大型のランナーがオンデマンドで利用できるため、GPUの利用時間はそれを必要とするジョブに対してのみ支払います。大きなデータセット、モデルの重み、CUDA重の依存関係を実行間でキャッシュすることで高価なGPUジョブを短く保ち、auto-retryが一時的なデータ取得でコストのかかるGPU実行が無駄になるのを防ぎます。
重要なポイント
- GPU CIはGPU搭載のランナーでパイプラインのジョブを実行し、MLのトレーニング、推論テスト、CUDAビルドを実行できるようにします。
- ディープラーニングはGPUの方がはるかに高速で、一部のコードパスは実際のGPUでしかテストできません。
- 重いジョブだけをGPUランナーにルーティングし、大きなアセットをキャッシュすることで高価なGPU利用時間を抑えます。