Ansible PlaybookでCUDA環境を自動構築

# はじめに
生成AIの基盤モデルを作る[Sakana AI](https://sakana.ai/careers/)がWBSに取り上げられました。

映像の中では、エンジニアが仕事中の様子を後ろから撮影しており、エディタのウインドウが映っていました。

このウインドウには、AWSのAnsibleという自動化ツールを使用してCUDA関連のパッケージをインストールするためのプレイブック(playbook)が表示されていました。

映像がこちらです。

https://www.youtube.com/watch?v=IRiWE00SbNk

# Ansibleとは
[Ansible](https://www.ansible.com/)は、ITの自動化を実現するためのツールです。簡潔な記述でサーバーやクラウド環境の設定、アプリケーションのデプロイ、IT環境全体のオーケストレーションを行うことができます。Ansibleの利点は、そのエージェントレスなアーキテクチャと、YAMLを用いた分かりやすい設定ファイルです。これにより、運用の自動化が容易になり、作業の効率化とミスの削減が図れます。

# CUDAとは
[CUDA](https://developer.nvidia.com/cuda-toolkit)は、NVIDIAが開発した並列計算アーキテクチャです。GPU（Graphics Processing Unit）を利用して、膨大な計算処理を高速に行うことができます。主に科学技術計算、機械学習、データ解析などの分野で利用され、CPUだけでは実現できないパフォーマンスを提供します。CUDAを使うことで、アプリケーションの計算能力を大幅に向上させることが可能です。

# playbookとは
Ansibleにおける[Playbook](https://www.redhat.com/ja/topics/automation/what-is-an-ansible-playbook)は、ITタスクの自動化を定義するためのファイルです。Playbookは、YAML形式で記述され、設定内容や実行するタスクを明確に示します。複数のタスクをまとめて実行することで、サーバーの設定やソフトウェアのインストールを自動化します。Playbookを使うことで、複雑な作業を効率的かつ一貫性をもって実行できるようになります。

# サンプルコード
```yml
---
- name: Install CUDA packages  # CUDAパッケージをインストール
  hosts: all  # 全てのホストに対して適用
  become: yes  # 管理者権限で実行
  tasks:
    - name: Download CUDA keyring package  # CUDA keyringパッケージをダウンロード
      get_url:
        url: https://developer.download.nvidia.com/compute/cuda/repos/$(. /etc/os-release; echo $ID$(echo $VERSION_ID | cut -d. -f1))/x86_64/cuda-keyring_1.0-1_all.deb
        dest: /tmp/cuda-keyring_1.0-1_all.deb  # ダウンロード先のパス

    - name: Install CUDA keyring package  # CUDA keyringパッケージをインストール
      apt:
        deb: /tmp/cuda-keyring_1.0-1_all.deb  # インストールするdebパッケージのパス
        update_cache: yes  # パッケージキャッシュを更新

    - name: Install required packages  # 必要なパッケージをインストール
      apt:
        name:
          - cuda  # CUDAパッケージ
          - libcudnn8  # CUDA用のcuDNNライブラリ
          - libcudnn8-dev  # cuDNN開発用パッケージ
        state: present  # パッケージをインストール（最新の状態にする）
        update_cache: yes  # パッケージキャッシュを更新

    - name: Create script to add CUDA bin directory to PATH  # CUDAのbinディレクトリをPATHに追加するスクリプトを作成
      copy:
        dest: /etc/profile.d/cuda.sh  # スクリプトの保存先
        content: |
          export PATH=/usr/local/cuda/bin:$PATH  # CUDAのbinディレクトリをPATHに追加

    - name: Source the CUDA script  # 作成したスクリプトを実行してPATHに反映
      shell: source /etc/profile.d/cuda.sh
      args:
        executable: /bin/bash  # Bashシェルを使用してスクリプトを実行
```
**説明**
1. Install CUDA packages: CUDAパッケージをインストールするためのプレイブックです
2. hosts: all: 全ての対象ホストに対してプレイブックを適用します
3. become: yes: 管理者権限（root）でタスクを実行します

**タスクの詳細**
+ **Download CUDA keyring package**: CUDA keyringパッケージを指定のURLからダウンロードし、/tmpディレクトリに保存します
+ **Install CUDA keyring package**: ダウンロードしたCUDA keyringパッケージをインストールします
+ **Install required packages**: CUDA、cuDNN、およびその開発パッケージをインストールします
+ **Create script to add CUDA bin directory to PATH**: CUDAのbinディレクトリをPATHに追加するためのスクリプトを作成し、/etc/profile.dに保存します
+ **Source the CUDA script**: 作成したスクリプトを即時に反映させるために実行します

このプレイブックを実行することで、システムにCUDA環境を効率的にセットアップすることができます。

# おわりに
Ansibleを使用することで、効率的にシステムを構築し、管理することが可能です。

CUDAを利用した高度な計算処理が求められる現代において、このようなプレイブックは非常に有用です。


# Sakana AI社について
Sakana AIは、生成AIの基盤モデルを提供する企業です。
複数のAIモデルをミックスして新しいAIモデルを生成しています。

大規模言語モデルを作るにはGAFAMのような大企業が有利ですが、
Sakana AIは小規模なAIを組み合わせて高度なモデルを作成しています。

社名の"Sakana"は「魚が群れる」という意味があるとかないとか

[財務情報-バフェットコード](https://www.buffett-code.com/company/59prrbzvwe)

# 備考
+ [Sakana AI社のオウンドメディア](https://sakana.ai/llm-squared/)
+ [Amazon EC2 Image Builder パイプラインで Ansible プレイブックを実行する](https://aws.amazon.com/jp/blogs/compute/executing-ansible-playbooks-in-your-amazon-ec2-image-builder-pipeline/)