Episode 33 OllamaをMacの仮想環境でも使えるようにしてみた

ブログ

皆さんこんにちはグレキチです。
ついに梅雨が始まりましたね。例年では珍しく、6月初日から日本に上陸した台風を皮切りに、梅雨が始まった感じを受けました。私の住んでいる地域では被害はほとんど無かったみたいですが、皆さんのところは大丈夫でしたか?今年は何やら、珍しいことが色々と起こる予兆なんでしょうかね!?😆

さて今回は、すでに広く普及しているAIアシスタントに関係する内容になります。私の場合、AIアシスタントを利用するのに出来れば余計なコストはかけたく無いと思っているので、もっぱらGoogle Gemini を使わせてもらっています。しかし、これらがなぜ無料なのかについては、それなりの理由があることはもちろん皆さんご存知ですよね?クラウド上で実行しているとやはり情報漏洩が気になるところなので、新規開発中のアプリのコード相談などは出来ればシークレットで行いたいですね。
そこで便利になってくるのが、最近のトレンドにもなっているエッジAIという考え方です。熾烈なAI開発競争とデバイス性能の向上に伴って、ローカル環境でも十分にLLM(大規模言語モデル)を使えるレベルになっているので、ローカルでLLMを動かして機密性を高めようということができるようになりました。また、ローカルLLMはオフラインでも使用できるため、万が一ネット障害が発生してもその影響を受けずに使える状況を保てるのは、作業を継続する上(特に忙しい時など)ではかなりのメリットだと思います。

そこで、今回導入を考えたのが、数あるローカルLLMの中から、『Ollama(オラマ)』を使ってみることにしました😀 Ollamaについては後段セクションで解説しますが、選んだ理由としては、MacとLinux(ついでにWindowsも)のOSに対応していること、商用利用に制限がないこと、Silicon Macとの相性が良いと言われていたこと、などです。
それで今回は、Ollamaを導入したよということを記事にしたかった訳ではなくて、さらに一歩進んで、Silicon Macに導入したOllamaを仮想環境のOSでも使いたいということに関して、紹介したい内容があったためです。
ローカルLLMと謳っているので、当然ローカルでしか使えない様に設定してあるのが普通なのですが、仮想環境内でもローカルLLMを使いたい機会が発生してしまったため、何とかホストのローカルLLMを仮想環境でも使えないものかを考えたわけです。
仮想環境もホストのMacから見れば、設定次第では外部環境になる訳なので、今回の悩み事が発生したという経緯です。

ではどうやってその悩みを解決したのかについて、紹介したいと思います。
それでは行ってみましょう。

Ollamaとは何か

概要

Ollama(Omni-Layer Learning Language Acquisition Model)とは、コンピュータ上でLLMを簡単に実行・管理できるオープンソースツールのことです。Google GeminiやChatGPTなどのAIアシスタント機能をローカル環境で実行できるようにしたものです。”管理”という言葉が含まれているように、単一のLLMだけでなく、複数のLLMを取り扱うことが出来ます。これは非常に便利なポイントだと思いました。なぜかというと、用途に合わせてLLMを選択できるということなんですよ!!
クラウド実行タイプのGoogleGeminiなどは汎用性を持たせてあるため、チャットで回答できる内容としては、どちらかというと浅く広く対応できるようになっています。しかし、例えば私などは、プログラムコードの作成アシストに特化したものなどが必要なので、汎用的なものよりもコード作成領域に特化したモデルをダウンロードしてきて使った方が作業がより捗る訳です。つまり、自分のニーズに合わせてモデルを選択できる、言い換えると、自分専用のLLMを持つことができるということですね☝️
利用可能なモデルには、Llama 2、Gemma、Mistralなどの人気モデルをはじめ、ライブラリにはモデルが豊富にあります。モデルをそのままローカルで実行するのはもちろんのこと、ニーズに合わせて調整したりすることもできるようです。
それとシステム要件ですが、通常のPCだと問題ないとは思いますが、万が一マイコンとかに構築する場合には気になる要件かと思いますので、以下に記載しておきます。

  • OS:macOS 12以上、 Linux、 Windows 10以上
  • RAM:最低8GB(16GB以上推奨)
  • ストレージサイズ:導入するモデルで異なりますが、最低10GB以上の空き容量は欲しい

