🦁

OLLAMAでAI(LLM)をローカルマシンで動かしてみた。

2024/12/23に公開

API呼ぶかあるいはそれ以上にサクサクLOCALのパソコナンでLLM動かせるOLLAMAを試したいとおみます
推論だけする、つまりただ使いたいだけなのに
API呼ぶのと比べGITHUBから直接インストールしたり、あるいはHUGGING FACEから使うのが手順がたくさんありすぎて億劫な時に
OLLAMAは簡単でモデルの整理がしやすいと個人的には感じてます。
ということで早速OLLAMANおインストールと設定手順説明します。
CPUだけでも気長にそれこと10分20分、モデルによっては1時間以上までば動かなくはないですが、やはりある程度サクサクと結果をみるため
GPUを入れた環境を前提とします。(でもメールで例えば3日以内に答えますとうようなアプリならCPUだけでも回せるかも)

  • まずインストール(以下のコマンドだけ)
# curl https://ollama.ai/install.sh | sh   
  • LLMを試す
    まず簡単に使えるライブラリが提供されてますので、それをそのまま試します
    https://ollama.com/library
    Lllama3.1 の8Bを試します。(モデルのパラメータ数が多いほど制度は高いですがお使いの環境特にGPUのメモリ容量によっては動かすのが困難な場合があります。T4(16GB)レベルだと13Bかそれ以下が快適に使うための限界のような気がします。
# ollama pull llama3.1:8b
pulling manifest
pulling 667b0c1932bc... 100% ▕████████████████████████████████████████████████████████████████████████████████████▏ 4.9 GB
pulling 948af2743fc7... 100% ▕████████████████████████████████████████████████████████████████████████████████████▏ 1.5 KB
pulling 0ba8f0e314b4... 100% ▕████████████████████████████████████████████████████████████████████████████████████▏  12 KB
pulling 56bb8bd477a5... 100% ▕████████████████████████████████████████████████████████████████████████████████████▏   96 B
pulling 455f34728c9b... 100% ▕████████████████████████████████████████████████████████████████████████████████████▏  487 B
verifying sha256 digest
writing manifest
success
  • 確認します
# ollama list
NAME           ID              SIZE      MODIFIED
llama3.1:8b    46e0c10c039e    4.9 GB    About a minute ago

- 試してみましょう
(ollama run <モデル名>)

# ollama run llama3.1:8b
>>> 仙台で有名な観光地はどこですか?
・宮城県立自然史博物館:多くの人に知られています。
・山形道:旧街道。日本最大のシンボルである
・松島:一見しただけで楽しめる。
・遠田沼:「さくらまつり」を楽しむことができます。

>>> 仙台から京都までの行き方を詳しく教えてください
以下は、仙台から京都までの情報です。

**1. 列車で移動**

*   仙台駅から東日本旅客鉄道(JR東日本)の「東北新幹線」に乗ります。
*   東北新幹線の中継駅で乗り換えが必要な場合があります。特に、「福島駅」と「大宮駅」は、乗り換える駅です。

**2. 車で移動**

*   車で仙台から京都までの行き方は、東北自動車道や関西自動車道を利用して、最短約6時間半になります。
*   ただし、車での移動には料金がかかります。特に、高速道路では通行券が必要です。

**3. 飛行機で移動**

*   飛行機で仙台から京都までの行き方は、仙台空港や小松島空港などからの直行便がある場合があります。
*   ただし、飛行機での移動には料金がかかります。

>>> JAVASCRIPTで1からNまでの和を求めるPYTHON関数を作ってください
以下はPythonで使用するJavaScriptのようなコードです。

javascript
function getSum(N) {
    let sum = 0;
    for (let i = 1; i <= N; i++) {
        sum += i;
    }
    return sum;
}

console.log(getSum(10));

このコードは、指定された数字Nまでの数値の合計を計算します。

また、日本では、以下のようなPython関数が一般的です。

python
def getSum(N):
    return (N * (N + 1)) // 2

print(getSum(10))

このコードは、指定された数字Nまでの数値の合計を計算するために公式を利用しています。

このようなコードはPythonでは使用できますが、JavaScriptでは機能しない場合があります。

>>> /bye
  • 画像認識もしてみましょう。LLAVAという画像認識に使えるモデルがあります。
# ollama pull llava:13b
  • 確認
# ollama list
NAME                          ID              SIZE      MODIFIED
llama3.1:8b                   46e0c10c039e    4.9 GB    3 hours ago
llava:13B                     0d0eb4d7f485    8.0 GB    25 hours ago
  • ここでPYTHONから呼び出して画像をダウンロードして、解析させるコード作りました。なぜかOLLAMAのこのモデルですとLOCAL画像からでないとダメ見たいです。でも特に画像をBASE64に変換する手間がなく画像ファイルパスだけで解析できるのは画期的です。PYTHON仮想環境作成しACTIVATEした後にpipでollamaをインストールします。
(llava)# pip install ollama

まずは画像をそのまま説明させる
画像は以下のリンクの画像をダウンロードして解析させました
https://www.ouj.ac.jp/lp/lp251/assets/img/mv_main_after.png
コード:[test0.py]

import requests
import ollama

# 画像をダウンロードして保存
image_url = 'https://www.ouj.ac.jp/lp/lp251/assets/img/mv_main_after.png'
local_image_path = 'local_image.png'

response = requests.get(image_url)
if response.status_code == 200:
    with open(local_image_path, 'wb') as f:
        f.write(response.content)
else:
    raise Exception(f"Failed to download image. Status code: {response.status_code}")
# ollama を使用してチャット
res = ollama.chat(
    model="llava:13B",
    messages=[{
        'role': 'user',
        'content': 'この画像には何が写っていますか?',
        'images': [local_image_path]
    }]
)
print(res['message']['content'])
  • 実行してみます
# python test0.py
 この画像には、若い女性が笑顔でポジティブな表情をしている。彼女の左腕の中指と人差し指を合わせて、「あっ」という手振りをしており、それが日本語で使用される驚きや認知の表現であることが示されています。彼女は白色のコートに着ており、柔らかな表情で仕事やイベントに出席しているようです。
テキストがあり、「何を言っているか分からなかった」と綴っています。この文は日本語で、「何を言っているか分からなかった」という意味であり、人物が注目しやすい表情をしている場合に使われる表現です。

Discussion