🦙

WSL2とDockerでWindows上にOllamaを構築する

2024/04/11に公開

はじめに

近年、自然言語処理や機械学習の分野で大規模言語モデル(Large Language Model, LLM)が注目を集めています。LLMは膨大なテキストデータを学習することで、人間のような自然な文章生成や高度な言語理解を可能にします。しかし、LLMを自分のPCで動かすのは、環境構築の複雑さやハードウェア要件の高さから、初心者にとってハードルが高いのが実情でした。

Ollamaの概要と特徴

そんな中、オープンソースのLLMプラットフォーム「Ollama」が登場しました。Ollamaは、GPTシリーズなどの最先端LLMを誰でも手軽に利用できることを目指しています。WindowsやmacOS、Linuxに対応しており、シンプルなコマンドラインインターフェースとわかりやすいWebUIを備えているのが特徴です。

ただ、Windows環境では従来Ollamaの構築に手間取ることがありました。そこで本記事では、Windows Subsystem for Linux 2(WSL2)とDockerを活用する方法を紹介します。

※公式サイトで、Windows (preview)インストーラがダウンロードできますが、4/10時点で私のPCではインストール後に起動ができない症状がありました。
https://ollama.com/

WSL2とDockerを使うメリット

WSL2は、Windows上でネイティブにLinuxを動作させる仮想化技術です。Linuxのコマンドやツールがそのまま使えるため、Ollamaの実行環境を簡単に整えられます。さらにDockerを組み合わせることで、GPUの活用もスムーズです。

Dockerは、アプリケーションを配布・実行するためのオープンソースプラットフォームです。Linuxカーネルの機能を利用して、アプリケーションを「コンテナ」と呼ばれる独立した環境で動作させます。Ollamaの実行に必要なパッケージやライブラリがすべてコンテナにまとめられているため、環境構築の手間が大幅に削減できるのです。

WSL2とDockerを使えば、WindowsユーザーでもOllamaを気軽に試せます。しかも、Dockerイメージを入れ替えるだけで様々なモデルが利用可能。自然言語処理の実験や学習に最適な環境が、お手元のPCで実現するのです。

本記事を読み進めることで、WSL2とDockerを使ったOllamaのセットアップ方法が理解できるはずです。それでは、早速見ていきましょう。

前提条件

Ollamaを動かすためには、いくつかの準備が必要です。ここではWSL2、Docker、NVIDIA Container Toolkitのインストールと設定方法を簡単に説明します。

WSL2のインストールと設定

  1. Windowsの設定から「Windows Subsystem for Linux」を有効化します。
  2. Microsoft StoreからUbuntuなどのLinuxディストリビューションをインストールします。
  3. インストールしたLinuxディストリビューションを起動し、初期設定を行います。

Dockerのインストールと設定

  1. Docker Desktop for Windowsをダウンロードしてインストールします。
  2. Docker Desktopを起動し、設定からWSL2との統合を有効化します。
  3. WSL2上のLinuxディストリビューションからDockerが利用できることを確認します。

GPUを使う場合のNVIDIA Container Toolkitの設定

CPUのみ使用する場合は、省略できます。

  1. NVIDIA GPUドライバーが最新バージョンであることを確認します。
  2. NVIDIA Container Toolkitをダウンロードしてインストールします。
  3. WSL2上のLinuxディストリビューションからNVIDIA GPUが認識されていることを確認します。

Ollamaのインストール手順

  1. Dockerイメージのpull
    まず、Ollamaの公式Dockerイメージを取得します。WSL2のUbuntuを起動し、以下のコマンドを実行してください。

https://hub.docker.com/r/ollama/ollama

docker pull ollama/ollama

このコマンドは、DockerHub上にあるollama/ollamaイメージの最新版をダウンロードします。イメージには、Ollamaを動かすために必要なファイルがすべて含まれています。

  1. Dockerコンテナの起動

次に、ダウンロードしたイメージからDockerコンテナを起動します。

CPUのみの場合
GPUを使わない場合は、以下のコマンドを実行します。

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
  • -d: コンテナをバックグラウンドで実行します。
  • -v ollama:/root/.ollama: ホストマシンのollamaフォルダをコンテナ内の/root/.ollamaにマウントします。
  • -p 11434:11434: ホストマシンのポート11434をコンテナのポート11434に転送します。
  • --name ollama: コンテナにollamaという名前を付けます。

