メインコンテンツへスキップ
見出し画像

VRAM12GBで始めるローカルAI駆動開発 ~ミドルレンジGPU x Bonsai2でバイブコーディングを始めよう!~

    こんにちはRcatです。
    少し前にこちらの記事でBonsai2を実際に使用した感想を投稿しました。
    その後しばらく使ったのですが、かなり強力なモデルだと感じます。
    しかもVRAM12GBあれば動くという。

    つまり、今までVRAMが足りなくて諦めていた方々もローカルLLM駆動開発に参戦できるようになりました。

    そこで、今回は改めてBonsai2を使ったミドルレンジローカルAI駆動開発環境の整え方を紹介しようと思います。

    画像

    はじめに

    利用規約

    情報や作品の活用時は事前に利用規約をご確認ください。

    コメントについて

    利用規約のガイドラインを確認の上コメントしてください。
    則っていないコメントは削除します。


    概要

    前提

    この解説では次の環境を前提とします

    • バックエンド

      • CUDA
        つまりはNvidiaのGPUが対象です。RTX5070や4070、3080以上のモデルが対象
        VRAMを最低12GB搭載している必要があります。10GBでもできなくはないですが、エージェントの対応力が下がってしまいます。

    • 推論エンジン

      • llama.cpp (専用フォーク)
        Bonsaiのモデル提供元が配布しているエンジンを直接使います。
        これにより低リソース、高パフォーマンスが期待できます。

    • その他

      • Docker Desktop
        環境構築を容易にするためにDockerを使います。
        これを使わない場合、C++のコンパイラやCUDAツールキットの導入とパス解決など面倒なことが山盛りです。
        しかし、Dockerをつかうとコマンド一発で終わります。楽です。

    • コーディングフレームワーク

      • ZooCode
        こちらの記事で紹介しているAIエージェントフレームワークです。
        Bonsaiの能力的にペアプログラミングが最適なのでこちらを使います。
        OpenHandsでもよいですが、ちょっと荷が重いです。

    対象者

    次のような人が対象です

    • コードは多少読めるけど書けない
      もちろんこれ以上のレベルでもOK

    • Pythonだけかけるけど他言語わからない
      Pythonに限らず、何か1言語はできるけど他はできないという方は特におすすめ。大体やってることはどの言語も同じなので、書くのを任せてしまえば中身は大体読める。わからない部分は書いた本AIに聞けばいい!

    • 開発したことないけどやる気だけはある
      やる気でねじ伏せるのもOK

    • ゲーミングPCを生かしたい
      せっかくのGPUですからぜひ生かしましょう

    下記のような方は向きません

    • コードとか見ずに完全にAIに丸投げしたい
      Bonsaiではまだ力不足です。金払って商用AI使いましょう。

    • GPU?何それ?
      GPU無しでは重すぎてまずまともに扱えません。
      27B Denseなので高性能なiGPUでもきついです。


    Docker Desktopの導入

    Dockerの導入

    公式サイトからインストーラーを落としてインストールするだけの簡単作業。
    個人利用は無料で、一定以上の規模の企業の場合のみ有料です。

    基本的に進められるがまま入れてしまえばOK。
    こんな感じのウィンドウが出るようになればOK

    画像

    寄り道: Docker Desktopって?

    コンテナ型仮想化環境のエンジンです。
    Docker自体が何かをするわけではなく、仮想環境の構築をサポートするためのツール。
    今回は、この中にBonsaiの環境を作って入れます。
    設定ファイルから自動で構築できるので、コマンド一発で環境を再現できるのが最大の強みです。
    今回は設定ファイルを配るので、難しいことを考えずに構築できます。

    もしもDockerを使わない場合、CUDA Toolkitをダウンロードして、C++のコンパイラを入手して、お互いに認識できるように設定したうえでコンパイル実行して、うまくいかなければ自分で解決というかなり面倒な環境構築が要ります。
    しかもインストールするとPCの環境に紐づいちゃうので、バージョンアップとか地味に面倒。
    Dockerならコンテナの中だけの話にできるので、PCの環境を一切汚さないという意味でも非常に強力です。

    しかし、Dockerの場合はCUDA Toolkit入りのコンテナがすでにあるので、それをベースにしてビルドするだけで済みます。
    しかも設定ファイルはllama.cppが用意してくれているので、最低限の環境設定だけで済んでしまうというおまけつき。

    →とりあえず環境構築を見て、Dockerの楽さを体感してください。


    Bonsai環境の構築

    ソースの取得

    Dockerが導入できたら、その中にBonsaiの環境を作っていきます。

    まず最初にBonsaiを管理するための適当なフォルダを作ってください。
    ドキュメントとかCドライブ直下とかどこでもいいです。
    Cドライブ直下かユーザー直下辺りがいいでしょう。

    画像

    次に、ソースコードを落とします。
    下記公式リポジトリをクローンします。

    クローンとかわからん、gitとか知らんという方は、アクセス後`Code`というボタンを押すと一番下にDownload ZIPというのがあるのでこれを選択。

    画像

    ダウンロードしたZIPの中身を先ほど作ったフォルダにコピーすればOK

    画像

    なお、フォルダ名は`llama.cpp`の前提なので、ZIPを落とした人は名前を変えてください。
    git cloneした人はそのままでOKです。

    画像


    設定ファイルの作成

    次にDockerの環境設定ファイルを作成して配置及びモデル定義を作成します。

    画像

    `docker-compose.yaml`の中には下記を記述します。
    ※最下部にコピペエリアがあります。

    画像

    上記から各個人が書き換える場所があります

    • CUDA_DOCKER_ARCH
      120はRTX5000シリーズのことです。それ以外の方は数値が変わります。
      詳しくはこちらを参照してください。
      4000シリーズ: 89
      3000シリーズ: 86
      2000シリーズ: 75

    • volumes
      モデルの配置フォルダを変える場合はここを変更する必要があります
      この先の説明通りにする場合はそのままで大丈夫です

    • ports
      好きなポート番号に変えたい人は、8082の方を書き換えてください。


    環境のビルド

    準備ができたらビルドします。
    といっても簡単です。

    設定ファイルやらソースを入れたフォルダで右クリック。
    ターミナルで開くを押します。

    画像

    こんな感じの黒いのが出るので、下記コマンドをコピペ。

    docker compose build
    画像

    押すとなんか文字がずらーっと出てきますがハッキングされたわけではありません。ビルドログなので安心して眺めてください。
    この時C++のコンパイルが走るので、CPUの性能によってはそこそこ時間がかかります。20m~1H

    画像

    完了するまでに次のモデル入手などを進めてください。
    なお、終わってもまだ使うので閉じないでください。

    最終行が`Built`になっていれば成功!

    画像

    失敗した場合はこの画面のログをGeminiやチャッピーに貼り付けて聞けば何が悪いか教えてくれます。


    モデルの入手と定義

    モデルの入手

    公式のHuggingfaceから持ってきます

    モデルはこちらを使います。
    TQ1はさらに小さいですがその分精度が悪いです。

    画像

    画像を理解するためのビジョンエンコーダーは別ファイルなので、これも落とします。
    Q8とFP16があるので、好きな方でOK。
    この後紹介する設定ファイルはQ8の前提です。

    画像

    モデル定義の作成

    画像

    下記内容でモデル定義(models.ini)を作成します。
    ※最下部にコピペエリア及び完全な状態のデータがあります。
    ※塗りつぶし部はより快適なオプションなのでなくでも大丈夫です。

    画像

    ポイント

    • コンテキスト長は128k
      ギリギリVRAM12Gにおさまりつつ、エージェントとして必要な長さです。
      もしVRAMからあふれるようならここを112kや96kに落とします。
      最低でも64k無いとエージェントとしては使い物になりませんので下げ過ぎないように。

    • ビジョンエンコーダーはVRAMに載せない。
      600MB程度ですが、これはRAMに載せることでVRAMは節約します

    • KVキャッシュはQ8量子化
      これをしないと+5GBのVRAMが要ります。劣化はあまりありません。
      やろうと思えばQ4にできますが、劣化しますのでお勧めしません。


    Bonsaiを起動する

    コンテナの起動

    Dockerコンテナのビルドが完了したらいよいよ立ち上げです。
    ターミナルに下記コマンドを打ち込みます。

    docker compose up -d

    はい、終わりです。簡単★!

    画像

    コンテナが立ち上がるとこのようにDocker Desktopのcontainersに表示されます。
    ※画像だと一番下

    画像

    コンテナが立ち上がらない場合、多くの場合はポートが競合していたり、設定ファイルに問題があって読み込みエラーになっていることがあります。
    コンテナをクリックするとログがみられるので、確認しましょう。

    Bonsaiを止める方法

    いくつか終了方法があります。

    • Docker Desktopから止める
      コンテナ名横の■ボタンを押すことで停止できます。
      再起動するには▶に変わったボタンを押すことで再起動できます。
      こっちのほうが楽なのでお勧めです。

    • ターミナルコマンドで解体する
      下記コマンドを打つとコンテナを解体して終了します。
      `docker compose down`
      解体なので、Docker desktopの一覧から消えます。
      再起動するにはもう一度upのコマンドを打ちます。

    今回のコンテナは明示的に止めなければ自動起動するので、Docker Desktopが起動すると自動でBonsaiコンテナも起動します。
    →DockerDesktopをWindows起動時に設定しておくと、Bonsaiも起動します。
    困る方はDesktopの方で必ず停止しておきましょう。
    ※起動だけではメモリは使用しませんのでその点は安心してください。Bonsaiで生成しようとしたときにはじめてVRAMにロードされます。


    Bonsaiを使ってみる

    チャットする

    下記にアクセスします。ポート変えた人はそこ変えてください。

    http://localhost:8082

    これはあなたのBonsaiにつながる特殊なURLです。
    下記のWEB UIが表示できたなら環境構築成功です。

    画像

    チャットしてみます。
    ※初回のロードは数分かります(WinとExt4の関係なのでスペックやSSD云々は関係なくかかります。)

    画像

    読み込みが完了すると答えが返ってきます。
    タスクマネージャーで自分のGPUが仕事していることを確認しましょう!

    画像

    チャットだけならここで行えますので、外部に出したくないプライベートな会話はここでBonsaiと行うこともできます。

    VRAMを解放する

    使い終わったときに明示的にVRAMを空けるにはいくつか方法があります

    • コンテナを終了するか停止する
      上記のdownコマンドか、■ボタンで停止するとVRAMが解放されます

    • WEB UIからアンロードする
      先ほどのチャット画面からアンロードを行うことで解放できます

    • 自動解放を設定する
      設定ファイルに一定時間以上使用しなかった場合はメモリを解放するオプションを指定することで、自動でアンロードします。
      ※設定ファイルのフル版で解説しています。


    WEB UIではモデル一覧から電源を切るマークを押すとアンロードできます

    画像

    どのくらい早く動くのか?

    RTX5070 Tiの場合です。
    このくらいの場合は待ち時間はほとんどなく、出力も爆速というレベルです。

    画像
    画像

    上の方が入力した指示の解釈処理速度、下が出力速度です。

    上がGPUのTensor演算性能、下がVRAMの転送速度に依存します。
    なので、大体RTX4090とRTX5070tiは同じくらいになります。
    ※実際に両方で動かしたので実話です。


    ZooCodeを導入して接続する

    さて、Bonsaiモデルの準備が整いましたので、ここからは開発環境を整えて、夢の無料AIコーディング環境を作っていきます。

    VSCodeの導入

    コード書くならVS Code。今回はこのエディタの拡張機能でAI駆動開発を行うため導入してください

    こんな感じのが起動できればOK

    画像

    日本語化などの方法はたくさん出回ってますので、ご自身で調べてみてください。


    拡張機能の導入

    AI駆動の根幹となる機能を導入します。

    • 左側の四角が四つあるマークが拡張機能ですので押します。

    • `zoocode`で検索します。

    • シマウマのアイコンをクリックします。

    • インストールを押します

    画像

    インストールが完了すると、左側にシマウマのマークが増えますのでクリックすると起動します。

    画像

    AI駆動開発環境の設定をする

    ZooCodeの設定を行います。

    設定を開き、新規プロファイルを好きな名前で作成して以下のようにします。
    APIキーは適当でOK`neko`などw
    正しく通信ができると、モデルのところにBonsaiの名前が出ます。

    画像

    少し下に行ってこちらも設定。
    特にコンテキストウィンドウはBonsaiの設定に合わせた数値にしてください。→もし小さくした場合はここも小さくします。
    手順通りビジョンエンコーダーを落とした場合は画像も理解できますのでサポートにチェック。

    画像

    飛ばしてコンテキスト

    Diff一致は90%くらいにしておくと安定します。
    一番下の圧縮は80%くらいにしてください。

    画像

    それ以外はそのままか、自分の好きなようにしていただいて結構です。
    これで準備完了です。


    AI駆動開発を行う

    ワークスペースを選んで起動する

    まず最初にどこで作業するか決めます。
    適当なところにフォルダを作り、右クリック

    画像

    Codeで開くをクリックすると、VS Codeでそのフォルダを作業スペースと認識した状態で開けます。
    →AIに作業させる以上、このフォルダで作業してくださいと明示するために必要な手順です。

    こんな感じで開きます

    画像

    簡単なプログラムを作ってみる

    今回は例ですのですごく簡単なものを作ってもらおうと思います。

    まずはモードを変えます。
    今回は書いてもらうので`Code`モードにしましょう

    画像

    入力する指示はこちらです

    JavaScriptで簡単なTODOリスト作って

    # 概要
    シングルファイルの簡単なTODOリスト

    # 機能
    - TODOリストにタスクを追加できる
    - 既存のタスクの状態を、未着手、着手、完了に変更できる

    # 制約
    単一のHTMLファイルにすべて書き込むこと
    ブラウザ上で動作すること
    フレームワークは使わずにプレーンなJSで行うこと

    # スコープ
    データの永続化は行わず、メモリ上に保持するだけとする

    指示をチャット欄に入力したら送信します。
    APIリクエストと出ている間にGPU使用率が上昇すればOK

    画像

    少しすると書き始めました

    画像

    書き終わると、保存してよいか聞かれるので、保存をクリック。

    画像

    ファイルが出来上がりました

    画像

    ダブルクリックで開いてみましょう。

    今回はこんなのができました。

    画像

    正常に動くか試します。
    いい感じですね。ちゃんと動いてますし、UIもかっこいいです!

    画像

    ※これが大体2分かからずに出来上がりました

    応用: OSSを説明させる

    AIが使えるようになると、自分では読み解けないOSSへ手を出すことが可能になります。
    例えば、Bonsaiのソースコードを開き、ASKモードで`説明してください`と問いかけることで、このプログラムはいったい何者なのか調査してくれます。

    画像

    少しの調査ののち、結果を報告してくれました。
    これは概要的な使い方ですが、ある機能に着目したい場合や、エラーメッセージなどを渡すことで、コードを探索して原因を突き止められることがあります。
    そのまま修正して動けば御の字ですね。
    ※llama.cppプロジェクトはAIによるPRやイシューは禁止なので、仮に見つけたとしても自分の言葉で説明できなければ投稿は控えましょう。

    画像

    もっと深くZooCodeを使いこなす

    こちらの記事でもっと詳しい使い方を解説しています。
    併せてご確認ください

    仕様駆動開発で安定した開発をする

    こちらの記事では、今回Bonsaiに入力した簡単な説明の部分を、詳細な仕様として作りこむことで、理想のアプリを作ってもらうための方法を解説しています。
    指示があいまいだったり、悪いと思わぬ成果物が出来上がってしまいます。
    理想のものを作るためにも、仕様をしっかり決めることをお勧めします。

    ※丸投げはBonsaiにはまだ荷が重いので、簡単なものならできますが少し複雑になってくると迷子になりますので注意。

    VSCodeを使わずに、24H開発させ続けたい

    丸投げ環境になってしまいますので、Bonsaiではどこまで耐えるか未知数ですが、OpenHands 開発環境もおすすめです。
    WEB UIから指示を出すので、VPNと合わせれば外出先からもスマホで指示を出して開発させ続けることも可能です。


    トラブルシューティング

    めっちゃ遅いです

    VRAM溢れてませんか?
    ほんの少しでも共有GPUメモリにあふれた瞬間100倍以上遅くなることもあります。

    画像

    解決策:
    VRAMを使用しているソフトを落としてください。
    ブラウザなどでハードウェアアクセラレータが有効になっているとVRAMを使います。
    12GBのモデルではかなりギリギリなので、それでもあふれる場合はコンテキスト長を少しだけ下げてください。

    コンテナが起動しません

    よくあるのがポートの競合。
    8082なんて使ってないと思いますが、あえてずらしてる方がいれば当たるのかも?

    次に設定ファイルの不備。これもあるあるで起動できなくなります。
    モデルファイルのパスが間違っているときは、モデル読み込みの時にエラーになります。

    画像

    Docker使いたくないです

    本家llama.cppのビルドガイドに従えばビルドできます。
    Visual StudioやCuda Toolkitなどいろいろ要るのでお勧めしませんので聞かれても絶対回答しません。
    この面倒を回避できるのがDockerの魅力なのです

    モデル読み込みが遅いです

    1、2分は普通です。これはWindowsとext4の変換オーバーヘッドなので諦めてください。いやならDockerをやめて面倒ビルドするか、WSL上のボリュームにモデルを格納してマウントしてください。

    思った作品ができません

    イメージを完全に伝えきれていますか?
    少しでも伝え漏れがあると勝手にAIが「いいかんじ」にしてしまいます。それがあなたにとっていい感じとは限らないのです。
    仕様駆動開発の記事を参考に詰めてください

    依頼したプログラムが全く動きません

    Bonsaiの許容能力をオーバーしている可能性があります。
    せいぜい300行程度の仕様書なら実装できますが、それ以上複雑なものはやり切れない可能性があります。

    進まなくなってしまいました

    特に広スコープでコンテキストが短いと起こります。情報量が多すぎる割には記憶に使える領域が狭いので、これ以上どうしようもない状態に陥っています。
    作業範囲を小さくして渡しなおしましょう。

    ツール呼び出しをしないので何もできません

    思考で出力トークン上限に達している可能性があります。
    指示を簡潔にしたり、タスクを分割して考える量を減らすか、一度の出力上限設定をあげてください。


    まとめ

    今回はBonsai2を活用してローカルAI駆動開発環境を構築する方法を紹介しました。

    今までは使えるレベルのモデルは30Bで、MoEならcpu-moeで逃がせば何とか動きましたが、MoEだとどうしても能力がギリギリで、ツール呼び出し失敗はあるあるでした。
    安定しているDenseは4Bitでも15GB前後で大きすぎてはいらないというジレンマ。3Bitでは知能がちょっとね…。

    そこに現れたのがBonsai2です。
    Denseの安定性と能力をそこそこ保ったうえで7GB程度になってくれたおかげで運用の幅が広がりました。

    これでAI専用PCは100B級モデルに専念させて、ゲーム&開発PCはBonsaiとペアプログラミングができるようになりました。
    マジ最高ですね。

    それではまたお会いしましょう。


    リンク集

    感想投稿フォーム

    コメントは公開で恥ずかしい!! Rcatだけに送りたい人向け

    メンバーシップの説明

    Docker-Composeマネージャー

    【ローカルLLM】バイブコーディング完全ガイド

    【ローカルLLM】ローカルLLM活用三本柱

    【ローカルLLM】仕様駆動開発で、下流を丸投げ!

    【ローカルLLM】OpenHandsで丸投げ開発

    【ローカルLLM】自己成長AIエージェントHermesをホスト

    【ローカルLLM】FastFlowLMでRyzan AIのNPUを叩く

    【ローカルLLM】完全ローカルでAndroidアプリを開発!?

    ミニPCにLinuxをインストール


    メンバーシップ特典

     
     
    モノづくりが趣味。 "売ってないなら自分で作ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワーク 全部やります。 記事執筆はAI不使用。 ご連絡や利用規約はプロフィール記事参照。

    あなたへのおすすめ