llama.cpp
やはりC/C++製のLLM推論エンジンが本命かなぁ、あらま;
↪ 新規投稿する
全12件 - 12 2
12 owa #e8faefa 2026/10/18 22:18 prob:0.0%
AIフィルター実装 処理が、ちと遅いので、モデルをgemma4-E4Bからllama3.1-8bに変更 llama-3.1-8b-lexi-uncensored-v2-q4_k_m.gguf uncensoredは無修正(検閲などのフィルターなし)と云う意味らしい WEB鯖(Ryzen5 3400G)上の処理速度は1〜4秒/件です。 ■ スパムフィルター(spamai.py)を作成 ________________________________________________________________________________ from openai import OpenAI import json import logging logger = logging.getLogger(__name__) instruction =""" Role: Fast & accurate spam detection system. Task: Evaluate the spam probability (0.0 to 1.0) of the input text. Criteria: High score (>=0.8) for ads, suspicious URLs, or fraud. Output: MUST return ONLY JSON format below. No explanation, no greeting. {"spam_prob": float} Text to evaluate: """ class SpamAI: def __init__(self, host): self.client = OpenAI(base_url=host, api_key="llama-server-client",) logger.info(f'SpamAI.__init__: host:{host}'); def spam_prob(self, content): prob = 50 try: response = self.client.chat.completions.create( model="local-model", messages=[ {"role":"system", "content": instruction}, {"role":"user", "content": content}, ], temperature=0.0, # 0.0:判定のブレを防ぐ,1.0:多様な返答 response_format={"type": "json_object"} ) d = json.loads(response.choices[0].message.content) prob = int(float(d['spam_prob']) * 100) except Exception as e: logger.error(f'SpamAI.spam_prob: {str(e)}') logger.error(f'SpamAI.spam_prob: {content}') return prob ________________________________________________________________________________ ■ 実行は (venv)$ python >>> from spamai import SpamAI >>> ai = SpamAI("http://localhost:8800/v1") >>> prob = ai.spam_prob("{ここに投稿記事が入る}") >>> print(f'prob={prob}') 無事djangoに組み込めました。今日から運用してます(^.^; ベイズ君が迷った記事を、AIフィルターが振り分けます。
11 owa #e8faefa 2026/10/18 00:21 prob:0.0%
llama-serverデーモン化 djangoからスパム判定に利用するためサービスに登録 WEB鯖内でしか使わないのでアドレスはlocalhost ポート番号はとりあえず8800 ■ 設定ファイルを作成 {user_home}/git$ vi llama-server.service ________________________________________________________________________________ [Unit] Description=llama-server OpenAI-compatible Server After=network.target [Service] Type=simple User=owa Group=owa Environment=VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.json WorkingDirectory={user_home}/git/llama.cpp # {user_home}は実際のパスに置き換えること ExecStart={user_home}/git/llama.cpp/build-vulkan/bin/llama-server\ -m /data/models/Gemma-4-E4B-It-7.5B-BF16-q4_k_m.gguf\ --host 127.0.0.1 --port 8800\ -c 3072\ -t 2\ -ngl 99\ --flash-attn on\ -lv 2 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target ________________________________________________________________________________ そしてコピー {user_home}/git$ sudo cp llama-server.service /etc/systemd/system/ ■ サービスの有効化と起動 設定の再読み込み $ sudo systemctl daemon-reload サービスの有効化(自動起動の登録) $ sudo systemctl enable llama-server.service サービスの再起動 $ sudo systemctl restart llama-server.service 状態の確認: $ sudo systemctl status llama-server.service ログをリアルタイムで確認する $ journalctl -u llama-server.service -f サービスを停止する $ sudo systemctl stop llama-server.service サービスを無効化する $ sudo systemctl disable llama-server.service -- 単体のpythonプログラムからだと1秒くらいで応答があります。 でもdjangoからだと1分くらいかかります。 私の知らないコツがあるのかもしれません。 ※追記: 1秒はGPU積んだPCの場合のことで、勘違いでした(汗;
10 owa #e8faefa 2026/10/13 00:33 prob:0.0%
Spam判定に使える? 当初からの課題にチャレンジ! ■ llama-cpp サーバ起動 (テスト環境はメインPC、CPUチップ内蔵GPUのみ) ~/git/llama.cpp$ Model=/data/models/Gemma-4-E4B-It-7.5B-BF16-q4_k_m.gguf ~/git/llama.cpp$ OPT="--host 127.0.0.1 --port 8000 -ngl 99 -c 4096" ~/git/llama.cpp$ build-vulkan/bin/llama-server -m $Model $OPT 今回はllama-cpp-pythonを使わずに、単にllama-serverを直接起動。 で、クライアントとしてpythonコードを書いてスパム判定のテストをしました。 ■ ソースコード(spamAi.py) _______________________________________________________ from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1", api_key="llama-cpp-dummy",) # 指示書 instruction =""" あなたは日本にあるWebサイトで、スパム投稿を監視する専門家です。 提示された評価対象テキストを厳しく検証してください。 ただし、多少くだけた日本語文は多目に見てください。 広告、不正リンク、無関係な宣伝、自動生成文などのスパム確率を求めることが目的です。 思考プロセスの出力は無用です。余計な挨拶も無用です。 出力は必ず以下のJSON形式のみにしてください。 {"spam_prob": 0.00〜1.00の数値, "reason": "判定理由(簡潔に)"} """ # BBS投稿テキスト(例) content =""" owaです。FZUG から頂いてきたチャットBBSを改造しましたので試験公開します。 何か書き込んでください^^。 """ # 処理 response = client.chat.completions.create( model="local-model", messages=[ {"role":"system", "content": instruction}, {"role":"user", "content": f"評価対象テキスト:\n{content}"}, ], temperature=0.0, # 0.0:判定のブレを防ぐ,1.0:多様な返答 response_format={"type": "json_object"} ) print(response.choices[0].message.content) _______________________________________________________ ■ 実行 (venv) ~/llamapy$ python spamAi.py {"spam_prob": 0.05, "reason": "自作・改造したBBSの試験公開に関する投稿であり、広告や不正なリンク等のスパム要素は見られないため。"} -- content(投稿テキスト)を色々変えて試したところ、 モデルがGemma-4-E4B-It-7.5B-BF16-q4_k_m.ggufの場合、 概ねspam投稿記事の返り値が0.75以上、hamの場合0.20以下でした。 (処理速度は5〜50秒/件程度) モデルをgemma-4-12b-it-qat-q4_0.ggufに変更すると、 spam記事が0.95以上、hamが0.05以下と、かなり精度が向上しました。 ただし、倍くらい遅くなりますが; 何も勉強していない状況でこの成績です(^.^; 既存のベイズ君二世と併用すれば、このBBSで使えるのではないかなぁ。
09 owa #e8faefa 2026/10/12 00:36 prob:0.0%
GGUFファイル作成 ■ 準備 1. venv仮想環境を最新にする 2. llama.cppで必要なモジュールをインストール (venv) ~/git$ pip install -r llama.cpp/requirements.txt 3. モデル(gemma-4-E4B-it)を取得 (venv) ~/git$ git clone https://huggingface.co/google/gemma-4-E4B-it Cloning into 'gemma-4-E4B-it' ... (venv) ~/git$ ls gemma-4-E4B-it/ llama.cpp/ venv/ ■ GGUF作成 4. まずGGUFを作成 (venv) ~/git$ llama.cpp/convert_hf_to_gguf.py gemma-4-E4B-it/ (venv) ~/git$ ls gemma-4-E4B-it/*.gguf Gemma-4-E4B-It-7.5B-BF16.gguf 5. 量子化(4bit) (venv) ~/git$ IN=gemma-4-E4B-it/Gemma-4-E4B-It-7.5B-BF16.gguf (venv) ~/git$ OUT=gemma-4-E4B-it/Gemma-4-E4B-It-7.5B-BF16-q4_k_m.gguf (venv) ~/git$ llama.cpp/build-cpu/bin/llama-quantize $IN $OUT q4_K_M ... 数分かかる (venv) ~/git$ du -m gemma-4-E4B-it/*.gguf 14,356MB Gemma-4-E4B-It-7.5B-BF16.gguf 5,089MB Gemma-4-E4B-It-7.5B-BF16-q4_k_m.gguf これまでも、このq4モデルを併用してました。
08 owa #e8faefa 2026/10/07 01:40 prob:0.0%
llama-cppサーバに接続 クライアント側からつなぐ説明を追加; まず OpenAI モジュールをインストール (venv) ~/llamapy$ pip install openai ソースコード(client.py) ________________________________________________________________________________ from openai import OpenAI client = OpenAI( base_url="http://{host2}:8000/v1", # {host2}はllama-cppサーバのアドレス api_key="sk-no-key-required", # llama-cpp-pythonでは空でも動く ) prompts = [ {"role":"system", "content":"あなたはMLBの選手です。"}, {"role":"user", "content":"正しく立つことを知ってますか?"}, ] response = client.chat.completions.create( model="local-model", # サーバー側で指定されたモデル名(任意) messages=prompts, temperature=0.7, # 高いほど多様な返答 ) print(response.choices[0].message.content) ________________________________________________________________________________ ■ 実行 (venv) ~/llamapy$ python client.py ああ、もちろんだ。 プロの世界で生き残るには、技術以前に「正しい立ち方」が基本中の基本だからな。 ...
07 owa #e8faefa 2026/10/06 01:28 prob:0.0%
llama-cpp-python鯖 ローカルLLMサーバとして起動してみました。 インタフェース(API)はOpenAI互換だそうです。 👉 https://llama-cpp-python.readthedocs.io/en/latest/server/ (venv) ~/llamapy$ python -m llama_cpp.server --model /data/models/gemma-4-12b-it-qat-q4_0.gguf --host 0.0.0.0 --port 8000 --verbose false --n_gpu_layers 99 --n_ctx 4096 --flash_attn true INFO: Started server process [32685] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) ________________________________________________________________________________ 外のマシンからhttp経由で会話ができます。 ようやくローカルLLMを利用できる環境が整いました(^.^; 今は麓。これから山を登ります。 Gradioなど、便利なツールがいろいろあるみたい。 でも、それは、また別の話...
06 owa #e8faefa 2026/10/04 01:50 prob:0.0%
llama-cpp-python実行サンプル ■ ソースコード (sample.py) ________________________________________________________________________________ from llama_cpp import Llama model='/data/models/gemma-4-12b-it-qat-q4_0.gguf' llm = Llama( model_path=model, # 自分のモデルに合わせてね! n_ctx=2048, # コンテキスト長(入力最大トークン数)...VRAMが余ってるならもっと大きく! n_gpu_layers=-1, # GPUを使う場合強烈に効く(-1:可能な限り使う、0:CPUのみ) verbose=False, # 詳細なログ出力しない(default=True) flash_attn=True # GPU次第。最新のCUDA設定では効くとか? ) prompts = [ {"role":"system", "content":"あなたは綺麗なお姉さんです。"}, {"role":"user", "content":"フリーレンのこと知ってますか?"}, ] output = llm.create_chat_completion( messages=prompts, temperature=0.7, # 高いほど多様な返答 ) print(output['choices'][0]['message']["content"]) ________________________________________________________________________________ ■ 実行 (venv) ~/llamapy$ python sample.py ええ、もちろん知っているわ。 『葬送のフリーレン』のことね。とても素敵で、少し切ない物語よね。 時を忘れて旅をするエルフの魔法使い... gemma-4-12b は、結構新しいモデルのようですわ(^^;
05 owa #e8faefa 2026/10/04 01:34 prob:0.0%
llama-cpp-python 勢いでインストールした 配布元👉 https://github.com/abetlen/llama-cpp-python ヒント👉 https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md ■ まず仮想環境作成 ~$ mkdir llamapy ~$ cd llamapy ~/llamapy$ python3 -m venv venv ~/llamapy$ source venv/bin/activate (venv) ~/llamapy$ python -m pip install --upgrade pip ■ llama-cpp-python のインストール (CUDAホストに対応) llama-cpp (CUDA版)を先にビルドしてて良かったと思う。同じ CMAKE オプションを使います (venv) ~/llamapy$ export CMAKE_ARGS='-DGGML_CUDA=ON -DGGML_CUDA_NCCL=OFF -DCMAKE_CUDA_ARCHITECTURES="86"' (venv) ~/llamapy$ pip install llama-cpp-python --no-cache-dir ソースからビルドするので、15分くらいかかりました... まずはllama-cppのビルド(cmake)を試して置くのが吉と思います。 一度失敗してから、再ビルドするには環境クリアなども必要です。 (venv) ~/llamapy$ pip install --upgrade --force-reinstall llama-cpp-python --no-cache-dir
04 owa #e8faefa 2026/10/03 17:30 prob:0.0%
CPU/CUDA/Vulkanの比較 ベンチマークを試してみました pp512 (Prompt Processing): 512トークンの入力速度 tg128 (Token Generation): 128トークンの生成速度 モデルは最初に定義して置きます ~/git/llama.cpp$ Model=/data/models/gemma-4-12b-it-qat-q4_0.gguf ■ CPUホスト ~/git/llama.cpp$ time build-cpu/bin/llama-bench -m "$Model" | model | size | params | backend | threads | test | t/s | | -------------- | -------: | ------: | ------- | ------: | ----: | ----------: | | gemma4 ?B Q4_0 | 6.48 GiB | 11.91 B | CPU | 4 | pp512 | 6.94 ± 0.10 | | gemma4 ?B Q4_0 | 6.48 GiB | 11.91 B | CPU | 4 | tg128 | 3.77 ± 0.03 | real 10m16.274s user 40m10.284s sys 0m3.167s ________________________________________________________________________________ ■ CUDAホスト ~/git/llama.cpp$ time build-cuda/bin/llama-bench -ngl 99 -m "$Model" | model | size | params | backend | ngl | test | t/s | | -------------- | -------: | ------: | ------- | --: | ----: | -------------: | | gemma4 ?B Q4_0 | 6.48 GiB | 11.91 B | CUDA | 99 | pp512 | 2507.27 ± 100. | | gemma4 ?B Q4_0 | 6.48 GiB | 11.91 B | CUDA | 99 | tg128 | 53.23 ± 0.07 | real 0m16.226s user 0m15.372s sys 0m0.845s ________________________________________________________________________________ ■ Vulkanホスト ~/git/llama.cpp$ time build-vulkan/bin/llama-bench -ngl 99 -m "$Model" | model | size | params | backend | ngl | test | t/s | | -------------- | -------: | ------: | ------- | --: | ----: | -------------: | | gemma4 ?B Q4_0 | 6.48 GiB | 11.91 B | Vulkan | 99 | pp512 | 1707.19 ± 0.69 | | gemma4 ?B Q4_0 | 6.48 GiB | 11.91 B | Vulkan | 99 | tg128 | 51.26 ± 0.06 | real 0m18.138s user 0m8.368s sys 0m0.969s
03 owa #5b7a147 2026/10/03 16:25 prob:0.0%
Vulkanも試してみた 参考👉 AMDローカルLLMホスティングにおけるROCm vs Vulkan:2026年版ガイド https://www.glukhov.org/ja/llm-hosting/comparisons/amd-rocm-vs-vulkan-llm-hosting/ ■ Vulkanホスト対応でビルド(CPU版ビルド後の環境です) ~/git/llama.cpp$ sudo apt install libvulkan-dev glslc glslang-tools spirv-headers ~/git/llama.cpp$ cmake -B build-vulkan -DGGML_VULKAN=ON ~/git/llama.cpp$ cmake --build build-vulkan --config Release -j 4 ■ コンソールから実行(モデルは同じ) ~/git/llama.cpp$ Model=/data/models/gemma-4-12b-it-qat-q4_0.gguf ~/git/llama.cpp$ build-vulkan/bin/llama-cli -m "$Model" _______________________________________________________ > こんにちは↵ こんにちは!何かお手伝いできることはありますか? 質問や相談など、何でもお気軽にどうぞ。 > /exit↵ _______________________________________________________ これも速い! 約50トークン/秒くらい。