使い方

ここでは、Ollamaの使い方について簡単に紹介します。
まずはOllamaソフトを、公式サイトの説明に沿ってインストールします。公式サイトは、こちらのページになります。
インストールが終わったら、ライブラリから使用したいモデルのダウンロードを行います。下記のコマンドをターミナル上で実行すると、簡単にダウンロード出来ます。

# gemma3:latest (4Bモデルの場合)
ollama pull gemma3

モデルを複数ダウンロードする場合は、1モデルだけで10GBを超えるものもあるため、データ容量をちょっとは気にしておいた方が良いかと思います☝️

ダウンロードしたモデルを確認したい場合は、以下のコマンドで一覧表示できます。

ollama list

モデルがダウンロード出来たら、実際に動かしてみましょう。以下のコマンドを実行すると、ターミナル上でのchat形式のやり取りが出来ます。(起動までに数秒かかると思います)

ollama run gemma3

使用モデルで色々違うと思いますが、人気のあるモデルだと日本語でのやり取りは大体可能なので、chatモードに移行出来たら、とりあえず日本語で挨拶してみるとかを試してみてはどうかと思います。実行例は以下のとおりです。


chatを終了したい場合は、/bye もしくは ctrl + d で終了できます。

なお、クラウド上のGoogle Geminiなどの様にGUIで使いたい場合は、別途それに対応したソフトの導入などが必要となりますので、必要に応じてご自分で調べて環境構築してみて下さい👍

以上ここまでが、Ollamaに関する一般的な説明内容でした。

特殊な設定

いよいよここからが、今回の本題に直結する内容になります。

ネイティブ版Ollamaの場合、PCを起動するとそれに連動して自動的にOllamaを起動できるようになっていて、その場合、バックエンドでOllamaサーバーを起動するための環境変数である OLLAMA_HOST が、デフォルトで “127.0.0.1:11434”(つまり、”localhost:11434” ※ポート番号は11434で固定)に設定されています。もともとローカルでの運用を目的としたものなので、この設定は至極自然なことだと思います。
しかし、このままの設定だと、今回考えているような仮想環境からホスト側に構築したOllamaサーバーにアクセスしたい、ということは出来ない訳です。

そんな場合を想定してか、Ollamaにはサーバーを外部公開できるようにするための救済策?が設けられていて、Ollamaサーバーを起動させるための OLLAMA_HOST変数 をカスタマイズできるようになっているんです☝️ Ollama公式ドキュメントのFAQに、以下のコマンドを使ってこの OLLAMA_HOST 変数を、“0.0.0.0:11434” に設定することが紹介されています。

launchctl setenv OLLAMA_HOST "0.0.0.0:11434"

しかし、この設定内容だと、万が一ファイヤーウォールが設定されていなかったとしたら、外部からのアクセスを全くブロックしないこととなるので、セキュリティの観点からはあまりよろしくないのでは!?🤔と感じてしまいます。
従って、IPアドレスはローカルPC内部のもので設定しておきたいところなのですが、私の場合、都合により仮想環境はブリッジ接続しているため、ホストとIPを共有するということも出来ません。
それと、OLLAMA_HOST 変数に設定できるIPアドレスは1つのみなので、ローカル内の複数のIPアドレスを設定するといったことも出来ません😭 

いやいや困った!!😩 さてさて、それではどうするか?
私が下した決断は、使う時のみIPを変更するという手法をとることでした。その場合の手順としては、まずOllamaを停止し、上で記載したコマンドを実行後、再度Ollamaを起動するということを行うわけです。しかし、毎回これをやるのはちょっと煩わしいと思いませんか?

そこで、その手法をストレスなく使えるようにするために、Macならではの機能を活用することにしました。それがこの後説明する、スクリプトエディタというものです。

