🦙

今更ながらローカルLLMをGPUで動かす【WSL2】

2024/02/26に公開

ゲーミングPCでLLM

DockerでOllamaとOpen WebUI を使って
ローカルでLLMを動かしてみました

環境

  • Windows11
    CPU Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
    RAM 32.0 GB
    GPU NVIDIA GeForce RTX 2060
    専用 GPU メモリ 6.0 GB
    共有 GPU メモリ 16 GB
  • WSL2
    Ubuntu 22.04.3 LTS

統合版マイクラのレイトレーシング最低要件のGPUです
WSL2にDockerをインストール済みです

https://zenn.dev/giana12th/articles/6cc6540e0dd306

メモリについて

パラメータ数の大きなモデルを動かすには、十分なメモリが必要になります
筆者の環境では、パラメータ数7B程度のモデルが利用できました

Note: You should have at least 8 GB of RAM available to run the 7B models, 16 GB to run the 13B models, and 32 GB to run the 33B models.

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

DockerでOllamaを起動する

OllamaはLLM(Large Language Model 大規模言語モデル)をローカルで簡単に動かせるツールです

https://ollama.com/

https://github.com/ollama/ollama

macとLinuxに対応、windowsは記事投稿時時点ではプレビュー版のみあります
今回はWSL上のDockerに構築します

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

を参考に、GPU対応のOllamaコンテナを起動します

WSL2のUbuntuにNVIDIA Container Toolkitをインストールします

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
    | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
    | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
    | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

Dockerで使えるように設定します

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

GPUを使用してコンテナを起動します

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Ollamaがデフォルトでサポートしているllama2というパラメータ数7Bのモデルをダウンロードして
CLIで推論してみます

docker exec -it ollama ollama run llama2

3.8GBあるのでダウンロードにしばらくかかります
入力欄が表示されたら適当にプロンプトを書きます

>>> why the sky is blue?
llama2の回答(長いので折り畳み)

The sky appears blue to our eyes because of a phenomenon called
Rayleigh scattering. This is the scattering of sunlight by small
particles in the Earth's atmosphere, such as nitrogen and oxygen
molecules, and small dust particles. These particles scatter shorter
(blue) wavelengths of light more than longer (red) wavelengths,
causing the sky to appear blue.

The reason for this scattering is that the wavelength of light is
related to its frequency, and smaller particles scatter light with
higher frequencies (bluer light) more than larger particles. This is
known as Rayleigh's Law, which states that the amount of scattering is
inversely proportional to the fourth power of the wavelength of light.

The blue color of the sky can also be affected by other factors, such
as the presence of water vapor and pollutants in the atmosphere. For
example, when there is more water vapor in the air, it can scatter
light in all directions, causing the sky to appear more hazy and less
blue. Similarly, pollutants like dust and smoke can also scatter
light, giving the sky a yellow or brown tint.

In addition to Rayleigh scattering, the blue color of the sky can also
be influenced by the way our brains process visual information. The
human eye is wired to perceive blue as a more vibrant and intense
color than red, which means that the blue light scattered by the
atmosphere appears brighter and more vivid to us than the red light.

Overall, the blue color of the sky is a result of a combination of
physical processes in the atmosphere and the way our brains interpret
visual information.

google翻訳

空はなぜ青いのですか?

私たちの目に空が青く見えるのは、「空が青く見える」という現象によるものです。
レイリー散乱。 これは小さなものによる太陽光の散乱です。
地球の大気中の窒素や酸素などの粒子
分子や小さな塵粒子。 これらの粒子はより短く散乱します
光の波長が長い(赤)より長い(青)、
空が青く見える原因となります。

この散乱の理由は、光の波長が
光はその周波数に関係しており、より小さい粒子は光を散乱します。
より高い周波数(より青い光)は、より大きな粒子よりも多くなります。 これは
レイリーの法則として知られる、散乱の量は次のとおりです。
光の波長の4乗に反比例します。

空の青色は、次のような他の要因にも影響されることがあります。
大気中の水蒸気や汚染物質の存在など。 のために
たとえば、空気中に水蒸気が多くなると、飛散する可能性があります。
あらゆる方向に光が当たると、空がより曇って見えにくくなります。
青。 同様に、粉塵や煙などの汚染物質も飛散する可能性があります。
明るく、空に黄色または茶色の色合いを与えます。

レイリー散乱に加えて、空の青色もまた、
私たちの脳が視覚情報を処理する方法に影響を受けます。 の
人間の目は、青をより鮮やかで強烈なものとして認識するようにできています。
赤よりも色が強いということは、青い光が散乱したことを意味します。
私たちには大気は赤色光よりも明るく鮮やかに見えます。

