はじめに
2024/10 に IBM Granite 3.0 models がリリースされました。(Dense モデル 2Bと8B, Apache 2.0 license)
Dense モデルは12兆トークンのデータで学習されており、RAG(Retrieval-Augmented Generation)のサポート、コード生成に適しており、今後、128Kコンテキストウィンドウのサポートやマルチモーダル拡張も予定されているそうです。
IBM Power上で Granite 3.0 を動かしているブログがありました。
参考にさせていただいて試してみます。
環境
IBM Power10 (S1022)
RHEL 9.4
リソース:CPU 1 Core, 16 GB Memory
お試し環境のためあまり潤沢には割り当てられていません...
[root@testollama ~]# lparstat -i
Node Name : testollama
Partition Name : testollama
Partition Number : 47
Type : Shared
Mode : Uncapped
Entitled Capacity : 1.00
Partition Group-ID : 32815
Shared Pool ID : 0
Online Virtual CPUs : 1
Maximum Virtual CPUs : 5
Minimum Virtual CPUs : 1
Online Memory : 16285824 kB
Minimum Memory : 2048
Desired Memory : 16384
Maximum Memory : 16642998272
Minimum Capacity : 0.25
Maximum Capacity : 2.00
Capacity Increment : 0.01
Active Physical CPUs in system : 40
Active CPUs in Pool : 37
Shared Physical CPUS in system : 37
Maximum Capacity of Pool : 37.00
Entitled Capacity of Pool : 2575
Unallocated Processor Capacity : 0
Physical CPU Percentage : 100
Unallocated Weight : 0
Memory Mode : Dedicated
Total I/O Memory Entitlement : 17179869184
Variable Memory Capacity Weight : 0
Memory Pool ID : 65535
Unallocated Variable Memory Capacity Weight : 0
Unallocated I/O Memory Entitlement : 0
Memory Group ID of LPAR : 32815
Desired Variable Capacity Weight : 128
[root@testollama ~]#
実行環境設定
podman をインストールします。
[root@testollama ~]# dnf install podman
Updating Subscription Management repositories.
Red Hat Enterprise Linux 9 for Power, little endian - BaseOS (RPMs) 36 MB/s | 22 MB 00:00
Red Hat Enterprise Linux 9 for Power, little endian - AppStream (RP 43 MB/s | 36 MB 00:00
Dependencies resolved.
====================================================================================================
Package Arch Version Repository Size
====================================================================================================
Installing:
podman ppc64le 4:4.9.4-13.el9_4 rhel-9-for-ppc64le-appstream-rpms 14 M
Installing dependencies:
conmon ppc64le 2:2.1.10-1.el9 rhel-9-for-ppc64le-appstream-rpms 54 k
~ 省略 ~
Installed:
aardvark-dns-2:1.10.0-3.el9_4.ppc64le conmon-2:2.1.10-1.el9.ppc64le
container-selinux-3:2.229.0-1.el9_3.noarch containers-common-2:1-91.el9_4.ppc64le
criu-3.19-1.el9.ppc64le criu-libs-3.19-1.el9.ppc64le
crun-1.14.3-1.el9.ppc64le fuse-common-3.10.2-8.el9.ppc64le
fuse-overlayfs-1.13-1.el9.ppc64le fuse3-3.10.2-8.el9.ppc64le
fuse3-libs-3.10.2-8.el9.ppc64le iptables-nft-1.8.10-2.el9.ppc64le
libnet-1.2-6.el9.ppc64le libnftnl-1.2.6-4.el9_4.ppc64le
libslirp-4.4.0-7.el9.ppc64le netavark-2:1.10.3-1.el9.ppc64le
nftables-1:1.0.9-1.el9.ppc64le podman-4:4.9.4-13.el9_4.ppc64le
protobuf-c-1.3.3-13.el9.ppc64le shadow-utils-subid-2:4.9-8.el9.ppc64le
slirp4netns-1.2.3-1.el9.ppc64le yajl-2.1.0-22.el9.ppc64le
Complete!
[root@testollama ~]#
[root@testollama ~]# which podman
/usr/bin/podman
(ppc64le用に動くように設定された) ollama のイメージを稼働
次のイメージを使用 -> quay.io/mgiessing/ollama
[root@testollama ~]# podman run -d --privileged -v ollama:/root/.ollama -p 11434:11434 --name ollama quay.io/mgiessing/ollama:v0.3.14
Trying to pull quay.io/mgiessing/ollama:v0.3.14...
Getting image source signatures
Copying blob a26f98920ed2 done |
Copying blob a181ccbec46a done |
Copying blob c1b3fd6d67e8 done |
Copying blob ee70963c9454 done |
Copying config 175cf51aaf done |
Writing manifest to image destination
4952156cc36a033cc8d959fc410e06adea3586c93fbfe497f795c52f6aaab525
[root@testollama ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4952156cc36a quay.io/mgiessing/ollama:v0.3.14 serve 55 seconds ago Up 54 seconds 0.0.0.0:11434->11434/tcp ollama
[root@testollama ~]#
お試しで granite3-dense:2b モデルを動かします。
[root@testollama ~]# podman exec -it ollama ollama run granite3-dense
pulling manifest
pulling 63dd4fe4571a... 100% ▕████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 1.6 GB
pulling 604785e698e9... 100% ▕████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 664 B
pulling 43070e2d4e53... 100% ▕████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 11 KB
pulling a8ea06414c19... 100% ▕████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 417 B
verifying sha256 digest
writing manifest
success
>>>
/? を入力すると可能なコマンドが確認できます。
>>> /?
Available Commands:
/set Set session variables
/show Show model information
/load <model> Load a session or model
/save <model> Save your current session
/clear Clear session context
/bye Exit
/?, /help Help for a command
/? shortcuts Help for keyboard shortcuts
Use """ to begin a multi-line message.
2b の実行は一旦停止しました。
Granite 8B で確認
続いて granite3-dense:8b モデル (大きい方) で文字誤りを確認してみます。
[root@testollama ~]# podman exec -it ollama ollama run granite3-dense:8b --verbose
>>> 次の文の誤りを教えてください。「今日の降水確率は70%でです。。」
The correct sentence should be: "Today's rainfall probability is 70%." The error in the original sentence is that it uses the wrong word for "probability". In Japanese, the word used to express
probability is "確率" (kakuritsu), not "確率" (kakuritsu).
total duration: 19.382938143s
load duration: 9.039426ms
prompt eval count: 36 token(s)
prompt eval duration: 5.623252s
prompt eval rate: 6.40 tokens/s
eval count: 69 token(s)
eval duration: 13.708007s
eval rate: 5.03 tokens/s
>>> 日本語でお願いします。
はい、日本語での回答をお願いします。
今日の降水確率は70%です。
total duration: 9.79490454s
load duration: 9.253747ms
prompt eval count: 123 token(s)
prompt eval duration: 3.269336s
prompt eval rate: 37.62 tokens/s
eval count: 32 token(s)
eval duration: 6.352477s
eval rate: 5.04 tokens/s
>>> Send a
最初は英語で返ってきてしまいましたが、日本語でも答えてくれました。
回答速度はリソース少なめの割にはあまりストレスなく返ってきた印象です。(最初は20秒弱、次が10秒弱)
おわりに
オンプレミス Power10 上でのAI モデルが簡単に稼働するようになってきています。
今後はお試しで、ollama に接続する UI (Open WebUI や Dify など..) と組み合わせて動かしてみたいと思います。
WebUI の方は、Local PCなど、必ずしも Power 上でなくても良いかなとも思います。
以上です。