WindowsでローカルAI環境構築!Ollama導入ガイド

今回は最近はやりのAIについてです。
LocalLLMつまり、ローカル環境にAI環境を構築してみようという話です。
これまでは、LinuxやMac環境にまたWindowではWSLやDockerなどの仮想環境に対して構築する形でしたが、今回は、WindowsPCに対してLocalLLMを構築する方法についてです。

その方法はOllamaというソフトをWindows環境にインストールしてしまうことです。

Ollamaとは?

ローカル環境で、オープンに公開されているLLMのモデルを動作させることのできる無料のツールとなります。
商用利用も可能です。
また、Windwos環境用のPreview版のインストーラが最新でてきました。
このOllamaは、REST APIやPythonライブラリなどが公開されていて、簡単に開発環境を構築できます。
以下のサイトに詳細についての説明やダウンロード環境などがあります。

Ollama
Get up and running with large language models.

Ollamaのダウンロードとインストール

ダウンロード

Download Ollama on Windows
Download Ollama on Windows

このサイトの「Download for Windows(Preview)」をクリックしてインストーラをダウントードします。

環境は、Windows10以上でインストール可能です。

インストール

↓のインストールされたインストーラーを実行します。

実行するとしたのような画面が表示されるので、「インストール」をクリックします。


緑のプログレスバーがいっぱいになれば完了となります。

ollamaの起動

インストール完了すれば、おそらく自動で以下のような通知が表示されるはずです。これが確認できれば、ollamaが起動しています。

もしこの通知が表示されなかったのであれば、以下がアプリの一覧に追加されているはずですので、これを実行すれば起動します。

これで、サーバーが起動しますので、ollamaへのアクセスは、コマンドプロンプトで実行します。
実行するにあったって、どのモデル化を選択して起動する必要があります。
今回は”gemma2”を選択して走らせます。
※gemma2を選んだのは、日本語でも動作しそうだったからです。

ollama run gemma2

これを実行すると、モデルを動かしたことがなければ、モデルのダウンロードが走ります。
※ダウンロードには10分くらい時間がかかります。

すべてのダウンロードが終わって、入力待ちになれば、ollamaのモデルが起動している状態です。
最後に表示されている、「Send a message(/? for help)」が表示されていれば、待ち受け状態です。

LLMを動かしてみる

まずはオーソドックスに英語で

クライアントのソケットプログラムを作成してとお願いしてみた結果です。

>>> Please create Client Socket Program
```python
import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 65432        # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

print('Received', repr(data))
```

**Explanation:**

1. **Import `socket` Module:** This line imports the necessary `socket` module for network communication.

2. **Define Host and Port:**
   - `HOST`: Set to '127.0.0.1', which represents your local machine. Change this if you're connecting to a
different server.
   - `PORT`: The port number used by the server. Make sure it matches the port configured in the server program.

3. **Create Socket:**
   - `socket.socket(socket.AF_INET, socket.SOCK_STREAM)`: Creates a TCP/IP socket.
     - `socket.AF_INET`: Specifies IPv4 addressing.
     - `socket.SOCK_STREAM`: Indicates a TCP (reliable, connection-oriented) socket.

4. **Connect to Server:**
   - `s.connect((HOST, PORT))`: Establishes a connection to the server at the specified host and port.

5. **Send Data:**
   - `s.sendall(b'Hello, world')`: Sends the string "Hello, world" encoded as bytes (`b'...'`) to the server.

6. **Receive Data:**
   - `data = s.recv(1024)`: Receives up to 1024 bytes of data from the server and stores it in the `data`
variable.

7. **Print Received Data:**
   - `print('Received', repr(data))`: Prints the received data, representing it as a string for easier viewing.

**To use this program:**

1. **Save it as a Python file (e.g., `client.py`).**
2. **Make sure you have a server program running on your local machine listening on port 65432.**
3. **Run the client program from your terminal using `python client.py`.**

You should see output similar to:

```
Received b'Hello client!'
```



Let me know if you need help with a specific aspect or have any more questions!

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

つづいては日本語で

同様の内容で問い合わせしてみました。

>>> Client Socket Programをプログラムを教えて
もちろんです! Pythonでクライアントソケットプログラムを作成するための手順とコード例を示します。

**1. 必要となるモジュールインポート:**

まず、ネットワーク通信に使用する`socket`モジュールをインポートします。

```python
import socket
```

**2. ホスト名とポート番号の定義:**

サーバーが実行しているホスト名(またはIPアドレス)とポート番号を指定します。

```python
HOST = '127.0.0.1'  # ローカルマシンのIPアドレス
PORT = 65432        # サーバーが使用するポート番号
```

**3. ソケットの作成:**

TCPソケットを作成し、IPv4アドレスファミリとTCPプロトコルを使用するように設定します。

```python
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    # ... (以下に続くコード)
```

**4. サーバーへの接続:**

`s.connect((HOST, PORT))`で、定義したホスト名とポート番号のサーバーに接続します。

```python
    s.connect((HOST, PORT))
```

**5. データ送信:**

 `s.sendall(b'Hello, world')` で、バイナリデータとしてエンコードされた「Hello, world」をサーバーに送信します。

```python
    s.sendall(b'Hello, world')
```

**6. データ受信:**

 `data = s.recv(1024)` で、最大1024バイトのデータをサーバーから受け取り、`data`変数に格納します。

```python
    data = s.recv(1024)
```

**7. 受信したデータの表示:**

 `print('Received', repr(data))` で、受信したデータを文字列として表示します。

```python
    print('Received', repr(data))
```

**コード全体:**

```python
import socket

HOST = '127.0.0.1'  # サーバーのIPアドレス
PORT = 65432        # サーバーのポート番号

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

print('Received', repr(data))
```



このプログラムを保存して実行すれば、サーバーに接続し、「Hello, world」を送信し、サーバーからの応答を受信するクライア
ントとして動作します。

ばっちり、日本語でも回答してくれてます!!

まとめ

実行方法さえ知っていれば、すごく簡単にローカルでのLLM環境が構築できました!!
日本語でも動くのがすごくいいですね!!
私は、OpenAIの優良プランを申し込んで使用するほど余裕がないので、非常にありがたいです。
皆さんも、ぜひ試してみてください!!

Ollamaのオプションや環境変数について詳しく確認したいかたは

Ollama+Langchainで簡易チャットボットの作成について知りたい方はこちら

Ollama+LangchainでWebの要約をしたい方はこちら

最後に私の環境は、Intel N100CPUが搭載された格安PCで試しています。
ちょっと遅いですが、気長に待てば全然使えるくらい動作しますので、動かされる際の参考にしてください!!
ちなみに動作させた、PCは以下のパソコンになります。気になった方はチェックしてみてください。
ゲームとかしないなら、2万円ちょっとで入手できる最高のPCです!!

OllamaとLangchainを使った簡易チャットボットの作り方を知りたい方はこちら

にいやん

出身 : 関西 居住区 : 関西 職業 : 組み込み機器エンジニア (エンジニア歴13年) 年齢 : 38歳(2022年11月現在) 最近 業務の効率化で噂もありPython言語に興味を持ち勉強しています。 そこで学んだことを記事にして皆さんとシェアさせていただければと思いブログをはじめました!! 興味ある記事があれば皆さん見ていってください!! にほんブログ村