GitLab Runnerをインストールし、Docker Machineに登録します。

オートスケール機能はGitLab Runner 1.1.0で導入されました。

オートスケールアーキテクチャの概要については、オートスケーリングに関する包括的なドキュメントをご覧ください。

Dockerマシンのフォーク版

DockerはDocker Machineを非推奨としました。しかし、GitLabはDocker MachineのExecutorに依存しているGitLab RunnerユーザーのためにDocker Machineのフォークをメンテナーしています。このフォークはdocker-machine の最新のmain ブランチをベースに、以下のバグに対するパッチを追加したものです:

Docker Machineフォークの意図は、ランニングコストに影響するクリティカルな問題やバグのみを修正することです。新しい機能は追加されません。

環境の準備

オートスケール機能を利用するには、Docker MachineとGitLab Runnerが同じマシンにインストールされている必要があります:

  1. Dockerが新しいマシンを生成するBastionサーバーとなるLinuxベースの新しいマシンにログインしてください。
  2. GitLab Runnerのインストール
  3. Docker MachineフォークからDocker Machineをインストールします。
  4. オプションですが、オートスケールランナーで使用するプロキシコンテナレジストリとキャッシュサーバーを準備することを推奨します。

GitLab Runner の設定

  1. gitlab-runner と一緒にdocker-machine を使うためのコアコンセプトを理解しましょう:
  2. 初めてDocker Machineを使うときは、Docker Machine Driverを使って手動でdocker-machine create ...GitLab Runner MachineOptionsセクションで設定するオプションと一緒にこのコマンドを実行してください。これでDocker Machineの環境が適切にセットアップされ、指定したオプションの検証にもなります。この後、docker-machine rm [machine_name] でマシンを破棄して Runner を起動します。

    note
    最初の使用時に行われるdocker-machine create への複数の同時リクエストは良くありません。docker+machine Executorが使用されている場合、Runnerはいくつかの同時実行docker-machine create コマンドをスピンアップする可能性があります。この環境でDocker Machineを使用したことがない場合、起動した各プロセスはSSHキーとSSL証明書(GitLab Runnerと自動スケールされたスポーンされたマシン上のDocker Engine間のDocker API認証用)を準備しようとし、これらの同時プロセスは互いに妨害し合います。これは動作しない環境になってしまう可能性があります。そのため、GitLab RunnerをDocker Machineで初めてセットアップするときは、手動でテストマシンを作成することが重要です。
  3. Runnerを登録し、尋ねられたらdocker+machine Executorを選択してください。
  4. config.toml を編集し、Docker Machineを使用するようにランナーを設定します。GitLab Runner Autoscalingの詳細については、専用ページをご覧ください。
  5. では、プロジェクトで新しいパイプラインを開始してみましょう。数秒後にdocker-machine ls を実行すると、新しいマシンが作成されているのが見えるはずです。

