Ollama¶

インストール¶

In [1]:
!wget https://ollama.com/install.sh
--2025-04-08 11:14:56--  https://ollama.com/install.sh
Resolving ollama.com (ollama.com)... 34.36.133.15
Connecting to ollama.com (ollama.com)|34.36.133.15|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13281 (13K) [text/html]
Saving to: ‘install.sh.1’

install.sh.1        100%[===================>]  12.97K  --.-KB/s    in 0s      

2025-04-08 11:14:56 (137 MB/s) - ‘install.sh.1’ saved [13281/13281]

In [ ]:
bash install.sh

使い方¶

In [5]:
# Llama-3-ELYZA-JP-8B を使ってみる。
!wget https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF/resolve/main/Llama-3-ELYZA-JP-8B-q4_k_m.gguf?download=true
--2025-04-08 11:47:10--  https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF/resolve/main/Llama-3-ELYZA-JP-8B-q4_k_m.gguf?download=true
Resolving huggingface.co (huggingface.co)... 18.65.125.90, 18.65.125.26, 18.65.125.93, ...
Connecting to huggingface.co (huggingface.co)|18.65.125.90|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://cdn-lfs-us-1.hf.co/repos/80/7f/807fec5de4cee0fc1fd14bbc16cc7400eb94941e148fe2f7348a932e8a7b4d7f/91553c45080b11d95be21bb67961c9a5d2ed7556275423efaaad6df54ba9beae?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27Llama-3-ELYZA-JP-8B-q4_k_m.gguf%3B+filename%3D%22Llama-3-ELYZA-JP-8B-q4_k_m.gguf%22%3B&Expires=1744084034&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0NDA4NDAzNH19LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy11cy0xLmhmLmNvL3JlcG9zLzgwLzdmLzgwN2ZlYzVkZTRjZWUwZmMxZmQxNGJiYzE2Y2M3NDAwZWI5NDk0MWUxNDhmZTJmNzM0OGE5MzJlOGE3YjRkN2YvOTE1NTNjNDUwODBiMTFkOTViZTIxYmI2Nzk2MWM5YTVkMmVkNzU1NjI3NTQyM2VmYWFhZDZkZjU0YmE5YmVhZT9yZXNwb25zZS1jb250ZW50LWRpc3Bvc2l0aW9uPSoifV19&Signature=JvCYN%7E0s5iJMNJNpedMg-FTq3taU-UCgHD4Ww23HnmoCVhTtHrU%7E5O1mKJY%7Efd9YinIv1jCFD09S7Wv4o0Jk2FbDtzjDctqvgEBZ-af0QNAoE8KxAQ5iwfnvpsP90PWhveiVkEZPYr4xHlSHgtfXUf057cn98prz2LyqN4F2gXXSSDDygX3syc1oXpKFglsp3gy2A-Ynsex2mLqOV5aIWeiQ8sVKAl6QZGkjsPC5ygqcm-oIG4hf0PGEN1phDy5iytVnnV3ZpD9Jlv1%7EtjUzOzqBCLOVk3yplGLkgKVjb9SpNC2jYXYwPf2ADIZoOUQLJWUaVduLKvMTLNM8EoELOw__&Key-Pair-Id=K24J24Z295AEI9 [following]
--2025-04-08 11:47:11--  https://cdn-lfs-us-1.hf.co/repos/80/7f/807fec5de4cee0fc1fd14bbc16cc7400eb94941e148fe2f7348a932e8a7b4d7f/91553c45080b11d95be21bb67961c9a5d2ed7556275423efaaad6df54ba9beae?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27Llama-3-ELYZA-JP-8B-q4_k_m.gguf%3B+filename%3D%22Llama-3-ELYZA-JP-8B-q4_k_m.gguf%22%3B&Expires=1744084034&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0NDA4NDAzNH19LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy11cy0xLmhmLmNvL3JlcG9zLzgwLzdmLzgwN2ZlYzVkZTRjZWUwZmMxZmQxNGJiYzE2Y2M3NDAwZWI5NDk0MWUxNDhmZTJmNzM0OGE5MzJlOGE3YjRkN2YvOTE1NTNjNDUwODBiMTFkOTViZTIxYmI2Nzk2MWM5YTVkMmVkNzU1NjI3NTQyM2VmYWFhZDZkZjU0YmE5YmVhZT9yZXNwb25zZS1jb250ZW50LWRpc3Bvc2l0aW9uPSoifV19&Signature=JvCYN%7E0s5iJMNJNpedMg-FTq3taU-UCgHD4Ww23HnmoCVhTtHrU%7E5O1mKJY%7Efd9YinIv1jCFD09S7Wv4o0Jk2FbDtzjDctqvgEBZ-af0QNAoE8KxAQ5iwfnvpsP90PWhveiVkEZPYr4xHlSHgtfXUf057cn98prz2LyqN4F2gXXSSDDygX3syc1oXpKFglsp3gy2A-Ynsex2mLqOV5aIWeiQ8sVKAl6QZGkjsPC5ygqcm-oIG4hf0PGEN1phDy5iytVnnV3ZpD9Jlv1%7EtjUzOzqBCLOVk3yplGLkgKVjb9SpNC2jYXYwPf2ADIZoOUQLJWUaVduLKvMTLNM8EoELOw__&Key-Pair-Id=K24J24Z295AEI9
18.65.100.115, 18.65.100.80, 18.65.100.50, ...co)... 
Connecting to cdn-lfs-us-1.hf.co (cdn-lfs-us-1.hf.co)|18.65.100.115|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4920733984 (4.6G) [binary/octet-stream]
Saving to: ‘Llama-3-ELYZA-JP-8B-q4_k_m.gguf?download=true’

