清水理史の「イニシャルB」

初めてでもできる! 自宅PCのGPUを「Google Colab」から使い、生成AIをカンタンに動かす方法

ローカルランタイムを利用することで、Google ColabからPCのGPUなどを利用可能

 大規模言語モデル(LLM)に画像生成、ボイスクローニング、そしてこれらを組み合わせたマルチモーダルと、いろいろな生成系AIを家庭用PCのGPUでも試せる時代が到来した。ただし、簡単に使えるといっても、実行環境を用意しなければならず、この点が入門者にとっての高いハードルとなっている。

 今回は、そうした状況を乗り越える1つの手段として、Google Colab(Google Colaboratory:Googleが提供するクラウドのPython実行環境)から接続可能な「ローカルランタイム」環境を、なるべく手間なく作る方法を紹介する。

複雑なモデルをどう試すか?

 筆者は、これまでローカルでLLMなどを試す際、WindowsにPythonをインストールして、Visual Studio Code(以下VSCode)でサンプルコードを実行するという方法を利用してきた。

 もちろん、画像生成AI向けの「stable-diffusion-webui」やLLMで定番の「text-generation-webui」のような実行環境が使える場合は、これらを利用してきたが、こうしたGUIの実行環境が使えないケースも珍しくなくなってきた。

 たとえば、以下のような多彩な機能を持つモデルは、汎用的なGUI環境では動かないため、直接コードを実行して試す必要があった。

rinna画像テキストマルチモーダルモデル
画像に写っているものをテキストで回答するマルチモーダルモデル。

3秒の録音音声だけで利用できるボイスクローニングモデル
3秒ほどの音声を入力するだけでクローンして自由にしゃべらせることができるボイスクローニングモデル。Hugging FaceのSpaceでデモも利用可能。

テキストと音声の組み合わせが可能な翻訳モデル
声から声、声からテキスト、テキストからから声、入力と出力で声とテキストを自由に組み合わせられる翻訳モデル。デモページも用意されている。

 しばらくは、Windows環境ではうまく動かなかったり、必要なモジュールのバージョンが合わなかったりと、試行錯誤しながら試していたのだが、エラーと格闘する時間の方が長くなってきたので、さすがに「もう限界」となってしまった。

やはりGoogle Colabが楽

 そこで、新たな実行環境として移行を決意したのが、今回紹介するGoogle Colabだ。

 「何をいまさら」と言われてしまいそうだが、もちろんそのまま利用するのではなく、PCのGPUを利用するためにローカルランタイムを用意して、そこに接続して利用する方法となる。

Pythonのコードを記述し、実行できるGoogle Colab

 無料版でも、ほとんどの場合はGPUにT4(VRAM 16GB)が割り当てられるので、小規模なモデルであれば、そのままクラウドで試すことができる。ただし、無料版では、起動から12時間で環境がリセットされるなどの制限があり、「ちょっと試す」程度であれば問題ないが、数日かけて機能を検証したい場合には面倒だった。

 一方、ローカルランタイムを用意すれば、こうした制限がなくなり、24GBのVRAMを搭載した家庭用GPUなどを使って、時間をかけて、いろいろな大規模なモデルを検証できる。

ホストされている環境でも、無料版でTesla T4(16GB)を利用できるが、12時間でリセットされてしまうのが課題

Windows環境でローカルランタイムを利用する

 それでは、早速、ローカルランタイムを準備していこう。方法はいろいろあるが、今回はWindowsユーザー向けに、なるべく簡単にできる方法を紹介する。

STEP 1:WSLをインストールする

 実行環境として、Windows上で動作するLinux環境「WSL」を利用する。ターミナルから以下のコマンドを実行するだけで簡単にインストールできる。

wsl --install
WSLをインストールする

STEP 2:Docker Desktopをインストールする

 続いてDockerをインストールする。こちらも公式サイトからインストーラーをダウンロードしてインストールするだけと簡単だ。インストール時に実行環境として標準で「WSL」が選択されるので、そのままインストールすれば利用できる。

 なお、デスクトップ版のDockerは、Windows上でアプリを起動した状態で利用する(起動しないとエンジンが起動しない)。利用する際に、アプリを起動することを忘れずに。

Dockerをインストールする

STEP 3:フォルダーを準備する

 エクスプローラーを使って、Google Colabのローカルランタイム用のフォルダーを任意のドライブに作成する(今回は「colab-runtime」という名前で作成)。

 詳しくは後述するが、このフォルダーの配下に「content」と「cache」という2つのフォルダーが自動的に作成され、そこにGoogle Colabのデータを保存(永続化)する。「content」はモデルのプログラムの保存先、「cache」はPythonのモジュールやLLMのモデルファイルのキャッシュ先となる。

 モデルによっては数GBのファイルを複数ダウンロードするので、空き容量に余裕のあるドライブにフォルダーを準備する必要がある。