GitLab Runner のアップグレード

  1. オペレーティングシステムが自動的にGitLab Runnerを再起動するように設定されているかどうかを確認します(サービスファイルを確認するなど):
    • もしそう**であれば、サービスマネージャーがSIGQUIT を使うように設定されていることを確認し、サービスのツールを使ってプロセスを停止してください:

       # For systemd
       sudo systemctl stop gitlab-runner
            
       # For upstart
       sudo service gitlab-runner stop
      
    • もしそうでなければ、手動でプロセスを停止してください:

       sudo killall -SIGQUIT gitlab-runner
      
    note
    [SIGQUIT シグナルをSIGQUIT送ると、プロセスは優雅に停止します。プロセスは新しいジョブの受け付けを停止し、現在のジョブが終了するとすぐに終了します。
  2. GitLab Runnerが終了するまで待ちます。gitlab-runner status でステータスを確認したり、最大 30 分まで猶予のあるシャットダウンを待つことができます:

    for i in `seq 1 180`; do # 1800 seconds = 30 minutes
        gitlab-runner status || break
        sleep 10
    done
    
  3. これで、ジョブを中断することなく新しいバージョンの GitLab Runner を安全にインストールすることができます。

フォークされたバージョンのDocker Machineの使用

インストール

  1. 適切なdocker-machine バイナリをダウンロードしてください。バイナリをPATH がアクセスできる場所にコピーし、実行可能にしてください。例えば、v0.16.2-gitlab.21 をダウンロードしてインストールする場合:

    curl -O "https://gitlab-docker-machine-downloads.s3.amazonaws.com/v0.16.2-gitlab.21/docker-machine-Linux-x86_64"
    cp docker-machine-Linux-x86_64 /usr/local/bin/docker-machine
    chmod +x /usr/local/bin/docker-machine
    

Google Compute EngineでのGPUの利用

GitLab Docker Machine0.16.2-gitlab.10 と GitLab Runner 13.9 で導入されました

note
GPUはすべてのExecutorでサポートされています。GPUサポートのためだけにDocker Machineを使う必要はありません。Docker Machine ExecutorはGPUノードのスケールアップとスケールダウンを簡単にしますが、これはKubernetes Executorでも可能です。

Docker Machineフォークを使用して、グラフィック処理ユニット(GPU)を備えたGoogle Compute Engineインスタンスを作成することができます。GPUをDocker Executorで動作させるには、GitLab Runner 13.9が必要です。

Docker Machine GPUオプション

GPUでインスタンスを作成するには、以下のDocker Machineオプションを使用します:

オプション物件例説明
--google-acceleratortype=nvidia-tesla-p4,count=1インスタンスにアタッチする GPU アクセラレータのタイプと数を指定します (type=TYPE,count=N 形式)。
--google-maintenance-policyTERMINATE Google Cloud では GPU インスタンスをライブマイグレーションできないため、常にTERMINATE を使用します。
--google-machine-imagehttps://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110GPU 対応オペレーティングシステムの URL。利用可能なイメージのリストを参照してください。
--google-metadatainstall-nvidia-driver=Trueこのフラグは、NVIDIA GPUドライバをインストールするようイメージに指示します。

これらの引数はgcloud compute](https://cloud.google.com/compute/docs/gpus/create-vm-with-gpus#gcloud_1)の[コマンドライン引数に対応します。詳細については、GPUをアタッチしたVMの作成に関するGoogleのドキュメントを参照してください。

Docker Machineオプションの検証

システムを準備し、Google Compute EngineでGPUを作成できることをテストします:

  1. Docker MachineのGoogle Compute Engineドライバの認証情報を設定します。VMにデフォルトのサービスアカウントがない場合、環境変数をRunnerにエクスポートする必要があるかもしれません。これをどのように行うかは、Runnerの起動方法によって異なります。例えば

  2. docker-machine が希望のオプションで仮想マシンを作成できることを確認します。例えば、NVIDIA Telsa P4アクセラレータを1つ搭載したn1-standard-1 マシンを作成するには、test-gpu を名前に置き換えて実行します:

    docker-machine create --driver google --google-project your-google-project \
      --google-disk-size 50 \
      --google-machine-type n1-standard-1 \
      --google-accelerator type=nvidia-tesla-p4,count=1 \
      --google-maintenance-policy TERMINATE \
      --google-machine-image https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110 \
      --google-metadata "install-nvidia-driver=True" test-gpu
    
  3. GPU がアクティブであることを確認するには、マシンに SSH してnvidia-smi を実行します:

    $ docker-machine ssh test-gpu sudo nvidia-smi
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 450.51.06    Driver Version: 450.51.06    CUDA Version: 11.0     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  Tesla P4            Off  | 00000000:00:04.0 Off |                    0 |
    | N/A   43C    P0    22W /  75W |      0MiB /  7611MiB |      3%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
       
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+
    
  4. このテストインスタンスを削除してコストを節約します:

    docker-machine rm test-gpu
    

GitLab Runner の設定

  1. これらのオプションを確認したら、runners.docker の設定でDocker Executorが利用可能な全てのGPUを使用するように設定します。次に、Docker MachineオプションをGitLab Runnerrunners.machine 設定](../configuration/advanced-configuration.md#the-runnersmachine-section)の[MachineOptions 設定に追加します。例えば

    [runners.docker]
      gpus = "all"
    [runners.machine]
      MachineOptions = [
        "google-project=your-google-project",
        "google-disk-size=50",
        "google-disk-type=pd-ssd",
        "google-machine-type=n1-standard-1",
        "google-accelerator=count=1,type=nvidia-tesla-p4",
        "google-maintenance-policy=TERMINATE",
        "google-machine-image=https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110",
        "google-metadata=install-nvidia-driver=True"
      ]