Llama-3-ELYZA-JP-8B 100%[===================>]   4.58G  72.3MB/s    in 66s     

2025-04-08 11:48:17 (71.2 MB/s) - ‘Llama-3-ELYZA-JP-8B-q4_k_m.gguf?download=true’ saved [4920733984/4920733984]

In [14]:
!mv Llama-3-ELYZA-JP-8B-q4_k_m.gguf* Llama-3-ELYZA-JP-8B-q4_k_m.gguf

Modelfile 作成¶

Modelfile を作成。

In [ ]:
!touch Modelfile

作成された Modelfile に、下記を記載する。

FROM ./Llama-3-ELYZA-JP-8B-q4_k_m.gguf
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>

{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"

ollama のモデル作成¶

In [15]:
!ollama create elyza:jp8b -f Modelfile
gathering model components ⠙ gathering model components ⠹ gathering model components ⠹ gathering model components ⠼ gathering model components ⠼ gathering model components ⠦ gathering model components ⠦ gathering model components ⠇ gathering model components ⠏ gathering model components ⠋ gathering model components ⠙ gathering model components ⠹ gathering model components ⠸ gathering model components ⠼ gathering model components ⠴ gathering model components ⠦ gathering model components ⠧ gathering model components ⠇ gathering model components ⠏ gathering model components ⠏ gathering model components ⠙ gathering model components ⠹ gathering model components ⠸ gathering model components ⠼ gathering model components ⠴ gathering model components ⠦ gathering model components ⠧ gathering model components ⠇ gathering model components ⠏ gathering model components ⠋ gathering model components ⠙ gathering model components ⠹ gathering model components ⠸ gathering model components ⠼ gathering model components ⠴ gathering model components ⠦ gathering model components ⠧ gathering model components ⠇ gathering model components ⠏ gathering model components ⠋ gathering model components ⠙ gathering model components ⠙ gathering model components ⠸ gathering model components ⠼ gathering model components ⠴ gathering model components ⠦ gathering model components ⠧ gathering model components ⠇ gathering model components ⠏ gathering model components ⠋ gathering model components ⠋ gathering model components ⠙ gathering model components ⠹ gathering model components ⠼ gathering model components ⠼ gathering model components ⠦ gathering model components ⠦ gathering model components ⠇ gathering model components ⠇ gathering model components ⠏ gathering model components ⠋ gathering model components ⠙ gathering model components ⠸ gathering model components ⠼ gathering model components ⠴ gathering model components ⠦ gathering model components 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 0% ⠋ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 1% ⠙ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 3% ⠹ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 5% ⠸ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 7% ⠼ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 9% ⠴ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 11% ⠦ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 13% ⠧ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 14% ⠇ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 16% ⠏ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 17% ⠋ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 20% ⠙ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 22% ⠹ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 23% ⠸ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 25% ⠼ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 27% ⠴ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 30% ⠦ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 31% ⠧ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 33% ⠇ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 34% ⠏ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 36% ⠋ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 39% ⠙ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 40% ⠹ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 42% ⠸ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 44% ⠼ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 46% ⠴ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 47% ⠦ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 50% ⠧ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 51% ⠇ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 53% ⠏ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 55% ⠋ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 56% ⠙ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 58% ⠹ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 61% ⠸ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 63% ⠼ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 63% ⠴ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 64% ⠦ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 64% ⠧ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 64% ⠇ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 66% ⠏ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 67% ⠋ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 69% ⠙ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 72% ⠹ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 74% ⠸ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 75% ⠼ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 77% ⠴ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 78% ⠦ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 80% ⠧ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 83% ⠇ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 85% ⠏ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 86% ⠋ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 88% ⠙ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 89% ⠹ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 91% ⠸ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 94% ⠼ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 95% ⠴ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 97% ⠦ 
gathering model components 5d2ed7556275423efaaad6df54ba9beae 99% ⠧ 
copying file sha256:91553c45080b11d95be21bb67961c9a5d2ed7556275423efaaad6df54ba9beae 100% 
parsing GGUF 
using existing layer sha256:91553c45080b11d95be21bb67961c9a5d2ed7556275423efaaad6df54ba9beae 
creating new layer sha256:8ab4849b038cf0abc5b1c9b8ee1443dca6b93a045c2272180d985126eb40bf6f 
creating new layer sha256:c0aac7c7f00d8a81a8ef397cd78664957fbe0e09f87b08bc7afa8d627a8da87f 
writing manifest 
success 

モデルの実行¶

In [17]:
!pip install ollama
Collecting ollama
  Downloading ollama-0.4.7-py3-none-any.whl.metadata (4.7 kB)
Requirement already satisfied: httpx<0.29,>=0.27 in /opt/jupyterlab/venv/lib/python3.10/site-packages (from ollama) (0.28.1)
Collecting pydantic<3.0.0,>=2.9.0 (from ollama)
  Downloading pydantic-2.11.2-py3-none-any.whl.metadata (64 kB)
Requirement already satisfied: anyio in /opt/jupyterlab/venv/lib/python3.10/site-packages (from httpx<0.29,>=0.27->ollama) (4.8.0)
Requirement already satisfied: certifi in /opt/jupyterlab/venv/lib/python3.10/site-packages (from httpx<0.29,>=0.27->ollama) (2025.1.31)
Requirement already satisfied: httpcore==1.* in /opt/jupyterlab/venv/lib/python3.10/site-packages (from httpx<0.29,>=0.27->ollama) (1.0.7)
Requirement already satisfied: idna in /opt/jupyterlab/venv/lib/python3.10/site-packages (from httpx<0.29,>=0.27->ollama) (3.10)
Requirement already satisfied: h11<0.15,>=0.13 in /opt/jupyterlab/venv/lib/python3.10/site-packages (from httpcore==1.*->httpx<0.29,>=0.27->ollama) (0.14.0)
Collecting annotated-types>=0.6.0 (from pydantic<3.0.0,>=2.9.0->ollama)
  Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.33.1 (from pydantic<3.0.0,>=2.9.0->ollama)
  Downloading pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)
