24GB メモリ搭載の M4 でローカルモデルを実行する場合について

2026/05/11 8:09

24GB メモリ搭載の M4 でローカルモデルを実行する場合について

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

24GB の MacBook Pro かつインターネットに接続できない環境での厳格なテストにより、著者はローカル LLL開発において Qwen 3.5-9B モデルが最適な選択肢であると特定し、米国テック大手への依存を効果的に軽減しました。Pi および OpenCode などの環境を緊密なメモリ制限内(

q4_k_s
量化を使用)で実行することで、文脈維持能力を保ちつつ約40トークン/秒というバランスの取れた速度を実現しました。Gemma のようなより重いモデルや特定バリエーションはツール使用に苦慮しましたが、Qwen は Elixir警告の解決など実用的なコーディングタスクに対して実行可能であることが証明されました。このセットアップはインタラクティブなワークフローで優れていますが、自律的な複雑なタスクや Git rebase の衝突解決時のような操作における稀なターミナルのフリーズといった制限に直面しています。究極的には、このアプローチは特定のランタイム構成(LM Studio, Pi, OpenCode)を用いて消費者向けハードウェアで実行可能な能力のある独立した AI 支援が可能であり、安全かつコスト効率的な開発環境を構築できることを示しました。

本文

ローカル AI モデルの活用と実験レポート:インターネット不要で、あなたの Mac で動く研究・計画・コーディングアシスタントへようこそ

少しの間、ローカルで動作するモデルの実験を断続的に行ってきました。そしてついに、「まあまあの性能で機能する」設定を見出しました。もちろん、現在の最先端(SOTA: State of the Art)モデルの出力には及びません。しかし、「インターネット接続なしに、ローカルでの基本的なタスク実行、調査、計画を行うことができる」というワクワク感が、その性能差を十分に補って余りあるものです!特に重要なのは、インターネット接続不要という点。加えて、大規模な米国のテクノロジー企業への依存度を、たとえ僅かでも減らせるという意味でも価値があります。

ただし正直に申せば、この仕組みを設定するのは容易ではありませんでした。まずモデルを実行するプラットフォームを選択する必要があります:Ollamallama.cpp、そして LM Studio のいずれかです。それぞれ独自の癖や制限があり、かつ提供されるモデルの種類も異なります。さらに当然のように、モデルの選択へと突き進みます。

ここでは、「メモリ内に収まりつつ、通常の Electron アプリなどの多様なタスクを同時に実行できる余裕(ヘッドルーム)があり、最低でも 64K のコンテキストウィンドウを持ち、理想を言えば 128K またはそれ以上」という条件を満たすモデルを選ぶ必要があります。最近では Qwen 3.6 Q3、GPT-OSS 20B、Devstral Small 24B などを実際に試しましたが、理論上はメモリに収まりますが、実際には使い物にならなかったという結果でした。一方、Gemma 4B は動作しますが、ツールの活用においては苦戦していました。

加えて、微調整すべき設定オプションの数々は膨大です。Temperature という比較的名なものから、K Cache Quantization Type のようなやや難解なオプションまであります。多くのツールには基本的な推奨設定セットが付属していますが、最適な設定は「思考(Reasoning)機能を有効にするか否か」など、状況によって大きく異なります!

以下に、私が最終的に動作させ、比較的良好な結果を得た Qwen 3.5-9B (4bit 量化版) の例を紹介します。


Qwen 3.5-9B (4b quant):LM Studio を使用した場合の成果

HuggingFace リンクで入手可能な

qwen3.5-9b@q4_k_s
は、私の手元では最も良好な結果を出しました。

  • 推論速度: 約 40 トークン/秒
  • 思考機能 (Thinking): 有効化済み
  • ツール活用: 成功裏に動作
  • コンテキストウィンドウ: 128K
  • 実行環境: LM Studio

