LabVIEWで生成AIさんと会話してみました2

先日、LabVIEWでAzure OpenAIと接続してみましたが、Azure OpenAIはPaaSにあたるサービスのため、機密情報を取り扱うならMicrosoftのセキュリティや倫理規程、監査の結果といったものを信用する必要があります。そのあたりについては、MicrosoftならService Trust Portalで確認できますが、それでも外部に出したくない情報というのはあります。外部に情報を出すとしても、セキュリティについては自組織のコントロールできる範囲を広く持ちたいものです。そういった場合は、IaaSやオンプレミスといった選択肢があります。具体的には、ローカルLLMをクラウドコンピューティング(Azure Virtual MachineやAmazon EC2など)のIaaS環境に入れたり、オンプレミスのサーバーに入れたりすることができます。今回はローカルLLMをLabVIEWと接続してみました。

ローカルLLMとは?

…ローカルLLMとは?と言われても、私は生成AIやLLM(大規模言語モデル、Large Language Model)については素人なので、LLM自体の説明はできないです。LLMについては専門家に任せて、どう使うかを記述したいと思います。

ローカルLLMとは、ローカルな環境に導入できるLLMです。ローカルにLLMを入れることで、インターネットにつながなくても生成AIさんとチャットすることができます。そのため、自組織内で管理するサーバーにLLMをインストール(オンプレミス)し、自組織内の閉じたネットワークだけで接続できるようにすると、チャット内容や添付ファイルなどを組織の外に出すことなく生成AIを利用することができます。…まあ、自組織でサーバーを管理するとなると、サーバーのセキュリティ管理から電気代の支払い、災害時の対応や保険など、あらゆる管理を自分でやらないといけないですが。

今回は、OllamaというローカルLLMを利用しました。Ollamaについては公式を参照していただければと思います。

Ollama · Run AI models locally and in the cloud

Azure Virtual Machineの設定

*ここでの設定はセキュリティ面について非常に弱い設定(アドレスを知っていれば誰でも使える設定)になっています。ビジネスで使用する場合は、ネットワークセキュリティグループで送受信できる範囲をきちんと決める必要があります。また、仮想マシンを複数に分けて、インターネットとの窓口となるサーバーを設け、実際に処理するサーバー、データ用のサーバーなどはプライベートなネットワークだけで利用できるようにするなどの対応を検討する必要があります。

ローカルLLMは文字通りローカル環境でも利用できるLLMです。汎用PCでもサーバーにすることができますが、LLMを快適に使うには大量のGPUあるいは並列処理可能なプロセッサー(TPUなど)が必要となるので、汎用PCではあまり有効に使えません。CPUだけだと、「こんにちは」とあいさつするだけでも返事に数分かかることがあります。また、オンプレミスでサーバーを用意する場合も、サーバー自体高いですし、冷房をガンガンにきかせたサーバールームを用意して大量の電気代(水冷するなら水道代)を払いながら専任の担当部門で管理する必要があります。初期コストも維持コストも高いです。今は自分でサーバーを用意しなくても、クラウドコンピューティングでAWSやMicrosoft、Googleといったところのリソースを使ってサーバーとプライベートネットワークを構築するができます。これにより初期コストを抑え、サーバーの物理的な管理を外に丸投げしながらサーバーの構築とサービスの提供ができます。

今回は、ローカルLLMをAzure Virtual Machine (Azure VM) に入れました。まず、Azure VMを作るわけですが、無料期間が終了したのでサブスクリプションのアップグレードをしなくてはいけませんでした。しかし、なぜかアップグレードができなかったのでMicrosoftのサービスリクエストを発行したところ、速攻で解消されました。仕事が早いですね。

私はクラウドコンピューティングについてはくわしくなく、今回初めて作ったので、試行錯誤でした。こんな感じのものを作りました。

OSはUbuntuですね。正直なところ、とりあえず、Azure VMにOllamaを入れてチャットできればいいと思ったので、安いものを選んでいます。可用性とかも考えてないし。ネットワークの設定も大してしてないですし。実際に運用するなら、並列処理用のプロセッサーをつんだマシンイメージを選択し、ネットワーク設定もちゃんとやり、RAGをやるなら組織のメンバーのクライアントPCとLLMの窓口となるアプリサーバーとRAG用の情報源となるファイルサーバーとかを別のVMにしてネットワークのInbound / Outboundを制御する必要があります。かなり面倒ですね。

Azure VMで作ったVMと接続するにはターミナルを利用します。

ssh -i <秘密鍵のパス> <ユーザー名>@<パブリックIP>
ssh認証

