Llama3でローカルLLM環境を検証してみる

ChatGPTをはじめとした生成AIにおけるここ数年の勃興は語るまでもありません。

特にユーザーからの自然言語による対話をもとに文章を生成する仕組みは、すでに趣味や研究の範囲を超えて各分野の業務でも広く使われるようになりつつあります。その自然言語の理解と文章の生成に貢献している概念のひとつが、

「⁠LLM(Large Language Model:大規模言語モデル)です。

現在ではChatGPTで使われているGPTシリーズだけでなく、GoogleのGeminiやAnthropicのClaudeなど、規模の大小、目的問わずさまざまなLLMが登場しています。

今回はそんなLLMのうちオンプレミス環境でも利用可能な軽量なオープンソースAI大規模言語モデル(LLM)の入門として、まずはUbuntu上でLlama3を検証してみようと思います。

 

みなさん「Llama(ラマ)」ってご存知ですか? LlamaはMeta社が提供しているオープンソースの大規模言語モデル(LLM)です。

しかも、商用利用も可能!すごいですよね。

なんでも、Chatbot Arenaというユーザーの投票によるチャットボットの性能比較サイトでGPT-4やClaude3のsonnetと並ぶレベルの性能を実現しているとか…

 

実行環境

ホストOS環境:

OS: Ubuntu Server 24.04 LTS

ローカルLLM: Ollama + Llama3

HW: ※GPUが搭載されたサーバで検証したいところですが、今すぐに用意ができないためパソコン上の仮想OSで検証します。今回は性能面は無視して、ローカルLLM環境として処理が遅くても動作するところを目標にします。GPUがなくてもCPUだけで動作は出来るはず。今回使用するLlama3は4GBくらいのディスク領域を必要としますのでOS領域含め32GBにします。

 

Llama3とは

Llama3には「8B」と「70B」というモデルが存在します。1つずつ特徴を見ていきましょう。

Llama3 8B

Llama3 8Bは、80億のパラメータを持つ比較的コンパクトなモデルです。パラメータとは、機械学習モデルの中で調整可能な変数のことを指します。パラメータの数が多いほど、言語モデルはより複雑な言語の特徴を学習できますが、同時に学習に必要な計算リソースも増大します。

Llama3 8Bは、限られたパラメータ数の中で効率的に言語の特徴を学習し「限られたパラメータ数の中で高い性能を実現している」という点が特徴的です。

Llama3 70B

Llama3 70Bは、700億のパラメータを持つ大規模言語モデルです。

 

Ollama って何なの?

基本概念

Ollamaは、大規模言語モデル(LLM)を起動したり実行するのをサポートするオープンソースのアプリケーションです。

特に、LlamaやGemmaといったローカルのみで完結して動くLLMのローカルでの起動をサポートしてくれます。LLMアプリケーション開発者が毎回モデルごとに呼び出し方法など実装を変えたりするのは大変なので、その辺りの差異を吸収してくれるレイヤーとして機能します。

 

ChatGPTにしろGeminiにしろ、これらはいずれもインターネット上のクラウドサービスとして提供されています。つまりウェブブラウザーから操作したり、APIを呼び出す際に、インターネットへの接続が必要です。当然その質問内容はインターネットを経由して、各サービスのサーバーに渡されます。さらにサービスによっては、その質問・生成内容自体を学習データとして使われるかもしれません。事の是非はともかく、インターネットに質問文としての情報を流すことや、それが学習にも使われるかもしれないこと自体が「セキュリティリスクである」と捉えられる環境もあることでしょう。また、可能であればインターネットなしにLLMを使いたいケースもありますし、言語モデル自体を自分たちが持っている情報で補強したいこともあります。

そこで出てくる手段のひとつがローカルLLMです。つまり任意の言語モデルを、ローカルマシンの性能だけで動かし、インターネットや対外サービスに依存せずに生成系AIを使えるようにします。とは言え、いわゆる「大規模」な言語モデルを動かすには、それなりのハードウェアリソースや電力に時間とお金が必要になります。しかしながら言語モデルによってはご家庭にあるパソコンUでも十分に動く規模のものもあります。

 

現在LLMの実行環境として広く使われているものに、Go言語で作られたOllama(オラマ)があります。任意の「言語モデル」をロードすることで、さまざまな言語モデルを同じインターフェースから使えるようになります。さらにAPIも用意しているため、バックエンドはOllamaに任せてフロントエンドを作り込めば、自由に対話型のようなウェブサービスやチャットボットも作れます。

 

 

Ubuntsu Serverセットアップ

まずはOS環境をセットアップしましょう。OSは生成AIの動作OSとして世の中で実績が多いとされるUbuntsuを利用します。

以下サイトよりUbuntsu Server OSをダウンロードしOSセットアップします。

https://jp.ubuntu.com/download

Desktop版とServer版の最新バージョン LTS(Long-Term Support)版が公開されていますので、Server版をダウンロードします。2025年1月時点はLTSとして24.04が公開されていました。
Ubuntsu OSセットアップではインターネットに接続できるネットワークアドレスを設定しましょう。各種ツールのダウンロードでインターネットアクセスが必要になります。

セットアップ作業で必要なSSH接続ができるようにします。あとはお好みで。

Ubuntu Server 24.04 LTS インストールメモも参照ください。

 

Ollamaセットアップ

Ollamaのインストール自体はシンプルです。もともとGo言語で作られた単一ファイルのバイナリが配布されているために、libc以外には依存関係もなく、それを取り込めば良いだけです。公式にインストールスクリプトが配布されており、それを使えばNVIDIAやAMDのドライバ等も合わせてインストールできます。もちろんコンテナ等に閉じ込めてしまうのもひとつの手でしょう。
 