SOTA モデルと比較すると、些細なことに注意を逸しやすく、場合によってはループに陥ったり、指示の意味を誤解したりすることがあります。しかし、24GB RAM の MacBook Pro を使用しながらも、他の多くのアプリやタスクと同時進行で稼働できるという点において、その実用性は驚くほど高いものです!

思考モードおよびコーディング作業向けの推奨設定

以下のパラメータが、「思考モード」启用およびコーディングタスク(例:WebDev)に対して最適です。

  • temperature=0.6
  • top_p=0.95
  • top_k=20
  • min_p=0.0
  • presence_penalty=0.0
  • repetition_penalty=1.0

思考機能を有効にするには、モデルを選択した後、「設定(Configuration)」タブの底部にある「Inference」セクションへスクロールし、プロンプトテンプレートに以下の行を追加してください。

{%- set enable_thinking = true %}

私はこのモデルを PiOpenCode の両方の環境で利用してきましたが、どちらが優れているか結論を出すには至っていません。Pi は反応が少し速く感じられますが、「ハネス(ツールセット)自体が構築され、高度なカスタマイズが可能である」というコンセプトに敬意を表しつつも、「合理的なデフォルト設定」が付属していないことには正直不満を感じています。結局のところ、Pi の環境設定を完璧にするのに費やす時間の方が、実際にプロジェクトを進めることに割く時間よりも多くなる可能性があります!


Pi 環境の設定例 (
~/.pi/agent/models.json
)

思考プロセスを可視化させずに使用する場合は、

~/.pi/agent/settings.json
hideThinkingBlock: true
を追加することを推奨します。

{
  "providers": {
    "lmstudio": {
      "baseUrl": "http://localhost:1234/v1",
      "api": "openai-completions",
      "apiKey": "lm-studio",
      "models": [
        {
          "id": "qwen3.5-9b@q4_k_s",
          "reasoning": true,
          "compat": { "thinkingFormat": "qwen-chat-template" }
        }
      ]
    }
  }
}

OpenCode 環境の設定例 (
~/.config/opencode/opencode.json
)

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "lmstudio": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "LM Studio (local)",
      "options": {
        "baseURL": "http://127.0.0.1:1234/v1"
      },
      "models": {
        "qwen3.5-9b@q4_k_s": {
          "name": "Qwen 3.5 9B Q4_K_S",
          "tools": true,
          "context_length": 131072,
          "max_tokens": 32768
        }
      }
    }
  },
  "model": "lmstudio/qwen3.5-9b@q4_k_s"
}

SOTA モデルとの比較

Qwen 3.5 9B (Q4) といったモデルは、SOTA モデルのように長期間にわたって複雑な問題を独立して解決できる能力には及びません。一度に整個アプリケーションを構築させるような依頼を出すのは非効率的であり、徒労(太ももを燃やす)に終わる可能性が高いです。

機能するのは、むしろより対話的なワークフローです。モデルと段階を追って明確にコミュニケーションを取り、十分なガイダンスを与えることで成果を出せます。多くの人が「わざわざ監視しながら作業させるのが pointless (無駄)」だと感じるかもしれませんが、私はそれが逆に私の関与度を高めるのに役立ったと感じています。SOTA モデルの欠点は、認知努力をすべて外部化する行為があまりにも容易にできてしまうことです。あなたがそれを防ごうと努めてもなお、その傾向は強く残ります。

ローカルモデルを使用する場合は、私自身が思考や計画の大部分を引き受ける必要がありますし、指示もより具体的になる必要があります。しかしながら、それは依然として優秀な研究アシスタントであり、議論の相棒であるラバードルック(Rubber Duck)であり、プログラミング言語の詳細やコマンドライン操作に関する知識を瞬時に記憶するサヴァントとして機能します。

大手 AI 企業たちが謳うような「10 倍もの生産性向上」は期待できませんが、何事かはあり、非常に興味深いものです。以下に、何がうまく機能し、何がダメかを理解するためのいくつかの基本的な例を示します。


エピソード 1:Elixir のリンター Credo のバージョン更新