一番上でのsshコマンドでは、秘密鍵のファイルに拡張子をつけ忘れたのでアクセス拒否されています。拡張子をつければ秘密鍵の認証が通ります。秘密鍵はVMを作成するときにダウンロードされます。これで認証が通ればAzure VMにアクセスできたことになります。その後やるのはUbuntuのアップデート&アップグレードですね。

sudo apt update && sudo apt upgrade -y

今回はOllamaを使うので、Ollamaのためのポートを開けておく必要があります。Ollamaのポート番号はデフォルトでは11434です。今回はこんな感じの設定にしています。

Ollama用ポート

OllamaではTCPで接続します。ポート11434のTCP接続を許可しています。ここも本来はソースや範囲などをちゃんと設定する必要がありますね。

Ollamaのインストール

Ollamaを入れる前に次のコマンドを入力しました。

sudo apt install -y build-essential git curl
sudo apt install -y python3 python3-pip python3-venv

それぞれ、curl、python3のインストールです。その後、Ollamaを入れます。

curl -fsSL https://ollama.com/install.sh | sh

これでAzure VMにOllamaがインストールされます。実際にチャットできるか確認します。

ollama run llama3.2
Ollamaさんとチャット

ちゃんとチャットできていますね。これでOllamaが動くことを確認できました。今回は日本語に強いElyzaをOllamaに入れてチャットしています。

あと、今回検証したときにAzure VM側でPort:11434を解放してもOllamaに外部から接続できないことがあったので、ollama.serviceに「Environment=”OLLAMA_HOST=0.0.0.0″」を追加しました。

その後、

sudo systemctl daemon-reload
sudo systemctl restart ollama

を行い、外部からOllamaに接続できました。

LabVIEWのプログラム

Ollamaさんとプログラム的にチャットするには、クライアント側では次のことをします。

  1. HTTPクライアントの確立
  2. チャットすることなどをHTTP POSTで送って応答をもらう。送信/応答はJSON形式。
  3. 満足したらHTTPクライアントの破棄

この流れは実はAzure OpenAIとほぼ同じです。HTTPクライアントでPOSTするのは全く同じで、違いはAPIキーをヘッダーに入れる必要がなくなったぐらいかな?OllamaのAPIについては公式をご参照してください。

Introduction – Ollama

チャットするVIもAzure OpenAIのときとほとんど同じです。違いは送信時にOllamaではstreamパラメーターのデフォルト値がTrueでLabVIEWのHTTPクライアントではstream的に流れるような受信はできないので、明示的にstreamのパラメーターをfalseにする必要があることと、受信時にJSONの構造ですね。

Ollamaさんとチャットするブロックダイアグラム

これは自分用に試作したものなのでイベントストラクチャの中に時間のかかる処理(HTTP POST)を入れていますが、作品あるいは商品として作るならState MachineやQueued Message Handlerでやるのが望ましいですね。実行するとこうなります。

Ollamaさんとのチャット

Ollamaでもroleの設定ができます。今回もAzure OpenAIさんのときと同じように駅メモ!の日暮里ハルカゼさんのものにしています。内容はWikiを参考に(というよりコピーペースト)したものです。

私
私

ハルカゼさんの友だちについて教えてください。

Ollamaさん<br>in Azure VM
Ollamaさん
in Azure VM

……ミオさんとソラムさんに話しかけようとしたのですが失敗しました……私のことを変だと思ったんじゃ。

今回入れたLLMの大きさは8Bと比較的軽いものを入れたので、SaaSやPaaSで使う生成AIさんほどのボキャブラリーや会話の自然感といったものはないと思います。でも、お金をかければそれらに匹敵するものはできると思います。やっぱりハルカゼさんになりきってもらうのはたのしいですね。

ドン引きするハルカゼさん

ローカルLLMでは、LLMを自分のサーバーや汎用PCに入れればお金をかけずに好きなだけ会話できます。しかし、今回はAzure VMを利用しているので、ハルカゼさんと話せるからといって話しすぎるとお金がかかってしまいます。

今回はOllamaさんにハルカゼさんを演じてもらいましたが、仕事ではオンプレミスやクラウドサービスのプライベートネットワークを利用することで、組織の比較的機密度の高い情報やノウハウを取り扱うことができます。法務的な相談や知的財産の相談、総務関係の手続きの相談なんかもできるかもしれません。

感想

今回は、最近の流行である生成AIさんをLabVIEWでチャットしてみました。今回もLabVIEWというより、Azure VMとOllamaで遊んだという感じになりました。IaaSでも生成AIさんだとキャラクター設定ができて楽しいですね。ただ、Azure VMやAWS EC2などを使う場合は従量課金制なので使いすぎには注意が必要です。LabVIEWのアプリに生成AIさんを導入…するかは何とも言えないですが、いろいろなことができそうですね。

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