Requirement already satisfied: typing-extensions>=4.12.2 in /opt/jupyterlab/venv/lib/python3.10/site-packages (from pydantic<3.0.0,>=2.9.0->ollama) (4.12.2)
Collecting typing-inspection>=0.4.0 (from pydantic<3.0.0,>=2.9.0->ollama)
  Downloading typing_inspection-0.4.0-py3-none-any.whl.metadata (2.6 kB)
Requirement already satisfied: exceptiongroup>=1.0.2 in /opt/jupyterlab/venv/lib/python3.10/site-packages (from anyio->httpx<0.29,>=0.27->ollama) (1.2.2)
Requirement already satisfied: sniffio>=1.1 in /opt/jupyterlab/venv/lib/python3.10/site-packages (from anyio->httpx<0.29,>=0.27->ollama) (1.3.1)
Downloading ollama-0.4.7-py3-none-any.whl (13 kB)
Downloading pydantic-2.11.2-py3-none-any.whl (443 kB)
Downloading pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 25.5 MB/s eta 0:00:00
Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)
Downloading typing_inspection-0.4.0-py3-none-any.whl (14 kB)
Installing collected packages: typing-inspection, pydantic-core, annotated-types, pydantic, ollama
Successfully installed annotated-types-0.7.0 ollama-0.4.7 pydantic-2.11.2 pydantic-core-2.33.1 typing-inspection-0.4.0
In [27]:
from ollama import chat
from ollama import ChatResponse

response: ChatResponse = chat(model='elyza:jp8b', messages=[
    {
        'role': 'system',
        'content': 'あなたは誠実で優秀な日本人のアシスタントです。特に指示が無い場合は、常に日本語で回答してください。',
    },
    {
        'role': 'user',
        'content': 'D言語で、フィボナッチ数列を実装してください。',
    },
])
print(response['message']['content'])
D言語でフィボナッチ数列を実装する方法は以下の通りです。

```d
import std.array;
import std.algorithm;

void main()
{
    int[10001] fib = [0, 1];
    for (int i = 2; i < 10001; i++)
        fib[i] = fib[i-1] + fib[i-2];
    writeln(fib[40]); // フィボナッチ数列の40番目の数字を出力
}
```

このプログラムは、フィボナッチ数列を生成し、40番目の数を出力します。D言語はメモリ安全性に配慮した言語で、動的メモリ割り当てが可能です。

上記のプログラムでは、int[10001]という大きな配列を確保していて、fib[i-1]とfib[i-2]を足し合わせることで、i番目のフィボナッチ数を計算しています。