Credo を最新版にアップデートすると、コード中に警告が出力されました。実験目的として Qwen に確認を依頼しました。

私:

mix credo --strict
を実行し、警告を解消する方法を提案してください。ただしコードそのものは編集しないでください。

Qwen の回答:

Credo Warnings
テストファイルに 4 つの警告が見つかりました。問題点は、リストが空でないかどうかを確認するために length/1 を使用している点です。Credo は、代わりに空リストと比較することを推奨しています。
【警告箇所】
1. test/jola_dev_web/controllers/blog_controller_test.exs:11
   - assert length(conn.assigns.posts) > 0
2. ...
3. ...
4. ...
【修正方法】
各 "length(list) > 0" を "list != []" に置き換えてください:

blog_controller_test.exs:
# Line 11
assert conn.assigns.posts != []
# Line 22
assert conn.assigns.posts != []
blog_test.exs:
# Line 10
assert posts != []
# Line 23
assert tags != []
これは Elixir の慣例に合致し、リストの長さを実際に計算するオーバーヘッドを回避できます。

Qwen に編集処理を依頼すると、4 つのパラレルな修正を非常にクリーンに行ってくれました。全体として見れば、ターミナルとエディタを行き来して行番号を確認し、手動で修正することも可能だった極めて単純なタスクでした。努力の差は大きくありませんが、利便性は確かにありました。


エピソード 2:Dependabot の Git メージ解決支援

いくつかのパッケージ依存関係を更新した結果、Dependabot から生じた PR に Git コンフリクトが発生しました。しかし Dependabot が再ベース(rebase)を拒否していました。私はそれをプルして、手動で再ベースを実行し、Qwen に確認を依頼しました。これは非常にシンプルなコンフリクトでした:それぞれの新しいバージョンを採用すればよいだけですが、モデルもその認識を示してくれました。

「私はコンフリクトを確認しています。状況は以下の通りです: HEAD(現在のブランチ): sentry 13.0.1, tailwind 0.3.1 他の側(再ベースしようとするコミット): sentry 12.0.3, tailwind 0.4.1 依存関係のアップデートが分岐しています。以下のいずれかの選択肢をご利用ください: オプション 1: 双方の更新を採用する(推奨)

  • HEAD から sentry 13.0.1 を保持
  • 他の側から tailwind 0.4.1 を保持
  • これにより、両方の依存関係の最新バージョンが入手できます。 オプション 2: sentry の更新のみを採用
  • sentry 13.0.1 を保持
  • tailwind 0.3.1 を保持 オプション 3: tailwind の更新のみを採用
  • sentry 12.0.3 を保持
  • tailwind 0.4.1 を保持 どういったアプローチを選択しますか?」

しかし、実際に変更を行うように依頼すると、編集自体を行わず、単に変更を追記して再ベースを続行しようとし、コンフリクトマーカーがそのまま残ったままです。

「思考中:ユーザーは両方の更新(sentry 13.0.1 と tailwind 0.4.1)を採用したいとのこと。HEAD のバージョン(sentry)と他の側バージョン(tailwind)を保持してコンフリクトを解決し、git add を使用してファイルをステージングします。」

そして、

git rebase --continue
がエディタを開くことを認識できず、OpenCode がその後フリーズするといった不具合も発生しました(これが単発の不具合だった可能性もあります)。


結論

いかがでしたでしょうか。LLM(大規模言語モデル)は極めてフレキシブルであり、ローカルで動作するモデルですらもはや「100万件の使い方」が可能です。あなたの想像力が限界です。ローカルモデルには確かに大きなトレードオフがありますが、それ以上に魅力的なメリットをもたらします:

  • インターネット接続不要: 飛行機の中でも作業可能です!
  • コストは電力のみ: コンピュータ購入予定であれば追加投資は必要ありません。サブスクリプション也不需要です。
  • 環境負荷について: モデル学習には確かに深刻な環境コストがかかりますが、オープンソースモデルを提供する企業はまだトップクラスではありません。また、ご自身ハードウェアを使用することでデータセンターへの負荷を減らせます。
  • ファニーであること: 触り甲斐があります。