GPUを使う場合
NVIDIA GPUを使う場合は、以下のコマンドを実行します。
NVIDEA Geforce GTX 1070(8GB)でも動作しました。

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
  • --gpus=all: コンテナにすべてのGPUデバイスを割り当てます。

以上で、OllamaのDockerコンテナが起動します。

モデルの実行

Dockerコンテナが起動したら、docker execコマンドを使ってモデルを実行できます。

docker exec -it ollama ollama run <model_name>
  • -it: インタラクティブモードでコンテナを実行します。
  • ollama: コンテナ名を指定します。
  • ollama run <model_name>: ollama runコマンドでモデルを実行します。<model_name>には実行したいモデルの名前を入れます。

モデルの初回実行時は、モデルファイルのダウンロードが行われます。ダウンロードが完了すると、モデルが起動します。

たとえば、llama2モデルを実行するには、以下のコマンドを入力します。

docker exec -it ollama ollama run llama2

Command Rモデルを実行する場合は、以下のコマンドを入力します。

docker exec -it ollama ollama run command-r

対応モデルは以下のURLから確認できます。

https://ollama.com/library

モデルの導入が完了すると、コマンドライン上に以下のような表示がされます。メッセージを送るとモデルとの対話ができます。

>>> Send a message (/? for help)

llama2 で試してみました。

>>>Tell me the most famaous Japanese manga by Japanese.
「最も有名な日本の漫画は、日本人によってillustratedされたものです。一つ目が
PIECE」です!空海漫画家の作品で、世界中で大人気を博しています。」

私の拙い英語を理解して、なんとか日本語で説明してくれました。

メッセージに、/?を入力してEnterを押すと、利用可能なコマンドが表示されます。
会話したい場合は、/byeを入力します。

>>> /?
Available Commands:
  /set            Set session variables
  /show           Show model information
  /load <model>   Load a session or model
  /save <model>   Save your current session
  /bye            Exit
  /?, /help       Help for a command
  /? shortcuts    Help for keyboard shortcuts
Use """ to begin a multi-line message.

(参考)
Webインターフェースへのアクセス方法

モデルの実行が開始されると、ブラウザからOllamaのWebインターフェースにアクセスできるようですが、私の環境ではコマンドライン上でしかやり取りできませんでした。以下は参考です。

  1. ブラウザを開きます。
  2. アドレスバーにhttp://localhost:11434と入力します。
  3. Enterキーを押すと、OllamaのWebインターフェースが表示されます。

モデルの切り替えと追加

現在実行中のモデルを停止し、別のモデルに切り替えるには、以下のコマンドを実行します。

docker exec -it ollama ollama run <new_model_name>

<new_model_name>には、切り替え先のモデル名を指定します。例えば、llama2からgemmaに切り替えるには、以下のようにします。

docker exec -it ollama ollama run gemma

利用可能なモデルの確認方法

このコマンドを実行すると、Ollamaに導入したモデルの一覧が表示されます。
Ollamaで利用可能なモデルは、以下のコマンドで確認できます。

docker exec -it ollama ollama list

まとめ

本記事では、WSL2とDockerを使ってWindows上でOllamaを動かす方法を紹介しました。

Ollamaは、最先端の言語モデルを手軽に利用できるプラットフォームです。WSL2とDockerを活用することで、Windows環境でも簡単にOllamaを構築できます。

GPUを搭載したマシンでは、--gpus=allオプションを付けてDockerコンテナを起動することで、GPUを活用できます。これにより、モデルの実行が高速化され、より快適な環境が整います。

また、Ollamaでは様々なモデルが利用可能です。docker execコマンドを使えば、簡単にモデルを切り替えられます。それぞれのモデルには個性があり、用途に応じて使い分けることで、自然言語処理の可能性が広がります。

ぜひ、WSL2とDockerを使ってOllamaを構築し、大規模言語モデルの世界を体験してみてください。

https://github.com/ollama/ollama?tab=readme-ov-file

Discussion