全体として、空の青い色は次の組み合わせの結果です。
大気中の物理的プロセスと脳の解釈方法
視覚的な情報。

すぐに応答が始まり
それっぽい感じの回答が得られました
知らんけど

また推論中はGPUのメモリを5GBほど使用していました

終了はbyeです

>>> /bye

GUIツールを使う

Ollama対応のChatGPT風画面のGUIツールがあるので使ってみます

https://github.com/open-webui/open-webui


Open WebUI

こちらもDockerで起動します
ローカルホストにOllamaが起動済みの場合
下記でコンテナを起動できます

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

windows側ブラウザでlocalhost:3000にアクセスすると
ログイン画面が表示されます
適当にアカウントを作ってログインします

モデルを選んで
チャット欄にプロンプトを書きます


why the sea is blue?

google翻訳

なぜ海は青いのですか?
プロフィール
Llama2:最新 25/02/2024 08:23
海は次のようなさまざまな理由で青く見えます。

太陽光の反射: レイリー散乱と呼ばれる現象により、海は太陽からの青色光を他の色よりも多く反射します。 これは、光の短い波長 (青や紫など) は全方向に散乱され、一方、長い波長 (赤やオレンジなど) は水に吸収され、海が青く見えることを意味します。

水の分子: 水の分子の構造も、海が青く見える理由に関与しています。 水の分子は独特の形状をしており、赤やオレンジなどの特定の波長の光を吸収し、青や紫の光を反射します。 これは、太陽光が海に入ると、青と紫の光が反射され、海が青い色になることを意味します。

粒子のサイズ: 水中の粒子のサイズも海の見え方に影響を与える可能性があります。 透明な水に含まれるような小さな粒子は、大きな粒子よりも光を散乱する傾向があり、海がより青く見えることがあります。

海の深さ: 海の深さは、海の青さの見え方にも影響します。 海の奥深くに進むと、光は水中をより長い距離を移動する必要があるため、光が散乱してより青く見えることがあります。

他の物質の存在: 藻類や堆積物など、海洋中の他の物質もその外観に影響を与える可能性があります。 たとえば、水中に藻類が多量に存在すると、海が緑がかった色合いになることがあります。

全体として、海の青色はこれらの要因の組み合わせの結果であり、海の特定の場所や条件によって異なります。

日本語対応モデルを使う

Ollamaに日本語対応のモデルをインストールして
GUIから推論を行ってみます

Ollamaのコンテナにアタッチします

docker exec -it ollama bash

Ollamaのデフォルトでサポートされているモデルには日本語対応ありませんので
ggufファイルからモデルを作成します

お好みの日本語対応モデルのggufファイルをダウンロードします
こちらのモデルを使用してみます

https://huggingface.co/TheBloke/Xwin-LM-13B-V0.1-GGUF

オススメの日本語対応モデルがあればコメントで教えてください

apt-get install wget

wget https://huggingface.co/TheBloke/Xwin-LM-13B-V0.1-GGUF/resolve/main/xwin-lm-13b-v0.1.Q2_K.gguf

Ollamaでモデルを読み込むために
Modelfileを作成します

echo "FROM ./xwin-lm-13b-v0.1.Q2_K.gguf" > Modelfile

モデルを作成します
xwinの部分は任意の名前を指定できます

ollama create xwin -f Modelfile

再びブラウザでlocalhost:3000にアクセスすると
追加したモデルが選択できるようになっています


日本で一番高い山は?

パラメータ数13Bと大きいせいか回答の生成がめちゃくちゃ重いです
山という概念についてフリースタイルで語ってくれました
知識はあるので、プロンプトの工夫が求められそうです

プロンプト工夫しました


日本で最も標高が高い山の名前は?

謎の山が生成されていますが、シンプルになりました
重いのでここまでです

ちなみにある日デスクトップの右下に現れたCopilotの回答は

copilot
ローカルではない

モデルとパラメータ数

今回使用したモデルのパラメータ数は下記の通りです

モデル パラメータ数
Llama 2 7B
xwin-lm-13b-v0.1.Q2_K.gguf 13B

Bはbillion、10億

https://github.com/ollama/ollama?tab=readme-ov-file#model-library
https://huggingface.co/TheBloke/Xwin-LM-13B-V0.1-GGUF

ChatGPT3が175B
GPT4が1兆超えと言われているので
格が違います

ChatGPTはローカルで動きませんね

Discussion