メむンコンテンツぞスキップ
芋出し画像

【配垃】自分専甚 LLM APIサヌバヌ Ver2 Llama-cppで無制限のAPI

    こんにちはRcatです。
    前回の蚘事で、CPU挔算でもAIをホストしたしたが、こちらの蚘事でVRAMモンスタヌマシンを手に入れたしたので、耇数のモデルを同時に読み蟌んでロヌドできるように倉曎したしたので玹介したす。


    はじめに

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください。
    則っおいないコメントは削陀したす。


    抂芁

    ゚ッゞAIっお䜕?

    ゚ッゞずは先端のこずです。぀たり倧きなサヌバヌではなく、個々の端末の䞭で動くAIずいう意味になりたす。
    ずはいえ、さすがにモバむル端末で動かすずいうのはなかなかなので、今回は個人が持っおいるパ゜コンを゚ッゞず定矩したす。

    スマホでも最近は動きたすが、それなりに高性胜なスマヌトフォンでもさすがに倚少のストレスがありたす。
    そもそもバッテリヌをバカ食いするので、スマホで動かす意味が今のずころはあたりない気がしたす。


    仕様

    今回䜜成したAIサヌバヌの仕様は次の通りです。

    • 蚀語

      • Python

    • OS

      • Windows11

      • Linux (Ubuntu)

    • むンタヌフェヌス

      • WEB API

      • WEBブラりザ

      • コマンドラむン (耇数ホストのサヌバヌずするため廃止)

    • 察応プロセッサ

      • CPU (Intel N100, Ryzen5 3600, Ryzen AI MAX+395で確認枈み)

      • GPU (CUDA, RCOmで確認枈み)

      • (ラむブラリ的にはNPUも行けるらしい)

    • ラむブラリ

      • llama-cpp-python

    • モデル

    • その他

      • スケヌルアりト可胜
        同じロヌカルネットワヌク䞊に、このプログラムを実行しおいるパ゜コンがあれば、jobを移譲するこずが可胜です。

      • 履歎の捏造が可胜
        チャット履歎を捏造するこずで回答の方向を誘導できたす

      • KVキャッシュの保持が可胜
        長文システムプロンプトのKVキャッシュを保持するこずで、2回目以降の読み蟌み時間が飛躍的に短くなりたす。




    機胜玹介

    たずは本ツヌルでできるこずを玹介したす。

    コマンドラむンを䜿ったチャット

    この機胜は同時ホストのため廃止したした。

    Webサヌバヌ化しお䜿う

    読み蟌むモデルの蚭定ファむルを䜜成埌、匕数で指定するこずで耇数ホストで実行するこずができたす。

    rcat@rcat-EVO-X2:/Rcat_Service/Script/AI_Server/llama_cpp_server$ ./start.sh
    2025-10-13 13:55:49,683 INFO llama_cpp_server モデルをロヌド䞭: Qwen3-30B-A3B-Instruct
    llama_context: n_ctx_per_seq (8192) < n_ctx_train (262144) -- the full capacity of the model will not be utilized
    2025-10-13 13:55:50,849 INFO llama_cpp_server Qwen3-30B-A3B-Instructのロヌドが完了したした。
    2025-10-13 13:55:50,849 INFO llama_cpp_server モデルをロヌド䞭: gemma-3-4b
    llama_context: n_ctx_per_seq (8192) < n_ctx_train (131072) -- the full capacity of the model will not be utilized
    llama_kv_cache_unified_iswa: using full-size SWA cache (ref: https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055)
    2025-10-13 13:55:51,156 INFO llama_cpp_server gemma-3-4bのロヌドが完了したした。
    2025-10-13 13:55:51,156 INFO llama_cpp_server 自身のPID (10786) に察しおCPU䜿甚率を80% (cpulimitタヌゲット: 2560%)に制限 したす...
    2025-10-13 13:55:51,157 INFO llama_cpp_server cpulimitコマンドが正垞に開始されたした。
    Process 10786 detected
     * Serving Flask app 'llama_cpp_server'
     * Debug mode: off
    WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
     * Running on all addresses (0.0.0.0)
     * Running on http://127.0.0.1:25610
     * Running on http://192.168.0.250:25610
    Press CTRL+C to quit
    M-SEARCHサヌバヌ起動
    サヌビス䞀芧
    urn:rcat999:service:llmnode:1 / 192.168.0.250:25610

    "Running on http://XXX.XXX.XXX.XXX:XX"ずいう衚蚘が出おくるので、ここにアクセスすればブラりザから䜿えたす。

    python3 llama_cpp_server.py -s --port 25610 --model model.json --priority 100 --cpu 80 --cpucore 32 --master 

    匕数玹介

    • --port
      ポヌト番号を指定したす。省略可胜です。

    • --master
      マスタヌサヌバヌずしお起動したす。これを指定したサヌバヌだけが倖郚のノヌドに察しお移譲する機胜が䜿えたす。

    • --priority
      分散凊理時の優先順䜍。小さい方が優先床が高く、キュヌの条件が同じ堎合の遞択に䜿甚される。詳しくは分散凊理ぞ。

    • --cpu
      Linuxのみ。cpulimitコマンドを䜿っおCPU䜿甚率を制限したす。--cpucoreオプションず䜵甚。省略可胜

    • --cpucore
      --cpuずセット。CPUのコア数を指定。入力を間違えるず正確にCPU䜿甚率制限できない。コア数ずいうかスレッド数らしい。

    WEB画面で䜿う

    サヌバヌ化した状態でアクセスするず以䞋のような画面になりたす。ここに入力するこずで、簡単にAIずチャットするこずができたす。
    前回はAIに䞞投げしたしたが、今回はvue3ずBootstrapを䜿っお自分で䜜りたした。
    v-for匷すぎたせん?

    画像
    • 蚭定

      • モデル
        耇数読み蟌んでいる堎合はここで遞択できたす

      • 枩床
        回答の倚様性を制埡したす。1が倚様、0が厳密です

      • 最倧トヌクン
        応答の長さを制限したす。

    • 入力

      • システムプロンプト
        䞀番最初に䞎える指瀺です。基本的にタスクはここに蚘述したす

      • ナヌザヌプロンプト
        任意入力欄です。
        翻蚳なら察象の文章を入れる堎所ずなりたす

    • 䌚話履歎
      履歎を捏造しお回答の方向性を制埡したす。
      履歎の䞭のロヌルをダブルクリックするず消せたす。

      • 圹割
        履歎に远加する発蚀者を遞択

      • 内容
        発蚀/回答内容を捏造

      • 远加
        蚭定した内容で履歎を䜜成

    • 送信
      履歎及び各皮プロンプトを送信したす。

    • 応答

      • 凊理時間
        凊理にかかった合蚈時間です

      • 初期トヌクン
        最初の1文字が出るたでにかかった時間。
        指瀺が長いほど理解するのに時間がかかり、この倀が増加する

      • 出力速床
        人間的にわかりやすいように毎秒䜕文字の出力速床だったかを衚瀺したす。

      • モデル
        回答に䜿甚されたモデル名です。

      • 応答結果
        最終的なAIの回答です




    APIを䜿う

    䞀番の目的はこれでしょう。
    これを䜿うこずで完党にロヌカルで別のプログラムからAIを呌び出すこずができたす。

    チャットAPI

    チャットをするためのcgiです。
    必芁なパラメヌタヌをJSONボディずしおPOSTしたす。

    ゚ンドポむント /CGI_DoChat

    パラメヌタヌは党お任意です。必芁なずころだけ指定するようにしおください。モデルを省略あるいは間違えるず蚭定ファむルで最初に定矩されおいるものになりたす。

    {
    "model":モデル名
    "system_prompt": "システムプロンプト"
    "user_prompt": "ナヌザヌプロンプト"
    "max_tokens": int #最倧トヌクン数 8192
    "temperature": float #枩床パラメヌタヌ 1.0
    "top_p": float #トップPパラメヌタヌ 0.95
    "top_k": float #トップKパラメヌタヌ 40
    "id": str  #JOBID /Get_idで新芏発行できる。 途䞭経過の確認をする堎合に必芁
    "history" list  #捏造甚䌚話履歎 }

    Pythonでの実行䟋

    >py
    Python 3.11.6 (tags/v3.11.6:8b6ee5b, Oct  2 2023, 14:57:12) [MSC v.1935 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> body = {
    ... "system_prompt":"ナヌザヌの入力を䞭囜語に翻蚳しおください",
    ... "user_prompt":"ねこはもふもふで癒されたす",
    ... "model":"Qwen3-30B-A3B-Instruct"
    ... }
    >>> resp = requests.post(url="http://192.168.0.250:25610/CGI_DoChat",json=body)
    >>> print(resp.json().get("response"))
    猫毛茞茞的让人感到治愈。
    >>> import json
    >>> json.dumps(resp.json(),indent=2,ensure_ascii=False)
    '{\n  "first": 0.33699536323547363,\n  "model": "Qwen3-30B-A3B-Instruct",\n  "response": "猫毛茞茞的让人感到治愈。",\n  "status": true,\n  "time": 0.5171315670013428,\n  "tokens": 56\n}'
    >>>

    応答もJSONです。
    responseキヌの䞭にAIの応答の文字列が入っおいたす。それ以倖は凊理時間やトヌクンなどが入っおいたす。この堎合は0.5秒ですね。

    履歎を捏造する堎合
    履歎の圢匏はリストのリストです。

    >>> data = {
    ... "max_tokens": 1024,
    ... "user_prompt": "最初なんお䌚話始めたんだっけ?",
    ... "history":[
    ... ["user","ねこっおかわいいよね"],
    ... ["assistant","わたしはネズミのほうが奜きなのでそうは思いたせん"],
    ... ["user","そうですか、ではこの話は終わりですね"],
    ... ["assistant","ええ、そうしたしょう"]
    ... ]
    ... }
    >>>
    >>> resp = requests.post("http://192.168.0.4:25610/CGI_DoChat",json=data)
    >>> resp.json()
    {'first': 0.18724346160888672, 'model': 'Qwen3-30B-A3B-Instruct', 'response': 'あなたが「ねこっおかわいいよね」ず蚀っお、わたしは「わたしはネズミのほうが奜きなのでそうは思いたせん」ず答えたした。', 'status': True, 'time': 0.7967422008514404, 'tokens': 180}


    情報取埗API

    情報取埗APIは混雑状況やホスト䞭のモデル䞀芧が返されるAPIです。

    画像

    ちなみにですが、AIの凊理は重いので䞊列実行はできたせん。
    耇数同時にリク゚ストを受け付けた堎合はキュヌに栌玍し、先頭から順番に凊理しおいくような仕組みになっおいたす。
    他のノヌドがある堎合は、䞀番空いおるずころに委譲したす。空いおなければ自分で実行ずいう感じです。キュヌの数が同じになるように動䜜したす。
    10個以䞊貯たっおくるず過負荷ずいうこずで゚ラヌを返すようになっおいたす。




    導入方法

    パッケヌゞ内容の確認

    配垃は再䞋郚で行っおおりたす。
    パッケヌゞ内容は以䞋のようになっおいたす。

    画像

    モデルの配眮

    たず、最初にAIのモデルを甚意しおください。
    ダりンロヌドできたらこのフォルダ、あるいは奜きなずころに眮いおください。

    モデルの登録

    モデルをダりンロヌドしたら読み蟌み定矩ファむルを䜜成しおください。
    json圢匏で、名前がキヌの蟞曞です。ずりあえず珟時点で私が䜿っおいるものを入れおおきたす。

    画像
    • path
      実際の栌玍先

    • context
      有効にするコンテキスト長

    • device
      cpuかgpu

    • gpulayers
      gpuの堎合は-1、あるいは読み蟌むレむダヌ数を指定。cpuなら0

    モデルはHuggigFaceから萜ずしたす。
    䟋えば以䞋のリンクはGemma3 のGGUFを怜玢した䟋です。

    蚭定倉数の倉曎

    ゜ヌス本䜓の䞊のほうに定数がありたす。䞀郚の動䜜はここを参照しお動䜜するため、適切に倉曎が必芁です

    画像
    • CACHE_THRESHOLD
      キャッシュ化するシステムプロンプトの最小文字数
      この文字数を超えるシステムプロンプトのKVキャッシュは保持され、2回目以降の応答が高速になりたす。

    • CACHE_LIFECYCLE_SECONDS
      KVキャッシュの最倧有効期間 (秒)
      それなりにデヌタサむズがあるので、䜿われおいないものは消したす。

    • CACHE_ALLOWED_MEMORY
      Linux限定。
      このプロセスが占拠しおもよい最倧メモリ(GB)
      これを超えるずKVキャッシュは期限にかかわらず叀いものから削陀される
      (CPU挔算の堎合はモデルも含たれるので泚意)

    • MAX_QUEUE_COMT
      䞊んでよい最倧キュヌ数。これを超えるず503を返す

    応答の高速化に぀いおはこちらをご芧ください。圧倒的な差がありたす。

    Pythonのむンストヌル方法

    本䜜はPythonでできおいたすので、必ず導入をしおください

    環境の構築

    Linuxの堎合はstart.shを実行すれば自動で仮想環境が䜜成され、ラむブラリのむンストヌルが始たりたす。
    このバヌゞョンではLinuxのみで動䜜確認をしおいたす。

    GPUを䜿う堎合

    先ほどの蚘事でも玹介しおいたすが、GPUを䜿う堎合は自分でラむブラリをビルドする必芁がありたす。ビルド方法に぀きたしおは、䞊の蚘事で玹介しおいたす。
    先に自動構築しおしたった堎合は、必ず匷制再むンストヌル指瀺でビルドずむンストヌルを行いたしょう。

    ROCm(Radeon)で䜿う堎合

    こちらの蚘事ではRyzen AI MAX+ 395の内蔵GPUであるRadeon 8060Sを䜿っおいたす。
    ビルド方法に関しおもこちらです。䜿い方次第ではRTX4070を超えるらしい化け物です。


    たずめ

    今回は量子化LLMを䜿った個人AIサヌバヌを䜜成したした。
    ずうずう自宅で垞時LLMが皌働する時代が来たしたね。
    これで利甚芏玄を気にするこずなくどんな内容でも入力が可胜です!
    適床にモラルを守り぀぀䜿いたしょう。


    配垃情報

    配垃URL

    以䞋のURLより配垃しおいたす。
    利甚芏玄に同意の䞊ご利甚ください。

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=ロヌカル゚ッゞAIサヌバヌ

    リンク集

    【Linux】Systemd远加支揎スクリプト

    【Windows】タスクスケゞュヌラヌの远加方法

    LoggingBOTの導入方法

    ミニPCにLinuxをむンストヌル


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