[Python] ローカルLLMをできるだけシンプルに使ってみる

Python

本記事では、できるだけシンプルにローカルLLMを使えるようにすること、PythonでローカルLLMを使えるようにするところまでをまとめています。
実際に自分のPCでも無料でローカルLLMを使えるようになります。
思ったよりも無料で使えるLLMが多いので、色々比較してみるのも面白そうです。

ローカルLLMって何?

ローカルLLM(Large Language Model)とは、ChatGPTのような大規模言語モデル(LLM)をクラウドではなく、自分のPCやサーバーなどローカル環境で動作させるものを指します。
クラウド上で動作するChatGPTなどと異なり、ローカルLLMはインターネットに接続せずに使えるのが特徴です。

ローカルLLMの主な特徴はこちらです。

  • セキュリティ重視:外部にデータを送信しないため、機密情報の取り扱いに安心。
  • オフライン利用可能:インターネット接続が不要。閉じた環境でも使うことができる。
  • カスタマイズ性が高い:特定業務用にチューニングしたモデルを利用することができる。
  • 高スペックPCが必要:多くの場合GPU搭載の高性能マシンが求められる。とはいえ、自分のPCでも使うことはできます。
  • 初期導入がやや難しい:モデルのダウンロード、環境構築、動作確認などの手順が必要。

Ollama:LLMを使うためのツール

LLMを使うためのツールとして本記事ではOllamaを使います。
Ollamaを通じて、様々なLLMを利用することができるようになります。

Ollama
Get up and running with large language models.

Ollamaをインストール

Ollamaのトップページから「Download」を選択します。

OSを選択する画面に移りますので、インストールしたいOSのソフトウェアをダウンロードします。

「OllamaSetup.exe」というファイル名で保存されます。
ダウンロードした「OllamaSetup.exe」ファイルをダブルクリックで実行するとインストーラが起動しますので、「Install」をクリックします。

インストールは以上です。
インストール後、Windowsのメニューに「Ollama」が登録されていると思います。

LLM(gemma3)を使えるようにする

Ollamaのインストールは完了しましたが、この状態では利用できるLLMが存在しません。
このため、利用したいLLMをダウンロードして使えるようにする必要があります。

まずはWindows PowerShellを起動して確認してみます。
「ファイル名を指定して実行」(Win+R)で「powershell」と入力して「OK」を選択すると、Windows PowerShellを起動することができます。

ollama --version」でOllamaが利用できることの確認と、「ollama list」で利用できるLLMの一覧を表示することができます。この状態は利用可能なLLMが存在しないことを示しています。

PS C:\Users\XXXXXXX> ollama --version
ollama version is 0.6.5
PS C:\Users\XXXXXXXX> ollama list
NAME    ID    SIZE    MODIFIED
PS C:\Users\XXXXXXXX>

本記事では、Googleが2025年3月12日に発表した最新のオープンAIモデルである「gemma3」を利用してみたいと思います。
利用の仕方も非常に簡単で、「ollama run gemma3」と実行するだけで、gemma3をダウンロードして、実際に使えるところまで進めてくれます。

gemma3の容量は3.3GB程度ありますので、ダウンロードに多少時間が掛かります。

PS C:\Users\XXXXXXXX> ollama run gemma3
pulling manifest
pulling aeda25e63ebd... 100% ▕████████████████████████████████████████████████████▏ 3.3 GB
pulling e0a42594d802... 100% ▕████████████████████████████████████████████████████▏  358 B
pulling dd084c7d92a3... 100% ▕████████████████████████████████████████████████████▏ 8.4 KB
pulling 3116c5225075... 100% ▕████████████████████████████████████████████████████▏   77 B
pulling b6ae5839783f... 100% ▕████████████████████████████████████████████████████▏  489 B
verifying sha256 digest
writing manifest
success
>>> Send a message (/? for help)

実際に問い合わせてみると応答してくれます。

>>> こんばんは!
こんばんは!何かお手伝いできることはありますか?😊

>>> 4月22日は何の日ですか?
4月22日は**地球の日**です。

地球環境の保護を啓発し、国際的な環境保護運動への協力を呼びかける日として、1977年から世界中で様々なイベントが開催
されています。

何か地球の日に関する情報について知りたいことはありますか?

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

終了する場合は「/bye」を入力するか、Ctrl-Dを入力します。

Ollamaコマンドオプション

再度「ollama list」を再度実行してみると、gemma3モデルが追加されていることが分かります。
NAME列がモデル名で、Pythonから利用する場合にモデル名を指定する必要がありますので、この場合は「gemma3:latest」を指定することになります。