======================================
$ wget https://ollama.com/install.sh
 もしくは 
$ curl -fsSL https://ollama.com/install.sh -O
======================================
最低限必要なのは/usr/local/bin/ollamaだけです。これだけあればCPUでもLLMは動きます。もちろんAMD ROCmやNVIDIA CUDAがあれば高速化できますし、GPUメモリが少なくても一番小さい規模のLLMなら動くことが多いです。
 
ちなみにNVIDIAのドライバーやツールキットはUbuntuの公式パッケージでもNVIDIAのサードパーティのバイナリパッケージでもかまいません。Ubuntuの公式パッケージを使いたいならあらかじめ次のようにインストールして、一度再起動しておいてください。
 
======================================
Ubuntuでデスクトップ向けのGPUとして使いたい場合: 
$ sudo ubuntu-drivers install 
もしくは 
$ sudo apt install nvidia-driver-XXX
 
画面の描画等はせずに、純粋にGPGPUとして使いたい場合: 
$ sudo ubuntu-drivers install --gpgpu
 もしくは 
$ sudo apt install nvidia-driver-XXX-server
======================================

基本的にはubuntu-driversコマンドが自動検知して、適切なパッケージをインストールしてくれます。ただし新しいGPUや通常とDevice ID等が異なるGPUだと、ubuntu-driversがうまく検知できないかもしれません。その場合は後者のaptコマンドを使って直接インストールする方法を試してください。

ここでXXXはバージョン番号になります。基本的にsudo apt install nvidia-driver-と入力したあとにTabキーを2回押したら表示されるバージョンのうち、一番新しいものを指定しておけば良いでしょう。セキュアブートの環境だとインストール後に、セキュアブートの設定が始まります。これについては画面の指示に従って、ワンタイムパスワードの設定を行い、再起動しください。

 

それではinstall.shを実行しましょう。内部でcurlコマンドも使っているため、先にそれをインストールしています。

 
======================================
$ sudo apt install curl 
$ bash install.sh
>>> Downloading ollama...
 (中略) 
>>> Installing ollama to /usr/local/bin... 
[sudo] xxxユーザ のパスワード: 
>>> Creating ollama user... 
>>> Adding ollama user to render group... 
>>> Adding ollama user to video group... 
>>> Adding current user to ollama group... 
>>> Creating ollama systemd service... 
>>> Enabling and starting ollama service... Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service. 
>>> NVIDIA GPU installed.
======================================
 
サービスファイルが自動的に有効化され、起動しているためにOllamaのバックエンドも起動しています。
 
======================================
$ command -v ollama /usr/local/bin/ollama 
$ ollama --version ollama version is 0.3.3 
$ systemctl status ollama.service 
● ollama.service - Ollama Service
  Loaded: loaded (/etc/systemd/system/ollama.service; enabled; preset: enabled) 
  (後略)
======================================
 

Llama3.1モデルを試してみる(CUI編)

無事にOllamaをインストールできたら、さっそく言語モデルを試してみましょう。Ollamaでは、いくつかのメジャーな言語モデルをかんたんにインストールできます。使えるモデルはOllamaサイトのモデル一覧から確認できます。

このうちMetaが開発するLlamaは、高性能で使い勝手がよく、さらに軽量なモデルも用意されているために広く使われているモデルです。今回は最新のLlama 3.1のパラメーターサイズ8Bのものを使います。

 

======================================
$ ollama run llama3.1
pulling manifest
 (中略) 
verifying sha256 digest 
writing manifest
removing any unused layers 
success 
>>> Send a message (/? for help)
======================================
 

初めてモデルを実行する場合は、「⁠/usr/share/ollama/.ollama/models/以下にモデルファイルをダウンロードする必要があります。Llama 3.1の8Bだと4.7GiBぐらいのファイルをダウンロードすることになります。

 
あとはプロンプトに質問を入力していくだけです。単一行ならそのまま入力してエンターキーを押したら回答の生成を開始してくれます。試しに日本語でいくつか質問してみましょう。
 
======================================
$ ollama run llama3.1
>>> 赤、黄、青、緑、白、茶、橙色、水色、灰色の9つの色が国旗に使用されている国はどこですか?
オーストラリアです。

>>> ドイツ、アフガン、にっぽん、北のの後につくと映画のタイトルになる、「物事の始まり」を比喩的に表す言葉は何ですか?
「前史」と「先史」。

>>> 「四月九日 拝啓。お手紙ありがとう」という書き出しで始まる、クラゲの研究をする大学院生が文通の修業をするという内容の小説は何ですか?
『ペルセポリス』です。

>>> このたび芸歴7年目を記念し芸名を「さきぽん」から改めた、プロダクション人力舎所属のピン芸人は誰ですか?
マヂカルカンパニーです。

>>> 漢字1字では「さんずいに跋扈の扈」と表記される中国の都市はどこですか?
上海です。

>>> 国道58号の海上区間を鉄道とみなし1979年に「敷設」された、鹿児島・ヨロン島・沖縄を結ぶ架空の鉄道路線は何ですか?
九州新幹線です。

>>> 色川武大、ゴーゴリ、魯迅の小説に共通する日本語でのタイトルは何ですか?
『人間』です。

>>> 東海道新幹線の走行区間のうち、トンネルとトンネル以外の区間ではどちらがより長いですか?
上り線の区間です。
======================================
 
おー。日本ローカルな質問にも答えてくれましたね。答えがあっているかはおいておきまして。。
まずはLlama3をローカルLLMとして動作させる検証は成功しました。
 
次は、ChatGPTなどのようにWEB UIから利用できるところを検証してみようと思います!!