Macのスクリプトエディタとは?

スクリプトエディタ概要

ここでは、Macのスクリプトエディタについて簡単に説明します。

SEのアイコン画像

Macの公式ユーザーガイドによると、
「スクリプトエディタ」では、強力なスクリプトやツールを作成でき、アプリを作成することもできます。繰り返し作業の実行、複雑なワークフローの自動化、およびアプリやシステムの制御のためのスクリプトを作成できます。AppleScript、JavaScript for Automation、シェルスクリプト、一部の他社製のスクリプト言語を含む、さまざまな言語を使用できます。「スクリプトエディタ」では、スクリプトを編集、デバッグ、およびコンパイルすることができます。完成したスクリプトは、アプリ(ドロップレット)として保存できます。
という説明がされています。簡単に言うと、ソフト上で許可されたスクリプト言語(通常、OSA言語と呼ばれる)を使って、簡易的なアプリが作れるというものです。今回初めて使ったソフトでしたが、歴史を遡るとMac OS Xの頃からあるソフトみたいでした。

なお、AppleScript言語の詳細については、こちらの”AppleScript Language Guide(英語版のみ)”をご参照下さい。(私もほんのさわりだけを見た感じなので、とても詳しく説明できるレベルには到達していません😅)

それで今回これを使って何をしたかというと、アプリを起動する(アプリアイコンをクリックする)とOllamaサーバーのホストIPを瞬時に切り替えることができるものを作成しました。

アプリ作成

アプリ用に作成したコードは以下の通りです。

do shell script "pkill -f Ollama || true"
delay 1
do shell script "launchctl setenv OLLAMA_HOST 192.168.***.***:11434"
do shell script "open -a ollama"

# ***は自宅環境に合わせて変更要

上のコードで多用している do shell script ですが、これは、shellコマンドを実行するためのものです。最初にOllamaを停止させて、その後完全に停止する待ち時間として、delayを使って1秒待ち、環境変数を変更した後、再度Ollamaを起動、ということをやっています。そんなに難しくないですよね?

コードが出来たら、これをアプリとして保存します。
保存方法は、ファイル ー 書き出し を選択すると以下のウィンドウが立ち上がるので、

赤枠で示している ファイルフォーマット のところを アプリケーション を選択して保存します。
(なお、保存先はアプリケーションにしておいた方が良いと思います)

こうして作成したアプリを使うことで、アプリアイコンを1回押すだけで、OllamaサーバーのIPアドレス設定を狙ったIPアドレスに瞬時に切り替えることができ、仮装環境でもスムーズにLLMを使えるようにすることが出来ました☺️

なお、元のローカルIPに戻したい場合は、以下のいずれかの方法を取ります。

  • 一度Ollamaを終了させてから、ターミナルで “launchctl setenv OLLAMA_HOST localhost:11434” を実行したのち、あらためてOllamaを起動する
  • PC自体を再起動する

この元に戻すアプリも一緒に作ったらいいのかも知れませんね。
(私は特に作成しませんでしたが😄)

まとめ

今回はちょっとしたMacネタでしたね。(いやOllamaネタか?🤔)

独自アプリという形で作成したアプリを起動すればOllamaのホスト設定が切り替わるという方法を取りましたが、Ollamaに関するこの関連情報を色々と調べた上で、私の中では現状これがベストかなと思いました。
ちなみに、ホストPCにインストールしたLLMを仮想環境側で共用した場合、ちょっと気になるのが応答速度かと思いますが、今回私が試した所では、遅延などは感じられなかったです。
Ollama自体は継続して開発されていますので、今後公式でもっとよい設定方法が提案されることを期待したいですね。

また、本文にも記載した通り、今回初めてスクリプトエディタというものを使ってみましたが、なかなか便利なものですね。なんか色々作ってみたくなりました。時間ある時に、これを使って皆さんがどんなものを作成しているのかを調べてみようかと思いました。

ということで、今回は以上です。

それでは、またの機会に🖐️