PS C:\Users\XXXXXX> ollama list
NAME             ID              SIZE      MODIFIED
gemma3:latest    a2af6cc3eb7f    3.3 GB    4 minutes ago
PS C:\Users\XXXXXX>

その他のオプションは「ollama --help」を実行することで確認できます。

PS C:\Users\XXXXXX> ollama --help
Large language model runner

Usage:
  ollama [flags]
  ollama [command]

Available Commands:
  serve       Start ollama
  create      Create a model from a Modelfile
  show        Show information for a model
  run         Run a model
  stop        Stop a running model
  pull        Pull a model from a registry
  push        Push a model to a registry
  list        List models
  ps          List running models
  cp          Copy a model
  rm          Remove a model
  help        Help about any command

Flags:
  -h, --help      help for ollama
  -v, --version   Show version information

Use "ollama [command] --help" for more information about a command.

PythonでローカルLLMを使ってみる

ollamaパッケージが存在しますので、簡単にローカルLLMを利用することができます。

ollamaパッケージをインストール

pip install ollama」コマンドでollamaパッケージをインストールします。
Pythonバージョンは3.13.0で試しています。

PS C:\Users\XXXXXXXX> pip install ollama
Collecting ollama
  Downloading ollama-0.4.8-py3-none-any.whl.metadata (4.7 kB)
  :
Downloading ollama-0.4.8-py3-none-any.whl (13 kB)
Installing collected packages: ollama
Successfully installed ollama-0.4.8

スクリプトを作成する

サンプルとして実行するために「localllm.py」に以下のコードを保存します。
コードとしてはこれだけです。

from ollama import chat
from ollama import ChatResponse

response: ChatResponse = chat(model='gemma3:latest', messages=[
  {
    'role': 'user',
    'content': 'なぜ空は青いの?',
  },
])
print(response['message']['content'])

スクリプトを実行する

python localllm.py」を実行すると結果が返ってくると思います。
実行するPCのスペックによって結果が返ってくるまでの時間が変わりますが、私が使っている貧弱なPCで2-3分くらい掛かって結果が返ってきます。
その間CPUもほぼ100%に張り付いてしまいますので、かなり負荷は掛かっています。

PS C:\Users\XXXXXXX> python localllm.py
空が青く見える理由は、光の散乱現象、特に「レイリー散乱」と呼ばれる現象が関係しています。

以下に詳しく説明します。

1. **太陽光の構成:** 太陽から届く光は、実際には様々な色の光が混ざり合っています。虹の色(赤、橙、黄、緑、青、藍、紫)を思い浮かべてみてください。

2. **大気と分子:** 地球の周りには、窒素や酸素などの気体分子がたくさん存在しています。

3. **レイリー散乱:** 太陽光が地球の大気中のこれらの分子にぶつかる際に、光が四方八方に散らばります。この散乱の度合いは、光の波長によって異なります。
   * 波長の短い光(青や紫)は、波長の長い光(赤やオレンジ)よりも強く散乱されます。これは、光の波長が分子の大きさとほぼ同じくらいだからです。

4. **青い光が目に届きやすい:** 太陽光に含まれる青い光は、他の色の光よりも強く散乱されます。散乱された青い光が空全体に広がっていくため、空を見上げると私たちの目に青い光が多く届き、空が青く見えるのです。

**なぜ紫ではなく青なのか?**

紫色の光も青色の光と同様に散乱されやすいですが、以下の理由から空は青く見えることがあります。
*   太陽から届く光に含まれる紫色の光の量は、青色の光に比べて少なめです。
*   人間の目は、紫色の光に比べて青色の光に敏感です。

**夕焼けが赤い理由:**

夕焼けのときは、太陽光が地球の大気中を通過する距離が長くなります。その間に、青い光は散乱されてしまい、波長の長い光(赤やオレンジ)が私たちの目に届きやすくなります。

より詳しく知りたい場合は、以下のキーワードで検索してみてください。

*   レイリー散乱
*   光の散乱
*   大気光学

これらの情報が、空が青く見える理由を理解するのに役立つことを願っています。

まとめ

本記事では、ローカルLLMを使えるようにすること、PythonでローカルLLMを使えるようにするところまでをまとめてみました。
インターネット環境を前提としたChatGPTなどが主流ではありますが、セキュリティなどの理由でローカルLLMを選択する必要もあると思いますので、その際の参考になれば幸いです。

コメント

タイトルとURLをコピーしました