🦙

Google Compute Engine with GPU で LLM を動かしてみる

2024/05/02に公開

はじめに

こんにちは、クラウドエース SRE 部の kazz です。
最近、ローカル LLM がホットなトピックになってます。昨今の LLM の盛り上がりを見ると、LLM 関連の技術はとりあえず触っておきたいものです。
しかし、動かすためにハイスペックな環境を求められるということで、なかなか手が出せないという方も多いのではないでしょうか?
そこで、今回は Google Compute Engine (GCE) に Ollama と Open WebUI をインストールして、クラウド環境でセルフホストの LLM を動かしてみようと思います。

対象読者

  • GPU でローカル LLM を触ってみたいけど環境を用意できない人
  • ローカル LLM ? なにそれおいしいの?って人

前提知識

ローカル LLM とは

ローカル LLM とは、Gemma などの一般に公開されている LLM モデルをダウンロードし、自分の環境で動かす技術のことです。
ローカル LLM によって、外部アプリに入力内容を渡さずに処理する、APIの仕様変更を気にせずに利用する、といったことが実現できます。

本記事では、クラウド上のマシン (GCE) に LLM を載せて、ローカル LLM を実現します。

Ollama とは

Ollama は、Gemma などの一般に公開されている LLM モデルを自分の環境で動かすことができるツールです。
https://ollama.com/

Open WebUI とは

Open WebUI は、Ollama などの LLM ツールをサポートしている、ChatGPT のようなセルフホスト型 Web UI アプリです。
https://docs.openwebui.com/

手順

プロジェクトを作成

まず、Google Cloud のプロジェクトを作成します。
https://console.cloud.google.com
既存のプロジェクトを使用する場合は、そのまま進めてください。
プロジェクトが作成できたら、Compute Engine API を有効化しておきましょう。
https://console.cloud.google.com/marketplace/product/google/compute.googleapis.com

GPU の使用制限を解除する

Google Cloud のプロジェクトは、デフォルトで GPU リソースの使用が制限されています。
GPU を使用するためには、リソース制限の解除を Google Cloud に申請する必要があります。
既に GPU を使用できる状態の場合は、この手順は不要です。

https://console.cloud.google.com/iam-admin/quotas?limit=GPUS-ALL-REGIONS-per-project

Compute Engine API の GPUs (all regions) にチェックを入れ、割り当てを編集をクリックします。

新しい値に 1 を入力し、必要な情報を入力してリクエストを送信します。

数分待つと、リクエストが承認されたというメールが届き、値が 1 に変更されます。

GCEのインスタンスを作成

GPU が使用できる状態になったら、GCE のインスタンスを作成していきます。
https://console.cloud.google.com/compute/instances
GPU のタイプは NVIDIA Tesla T4、マシンタイプは n1-standard-4 で作成します。
画像の通り、ずっと起動していると費用がとてもかかるので、使い終わったら停止、削除を忘れずにしましょう。

ブートディスクは Ubuntu を選択し、LLM を保存するためにディスクサイズを増やしておきましょう。

GPU 付きのインスタンスを作成すると、以下のようなメッセージが表示されることがあります。

指定したリージョンでは、リソースの在庫がないとのことなので、 別のリージョンで作成するか時間をおいて再度試してください。
筆者も何度か試して、作成できました。

Docker をインストール

作成したインスタンスに SSH で接続し、以下のコマンドを実行して Docker をインストールします。

sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y

Ollama をインストール

続いて、Ollama をインストールしていきます。
https://ollama.com/download/linux
公式のドキュメントの通りにコマンドを打ってインストールします。

curl -fsSL https://ollama.com/install.sh | sh

インストールが完了したら、正常にインストールされているか確認します。

ollama -v

Open WebUI のコンテナを起動

Ollama がインストールできたら、Open WebUI のコンテナを起動していきます。
コンテナが Ollama サーバーにアクセスできるように、--network=host フラグを使用して起動します。

sudo docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main

正常に起動できたら以下のように表示されます。

ファイアウォールの設定

Open Web UI にアクセスするために、ファイアウォールの設定を行います。
https://console.cloud.google.com/net-security/firewall-manager/firewall-policies/add
default のネットワークを選択し、0.0.0.0/0 からの tcp:8080 を許可するファイアウォール ルールを追加します。
今回はテスト用なので、全ての IP アドレスを許可していますが、運用に応じて適切な設定を行ってください。

触ってみる

http://{external_ip}:8080 にアクセスすると、Open WebUI が表示されます。
{external_ip} は、作成したインスタンスの外部 IP アドレスに置き換えてください。コンソールから確認できます。

画面に従ってアカウントを作成し、ログインします。

ログインできたら、モデルをダウンロードしていきます。
右上の歯車をクリックし、Models を選択します。
ここで、ダウンロードしたいモデルを入力し、ダウンロードボタンをクリックします。
今回は、Google が公開している LLM モデルの Gemma を使うので、gemma:7bと入力します。

ダウンロードが完了したら、左上の Select a model からダウンロードしたモデルを選択します。
これで、LLM を使う準備が整いました。
実際に Gemma とチャットしてみると、こんな感じです。

GPU を使用しているので、快適にチャットができると思います。
自分の環境で動かしていると考えると、それなりに高い精度で推論できていると感じられます。

後片付け

使い終わったら、GCE のインスタンスを停止、削除しましょう。

まとめ

本記事では、GCE に Ollama と Open WebUI をインストールして、LLM を触ってみる方法を紹介しました。
ローカル LLM でゴリゴリ開発していきたいという人は、自分でマシンを用意する方がいいですが、 軽く触ってみたいって人は、このようにクラウド上で簡単に試すことができていいんじゃないでしょうか。

Discussion