LLM は私たちの世界に大きな影響を与えてきました。その影響の多くは決して良くありませんでしたが、彼らが去っていくことはないのは明らかなことです。ローカルモデルとの実験を通じて、この技術とより持続可能で前向きな形で対話できる方法を見つけることができました。正直に申せば、正しく動いてくれるかどうかにかかわらず、非常に楽しい活動なのです!

同じ日のほかのニュース

一覧に戻る →

2026/05/11 2:19

ローカル AI が標準となる必要があります。

## Japanese Translation: 開発者は、安定的なアプリケーションと厳格なプライバシーを確保するため、脆弱であるクラウドホスト型モデルよりも、Apple 製の組み込みローカル AI ツール(`SystemLanguageModel` および `LanguageModelSession` など)を優先すべきです。外部サーバーへの依存は、課金問題やサービス停止時にサービスがクラッシュするという致命的な障害点を生じさせると同時に、機密ユーザーデータを保持リスクおよび潜在的な侵害に晒すことになります。対照的に、データ処理を安全にデバイス上で実行することにより、不必要なサーバー経由の迂回とベンダー依存を排除し、アプリケーションを強固なものに保てます。「Brutalist Report」という iOS クライアントは、典型的なクラウドソリューションに見られる複雑なアカウント要件を回避するため、ネイティブ API を使用して完全にローカルで記事のサマリーを生成する優れた例です。長いコンテンツの場合には、テキストをチャンク化(約 10k 文字)し、各チャンクごとに事実のみを含むノートを作成した後、それらをローカルで統合して最終的なサマリーを生成する推奨ワークフローがあります。このワークフローの将来形としては、`@Generable` および `@Guide` といった Swift の構造体を使用し、構造化された AI 出力を強制して非構造化データのようなデータをそのまま受け取るのではなく、UI が一貫したフィールドを確実にレンダリングできるようにする方向性が考えられます。この変化により、ユーザーは情報がデバイスから離れることがないと信頼できるようになります。企業にとって、ローカルモデルの導入は、AI をコストが高く予測不能な外部依存体から、サマリー化や分類を効率的に行い、ユーザー所有データを扱いながらレート制限や停止時間への心配なしに運用可能な信頼性の高い低コストサブシステムへと変革させます。開発者は、クラウドモデルを真に必要な場合のみ使用し、ローカル AI をノベルティなチャットボックスではなく、予測可能で信頼できる動作を持つ subsystem として扱うべきです。

2026/05/11 10:23

手書きコーディングに戻ろうとしています。

