【PR】この記事にはA8.netのアフィリエイト広告を含みます。
先に結論:Framework LaptopのUMA Frame Bufferを変更してOSごと不安定になる問題は、XServer VPSから修復できません。ただし、メモリを大量消費するAI処理をDockerのhard limit内へ移せば、失敗範囲を実験コンテナだけに限定できます。256MiB・512MiB・1GiBの3条件で全コンテナがOOM終了しましたが、公開APIの監視91回はすべて成功し、既存サービスの復旧は不要でした。判定は一部解決です。
2026年9月1日、4GBのXServer VPSで32MiBずつ実メモリを確保する段階負荷を実行しました。終了コード、OOMKilled、cgroupピーク、ホスト空きRAM、公開APIの生存、終了直後の確認時間を記録しています。
- Framework LaptopのUMA割当変更でOSが不安定になるのはなぜ?
- ZennのFramework Laptop 13実例では何が起きた?
- RedditではFramework 13のiGPUメモリ設定に何を悩んでいる?
- Framework CommunityでもUMA増量は求められている?
- XServer VPSでFramework LaptopのUMA問題を再現できる?
- Docker公式はメモリ上限をどう説明している?
- 実験前のXServer VPS状態
- 段階負荷はどのように作った?
- 256MiB上限ではどこでOOMになった?
- 512MiB上限ではどこでOOMになった?
- 1GiB上限ではホストも危険になった?
- 3条件を比較するとどうなった?
- OSと公開APIの復旧時間は?
- 実験中に分かりにくかった点は?
- 初心者が迷いそうなポイントは?
- AIスマホ調査システムではどう応用できる?
- XServer VPSで便利だった点・限界は?
- 実験後のVPSは正常?
- よくある質問
- XServer VPSでこの悩みはどこまで解決する?
- 最新条件の確認先
Framework LaptopのUMA割当変更でOSが不安定になるのはなぜ?
CPUとiGPUが同じ物理メモリを使うため、GPU向け固定枠を変えるとOS側の利用可能量やGPUドライバの動作条件も変わるからです。大きく固定すればシステムRAMが減り、小さくしすぎれば対象機・ドライバ・ワークロードによってGPU処理が不安定になる可能性があります。
ただし、クラッシュの原因を常にOOMと決めつけることはできません。GPUハング、ハードウェアウォッチドッグ、BIOS、メモリ互換性なども候補です。
ZennのFramework Laptop 13実例では何が起きた?
Zennの「Ryzen AI 9 HX 370でローカルLLMのメモリを取り戻す ― UMA Frame Buffer最小設定でシステムが落ちた話」では、Framework Laptop 13、32GB RAM、Radeon 890M、Fedora、Gemma4 26B QATという構成が紹介されています。
同記事では、0.5GB時に実際のOOM killやamdgpuリセットのログが見つからず、ハードウェアウォッチドッグの記録だけが残ったとしています。今回のDocker OOMとは原因も障害範囲も異なります。
RedditではFramework 13のiGPUメモリ設定に何を悩んでいる?
Redditのr/frameworkには「Setting shared RAM/VRAM in BIOS for 7040U series」という相談があります。Framework 13・Ryzen 7840Uで、BIOSのAutoとGaming以外に大きなiGPU割当を設定したいという内容です。
投稿内では非公式ツールによる変更に触れつつ、投稿者自身もsoft brickの危険を心配しています。AI用途で割当を増やしたい需要があっても、機種・BIOS世代を無視した値変更は安全とは限りません。
Framework CommunityでもUMA増量は求められている?
Framework Communityの「BIOS Feature Request: Add ability to specify UMA size on AMD APUs」では、ROCmやPyTorchなどのML用途向けに大きなUMA bufferを設定したいという要望があります。一方、64MB相当の設定で起動時クラッシュし、自動的に戻ったという報告もあります。
「設定できる」と「安全に常用できる」は別です。一次情報を取るなら、機種名、BIOS版、設定値、OS、ドライバ、モデル、クラッシュ後のログを一緒に残す必要があります。
XServer VPSでFramework LaptopのUMA問題を再現できる?
再現できません。XServer VPSはGPUなしのLinux AMD64環境で、Radeon 890M、UMA Frame Buffer、GTT、Framework BIOSを備えていません。VPSの結果からFramework Laptopに安全な0.5GB・8GB・16GBを決めることもできません。
検証できるのは、危険なAI負荷を自宅PCから切り離し、Linux cgroupのhard limit内で意図的に失敗させる構成です。OS全体ではなくジョブ単位で落とせるかを測ります。
Docker公式はメモリ上限をどう説明している?
Docker公式のResource constraintsは、既定のコンテナにはリソース制限がなく、ホストが許す範囲でメモリを使えると説明しています。Linuxホストが深刻なメモリ不足になると重要プロセスまでOOM対象になり得るため、事前の必要量テストとコンテナのメモリ制限を勧めています。
今回、OOM killerを無効化する--oom-kill-disableは使いません。hard limitへ達した実験ジョブを終了させ、既存サービスを守ることが目的だからです。
実験前のXServer VPS状態
| 項目 | 実験前 |
|---|---|
| 契約構成 | 4 vCPU / 4GB RAM / 150GB NVMe SSD |
| RAM | 620MB used / 3.47GB available |
| swap | 131MB / 2.15GB |
| ストレージ | 15.52GB / 154.99GB(11%) |
| 公開API | database=ok、artifact_storage=ok |
| 既存コンテナ | Caddy / FastAPI / PostgreSQLがhealthy |
段階負荷はどのように作った?
Python 3.13.15で32MiBのbytearrayを繰り返し生成し、4KiBごとに書き込んで実ページを確保しました。1段階ごとに0.25秒待ち、Docker外からcgroupと公開APIを監視しています。
| 制御項目 | 設定 |
|---|---|
| メモリ上限 | 256MiB / 512MiB / 1GiB |
| memory-swap | memoryと同値、追加swapなし |
| CPU | 1 vCPU上限 |
| pids | 64上限 |
| 再起動 | restart=no |
| ready監視 | 約0.1秒間隔 |
256MiB上限ではどこでOOMになった?
| 指標 | 実測 |
|---|---|
| 最後に成功したアプリ確保 | 224MiB |
| cgroup peak | 228.77MiB |
| 終了まで | 2.697秒 |
| Exit / OOMKilled | 137 / true |
| 再起動 | 0回 |
| ready | 12/12成功 |
224MiBの次に32MiBを確保しようとした段階で終了しました。hard limit 256MiBの全量をアプリデータへ使えるわけではありません。
512MiB上限ではどこでOOMになった?
| 指標 | 実測 |
|---|---|
| 最後に成功したアプリ確保 | 480MiB |
| cgroup peak | 485.18MiB |
| 終了まで | 4.662秒 |
| Exit / OOMKilled | 137 / true |
| 再起動 | 0回 |
| ready | 26/26成功 |
1GiB上限ではホストも危険になった?
| 指標 | 実測 |
|---|---|
| 最後に成功したアプリ確保 | 992MiB |
| cgroup peak | 998.29MiB |
| 終了まで | 8.766秒 |
| 最小host MemAvailable | 2,271.85MiB |
| Exit / OOMKilled | 137 / true |
| ready | 53/53成功 |
1GiB条件でもホストには約2.22GiB availableが残りました。公開サービス用の余白を先に残し、その内側だけを実験へ割り当てた結果です。
3条件を比較するとどうなった?
| hard limit | 最後の確保 | cgroup peak | Exit | API失敗 |
|---|---|---|---|---|
| 256MiB | 224MiB | 228.77MiB | 137 / OOM | 0/12 |
| 512MiB | 480MiB | 485.18MiB | 137 / OOM | 0/26 |
| 1GiB | 992MiB | 998.29MiB | 137 / OOM | 0/53 |
全条件で実験コンテナだけが終了し、再起動回数は0でした。公開APIの合計91回の監視はすべてHTTP 200です。
OSと公開APIの復旧時間は?
復旧は不要でした。公開APIは一度も異常になっていません。各OOM直後の最初のreadyプローブは256MiB条件31ms、512MiB条件28ms、1GiB条件26msでHTTP 200でした。
これは「31msで障害復旧した」という意味ではありません。障害が実験cgroup内に閉じ、公開APIが継続していたことをOOM直後にも確認できた時間です。
実験中に分かりにくかった点は?
Pythonログは最終のALLOCATED_BYTES行で突然止まり、MemoryErrorやtracebackを出しませんでした。最初はアプリ例外のような説明が得られません。
そこで、終了コード137だけで判断せず、docker inspectのState.OOMKilled=trueを確認しました。Exit 137はSIGKILLを示しますが、OOMか手動停止かを区別するには追加情報が必要です。
初心者が迷いそうなポイントは?
| 迷いやすい点 | 今回の確認方法 |
|---|---|
| memory=1gならアプリが1GiB使える | ランタイムなどの分を差し引き、992MiBで次チャンクが失敗 |
| Exit 137なら必ずOOM | OOMKilledも確認する |
| swapがあれば安全 | 遅延やホスト圧迫もあるため今回は追加swapを無効化 |
| コンテナが落ちればVPSも停止 | 別cgroupの公開APIを同時監視する |
| VPS実験でUMAの安全値が分かる | ハードウェア固有値は実機で検証が必要 |
AIスマホ調査システムではどう応用できる?
| 処理 | 隔離の考え方 |
|---|---|
| スクリーンショットOCR | 画像枚数と解像度に応じたRAM上限 |
| 小型LLM要約 | モデル別のcgroup上限とOOM記録 |
| 複数アプリ調査 | ジョブごとにコンテナを分離 |
| 失敗時 | Exit、OOMKilled、最後の操作、スクリーンショットを保存 |
| 再試行 | 同条件を無限再起動せず、上限または入力を変更 |
司令塔のAPIと実験ワーカーを同じ制限へ入れないことが重要です。今回も公開APIは既存コンテナ、負荷処理は使い捨てコンテナへ分けました。
XServer VPSで便利だった点・限界は?
| 観点 | 実体験 |
|---|---|
| 便利 | 3種類のhard limitを短時間で作り直せた |
| 便利 | OOM後もSSHと公開APIが継続し、外側から証拠を回収できた |
| 便利 | 実験コンテナだけを削除し、公開構成を維持できた |
| 限界 | Framework BIOS、UMA、Radeon、GTTの挙動は測れない |
| 限界 | ノートPCの画面暗転、温度、バッテリー、復帰性は検証できない |
実験後のVPSは正常?
3つの検証コンテナとVPS上の一時スクリプトを削除しました。実験後はRAM 618MB used、3.48GB available、swap 129MB used、ストレージ使用率11%です。
Caddy、FastAPI、PostgreSQLはhealthy、公開readyはdatabase=ok、artifact_storage=okでした。
よくある質問
Framework LaptopのUMAを何GBにすれば安全?
今回のVPS実験からは決められません。機種、RAM容量、BIOS、OS、GPUドライバ、モデルをそろえた実機試験が必要です。
VPSへ移せばFramework LaptopのGPU性能も得られる?
いいえ。今回のXServer VPSはGPUなしです。得られるのは常時稼働、Docker隔離、ログ保存、司令塔機能です。
OOMしたコンテナは自動再起動すべき?
原因が同じなら再びOOMするため、無制限再起動は避けます。入力縮小、上限変更、別ワーカーへの振り分け後に再試行する設計が必要です。
XServer VPSでこの悩みはどこまで解決する?
判定は一部解決です。Framework LaptopのUMA設定やハードウェアウォッチドッグをVPSから直すことはできません。しかし、AI処理を256MiB・512MiB・1GiBのcgroupへ閉じ込めると、全条件で実験コンテナだけがOOM終了し、公開APIは91/91回成功しました。
自宅PCはAndroid実機の操作と画面取得、VPSはジョブ管理・記録・安全なCPU処理を担当させる構成なら、UMA設定を攻めて日常PCごと不安定にする必要を減らせます。将来GPUワーカーを追加するときも、まずモデルごとのメモリ上限と失敗時の証拠をVPSで管理する方針を引き継げます。

コメント