ランタイム環境を保存するためのフォルダーを作成

STEP3:docker-compose.ymlを準備する

 作成したフォルダーに、「docker-compose.yml」という名前で以下の内容のファイルを作成する。メモ帳などを使って、普通にWindowsから作成すればいい。

 変更すべき点は、1カ所、Google Colabから接続するときに指定するトークンだ。「JUPYTER_TOKEN=123123123」の行の「123123123」の部分を、好きなトークンに変えておく。

version: "3"

services:
  colab:
    image: asia-docker.pkg.dev/colab-images/public/runtime

    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

    ports:
      - "127.0.0.1:9000:8080"
      - "0.0.0.0:7860:7860"

    environment:
      - JUPYTER_TOKEN=123123123

    volumes:
      - ./content:/content
      - ./cache:/root/.cache

 簡単に説明しておくと、以下の図のようになる。「ports」の部分は、実行するコードに合わせて変更しなければならないケースもある。

docker-compose.ymlでの設定内容

STEP 4:起動する

 最後に作成したファイルを「docker-compose」コマンドで起動する。これは、初回に一度だけ、ターミナルからコマンドを使って実行する必要がある。

 エクスプローラーから、作成したフォルダー(今回は「colab-runtime」)を開いた状態で、何もない部分を右クリックして「ターミナルを起動」を選択する。

 作成したフォルダーに移動した状態で、ターミナルが起動するので、以下のコマンドを実行する。

docker-compose up -d

 自動的にGoogle Colabのローカルランタイム用のイメージがダウンロードされ、ランタイム環境が起動する。トータル25GB前後あるので、初回はかなり待ち時間が必要で、空き容量にも注意する必要があるのが注意点となる。

初回のみコマンドで起動する

STEP 5:Google Colabから接続する

 起動したら、後はGoogle Colabから接続するだけだ。右上の「接続」ボタンをクリックし、「ローカルランタイムに接続」を選択する。

 表示された接続画面で、以下のように指定すれば、PC上のDockerコンテナとして起動しているローカルランタイムに接続できる。もちろん、「token=」以降の「123123123」の部分は、docker-compose.ymlファイルに指定した内容に合わせて変更する必要がある。

http://localhost:9000/?token=123123123
Google ColabからURLを指定して接続する

 以上の方法で、Colab上に記述したコードを手元のPCで実行できるようになる。

 試しに、Google Colabで、「nvidia-smi」を実行すれば、ローカルのGPUの情報が表示されるはずだ。

ローカルのGPUの状態が表示される。なお、コマンド実行時は先頭に「!」を付ける

 なお、次回からコンテナの起動や停止はDocker Desktopから管理できる。Windows起動後、Docker Desktopを起動し(Dockerエンジンが自動的に起動)、コンテナを選択して起動することでローカルランタイムが起動するという流れになる。

 もちろん、コンテナを停止しても、永続化したフォルダー(docker-compose.ymlが保存されたフォルダー)を削除しない限り、データも維持される。

次回からはDocker Desktopから起動や停止を管理できる

誰でも同じ環境で動くのがいい

 以上、さまざまなAIを試すためのGoogle Colab用ローカルランタイム環境の作り方を紹介した。

 この方法のメリットは、誰もが同じ環境を前提とできる点だ。前述したモデルの中にも、「Open in Colab」ボタンが用意されているケースもあるが、モデルを動かすためのGUI環境なども含め、Google Colabにコピーし、同じ環境で実行することができる。

 ライブラリのバージョン違いなどに悩まされることなく、さくっと動かすことができるのは楽だ。

 なお、今回のコンテナでは、実行するコードが起動するGUI用にポート7000を開ける設定にしてある。ほとんどのコードは、gradioというPythonのライブラリを使ってGUIを生成する。大抵は、コード末尾に以下のように記載されており、標準設定のままGUIを起動する設定となっている。

app.launch()

 コンテナ内で起動する場合、そのままではGUIにアクセスできないので、アプリ側のPythonコードを以下のように変更する必要がある。

app.launch(server_name="0.0.0.0")

※外部アクセスが必要な場合は以下

app.launch(server_name="0.0.0.0", share=True)

 これで、「http://loclahost:7860」でgradioのGUIにアクセスできる。画面上に表示されるリンクはhttpsになる場合があるので、必ず手動で「http://loclahost:7860」や「http://127.0.0.1:7860」とアクセスするのがポイントだ。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できるWindows 11」ほか多数の著書がある。