## Japanese Translation: k10s(NVIDIA クラスター運用者向けの GPU 意識型 Kubernetes ダッシュボード)の構築から得られた主な教訓は、AI は機能の迅速な提供に優れている一方で、システムアーキテクチャにおいては頻繁に失敗し、倒壊しやすいコードベースを導き込む点にある。Go と Bubble Tea フレームワークを用いた「vibe-coded」アプローチで 30 週間週末にわたり開発を進めたチームは、7 ヶ月間で 234 コミットを実現したにもかかわらず、深刻な構造的欠陥が蓄積しており、最終的にこの作業の約 70% が破棄された。これには `model.go` に収められたコード行を約 1,690 行も含まれている。プロジェクトは以下の 5 つの批判的アーキテクチャ上の失敗に直面した:AI がシステム不変則を無視し(結果として散在する `nil` 代入が発生)、キーハンドリングが地獄のように困難になる「神オブジェクト」と単一構造体設計に依存した、GPU に焦点を当てた範囲を超えた機能の蔓延を引き起こす「速度の幻想」におびやかされた、構造化データを不安全な位置指定式配列へと平坦化したこと、そして goroutine から直接の状態変異を許容しチャンネルを用いなかったことを通じて状態遷移を誤って扱った。将来の失敗を防ぐため、このプロジェクトはシステムを Rust で再実装中である。この移行により厳密な所有ルールが強制され、コーディング前にアーキテクチャ(インタフェース、メッセージ型など)を明示的に設計することが求められ、AI の支援が長期的な構造的完全性を損なうのではなく支えるように確保される。 ## Text to translate: **Improved Summary:** The primary lesson from building k10s—a GPU-aware Kubernetes dashboard for NVIDIA cluster operators—is that while AI excels at rapid feature delivery, it frequently fails at system architecture, leading to a codebase prone to collapse. Using a "vibe-coded" approach with Go and the Bubble Tea framework over 30 weekends, the team accumulated deep structural flaws despite making 234 commits in seven months; ultimately, ~70% of this work was discarded, including approximately 1,690 lines of code in `model.go`. The project faced five critical architectural failures: AI ignored system invariants (leading to scattered `nil` assignments), defaulted to a "god object" single-struct design making key handling a nightmare, succumbed to the "velocity illusion" causing feature creep beyond the GPU focus, flattened structured data into unsafe positional arrays, and mishandled state transitions by allowing direct mutations from goroutines instead of using channels. To prevent future failure, the project is rewriting the system in Rust. This transition enforces strict ownership rules and requires designing architecture (interfaces, message types) explicitly before coding, ensuring AI assistance supports rather than undermines long-term structural integrity.

2026/05/11 2:43

インシデントレポート:CVE-2024-YIKES

## Japanese Translation: ソースコードのサプライチェーン攻撃は、`left-justify`(週ごとのダウンロード数が 8.47 億回)という侵害された JavaScript の依存関係に起因し、その結果、Python ツールの `snekpack` を介して数百万人の開発者に影響を及ぼしました。`snekpack` は、悪意のあるライブラリ `vulpine-lz4` を統合した後にマルウェアを配布しました。このインシデントは Day 1 に発生し、Google AI Overviews で提示されたフィッシングリンクに引っかかり、 maintainer の Marcus Chen が被害にあうことで始まり、複数パッケージレジストリ(`.npmrc`、`.pypirc`、Cargo、Gem の認証情報)の認証情報が漏洩し、引渡条約のない国にあるサーバーに到達しました。当初、「Critical」から「Catastrophic」と評価が変更されたものの、Day 3 に関連性の/crypto マining ウォーム (`cryptobro-9000`) が誤って脆弱なマシンを `snekpack` のアップグレードによってパッチ適用したため、「Somehow Fine」と宣言されました。 攻撃チェーンには以下が含まれていました: - 悪意のある `vulpine-lz4` ビルドスクリプトは、ホスト名がトリガー(例:"build"、"ci")に一致する場合マルウェアを実行しました。 - 不正なアップデートでは、reverse shells が Tue デイのみ有効になるように、そしてデフォルトシェルを `fish` に変更するなどの機能を追加されました。 - 企業大手(Fortune 500 社)はソーシャルメディアを通じて認識し、ある VP はマウイ島でこの事実に気づきました。 インシデントは Day 3 の 15:22 UTC に解決され、CVE-2024-YIKES は Week 6 に割り当てられ、ウォームによって約 420 万台の_MACHINE_ が救助された(ただしその C2 サーバーも侵害されていた)と推定されます。根本原因には、弱いレジストリ認証、AI 生成のフィッシングリンク、不十分な CI/CD の衛生管理があり、ユーモラスに「犬が Kubernetes を食べ、YubiKey が失われた」という形で表現されました。 是正措置には、`vulpine-lz4` のリファクタリング(Rust に書き直し)、アーティファクト署名の実装(2022 年第 3 四半期からバックログされていた)、強制的な MFA の導入、847 の推移的依存関係の監査が含まれます。このインシデントは、自動化されたビルドパイプラインにおける重要なギャップと、将来の攻撃を防止するための厳格な依存関係監査の必要性を示しています。

24GB メモリ搭載の M4 でローカルモデルを実行する場合について | そっか~ニュース