動かざることバグの如し

近づきたいよ 君の理想に

RailsでGCにかかった時間をlogrageでロギングしたい

環境

やりたいこと

GCにかかった時間をlogrageでロギングしたい

Rails.application.configure do
  config.lograge.enabled = true

  config.lograge.custom_options = ->(event) do
    (略)
    data[:gc_time] = event.gc_time.round(1)
    data
  end
end

これができるのはRails7.2以降なので注意

rails/actionpack/lib/action_controller/log_subscriber.rb at 7-2-stable · rails/rails

スマホの音楽をWindowsPCのスピーカーから再生できる「Bluetooth Audio Receiver」

環境

  • Windows11

やりたいこと

スマホの音楽をWindows通してPCのスピーカーから再生したい

picture 1

探すと「Bluetooth Audio Receiver」というフリーソフトでできそうだったので試してみた。

手順

まず、WindowsスマホBluetooth接続しておく必要がある。

次に、Windowsストアアプリに行ってBluetooth Audio Receiverをインストールする。

apps.microsoft.com

Bluetooth接続されてる状態で起動するとこんな感じの画面になる。

picture 2

分かりづらいんだけど端末名をクリックすると色が変わる。

picture 3

「Open Connection」をクリックすると接続される。

picture 4

これでスマホの音がWindowsで再生できるはず。

コーデックについて

サイトによってはSBCしか対応してないので音質はカスと書いてあったりするがそれはWindows10での話。Windows11では21H2以降標準でAACに対応している。

picture 5

ソース

learn.microsoft.com

参考リンク

llama.cppはDocker使わない方が高速という都市伝説

この記事はLLM・LLM活用 Advent Calendar 2025の16日目の記事です。

qiita.com

環境

はじめに

RTX4090では乗らないようなLLMモデルを動かしたかったので、先日Minisforum MS-S1 MAXを購入した。メモリ爆上がり前のギリギリで購入できてよかった。

blog.turai.work

kyuz0氏が作成してくれたDockerfileを使ってllama.cpp用イメージをビルド、運用している。

github.com

モデルはQwenのQwen3-235B-A22B-Instruct-2507をUD-Q3_K_XL量子化モデルで使用している。 実用的な速度(15t/s)で生成されるので悪くない。

しかし生成が速いに越したことはない。色々考えた結果、 Dockerがボトルネックになって遅くなってしまっているんじゃないか と考えた。

コンテナで仮想化しているんだから必ずボトルネックは存在する。構築しやすいしメンテナンス性も高いのでDockerを使用していたが、 ホスト側にllama.cppをインストールして実行すれば最速になるんじゃないかと企てた。

同様のことを考えている方もいらっしゃった。

EVO-X2 (Ubuntu) で amd-strix-halo-toolboxes を使って高速推論

実際にベンチマーク取ってみたのが本記事の話。

ホスト環境構築

Linuxカーネル

まずはLinuxカーネルDockerfile を見てみると最新のカーネルを使用するためにfedoraを使っているらしい。 生まれてこの方Ubuntuしか使ったことがないのでUbuntu面倒な 自前ビルドせずに最新をインストールする。 標準カーネル(generic)ではなくoem版は、特定のハードウェアに最適化された特別なカーネルパッケージである。

sudo apt install linux-oem-24.04d

再起動すると6.17になっている。

❯ uname -r
6.17.0-1008-oem

余談だがMinisforum MS-S1 MAXでは10G NICを2つ積んでいるがデフォルトのカーネルではドライバーが対応していなくて使えてなかった。 oem最新版だと認識するようになった。

AMDVLKのインストール

GPUドライバー。amdvlk自体は開発終了して非推奨になっているので注意(私の環境だとrocmより安定しているので使用している)

wget https://github.com/GPUOpen-Drivers/AMDVLK/releases/download/v-2025.Q2.1/amdvlk_2025.Q2.1_amd64.deb
sudo apt install amdvlk_2025.Q2.1_amd64.deb

インストール後は再起動すること

依存パッケージのインストール

パッケージは、Dockerfileに書かれていたインストールパッケージをGeminiにapt向けに変換させたのが主である。

sudo apt-get install \
  build-essential cmake ninja-build ccache \
  clang lld mold libclang-dev libclang-rt-dev libomp-dev \
  libcurl4-openssl-dev \
  libvulkan-dev vulkan-tools mesa-vulkan-drivers \
  radeontop glslc glslang-tools

llama.cppのビルド

ビルドオプションやコマンドはDockerfileを参考にしている。

export CC=clang
export CXX=clang++
export LDFLAGS="-fuse-ld=mold"

git clone --recursive https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

cmake -S . -B build -G Ninja \
  -DGGML_VULKAN=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -DGGML_RPC=ON \
  -DCMAKE_INSTALL_PREFIX=/usr \
  -DLLAMA_BUILD_TESTS=OFF \
  -DLLAMA_BUILD_EXAMPLES=ON \
  -DLLAMA_BUILD_SERVER=ON
cmake --build build --config Release
sudo cmake --install build --config Release

確認

❯ llama-cli --version
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon 8060S (AMD open-source driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 64 | shared memory: 32768 | int dot: 0 | matrix cores: KHR_coopmat
version: 7508 (6ce863c80)
built with Clang 18.1.3 for Linux x86_64

最初、デバイスがないと言われてしまったが、

❯ llama-cli --version
ggml_vulkan: No devices found.
version: 7508 (6ce863c80)
built with Clang 18.1.3 for Linux x86_64

グループの追加が足りてなかった。

sudo usermod -aG video,render $USER

ログアウトして再ログインして llama-cli --version したら解決。

いざベンチマーク

ベンチマークのコマンドは以下

❯ /usr/bin/llama-bench \
      -m ~/.cache/llama.cpp/unsloth_Qwen3-235B-A22B-Instruct-2507-GGUF_UD-Q3_K_XL_Qwen3-235B-A22B-Instruct-2507-UD-Q3_K_XL-00001-of-00003.gguf \
      -p 2048 \
      -n 128 \
      --repetitions 2 \
      --flash-attn 1 -ngl 99 --threads 16 --cache-type-k q8_0 --cache-type-v q8_0 --batch-size 2048 --ubatch-size 1024

Docker版

model size params backend ngl n_ubatch type_k type_v fa mmap test t/s
qwen3moe 235B.A22B Q3_K - Medium 96.99 GiB 235.09 B Vulkan 99 1024 q8_0 q8_0 1 0 pp2048 137.79 ± 0.11
qwen3moe 235B.A22B Q3_K - Medium 96.99 GiB 235.09 B Vulkan 99 1024 q8_0 q8_0 1 0 tg128 17.65 ± 0.00

非Docker版

model size params backend ngl n_ubatch type_k type_v fa test t/s
qwen3moe 235B.A22B Q3_K - Medium 96.99 GiB 235.09 B Vulkan 99 1024 q8_0 q8_0 1 pp2048 136.08 ± 0.52
qwen3moe 235B.A22B Q3_K - Medium 96.99 GiB 235.09 B Vulkan 99 1024 q8_0 q8_0 1 tg128 17.71 ± 0.01

別に速くなってなくて草

まとめ

これからもDockerよろしくな!!!!!

Minisforum MS-S1 MAX LinuxでLLM動かすための初期設定

無事に届いた!!!!

picture 1

BIOS/UEFI設定

Ubuntuにて

sudo systemctl reboot --firmware-setup

でキー連打しなくてもUEFI画面に遷移できる。

VRAM

  • Advanced -> AMD CBS -> NBIO Common Options -> GFX Configuration
  • UMA Frame buffer Size で 1GBを選択(BIOSによっては512MB選択できるらしい?

IOMMUの無効化

  • Advanced -> AMD CBS -> NBIO Common Options
  • IOMMUで AUTOにする

カーネルパラメータの設定

/etc/default/grubを編集して GRUB_CMDLINE_LINUX_DEFAULTamd_iommu=off amdgpu.gttsize=131072 ttm.pages_limit=33554432 を追記

- GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
+ GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=off amdgpu.gttsize=131072 ttm.pages_limit=33554432"
  • amd_iommu=off: AMD CPUのIOMMU(入出力メモリ管理ユニット)機能を無効化
    • 通常、IOMMUはデバイスがメモリにアクセスする際の保護や仮想化のために働く重要な機能
    • 複数のGPUを搭載した際や特定のハードウェア構成において、この機能が原因でUSBポートが反応しなくなったり、起動時にエラーを吐いたりすることがある
    • トラブルを回避するために無効化
  • amdgpu.gttsize=131072: AMDGPUドライバがシステムメモリを参照するために使うGTT(Graphics Translation Table)のサイズを指定している
    • GPUは自身のVRAMが足りない時などにシステムメモリ(メインメモリ)を使う
    • そのアドレス変換テーブルのサイズを強制的に拡張している
  • ttm.pages_limit=33554432: Linuxカーネルのグラフィックスメモリ管理サブシステム(TTM)が確保できるページ数の上限設定
    • いわば「グラフィックドライバがシステムメモリをどれだけ食いつぶして良いか」という制限を緩和している

反映

sudo update-grub

再起動

sudo reboot

amdgpu_topのインストール

github.com

https://github.com/Umio-Yasuno/amdgpu_top/releasesから最新版のdeb落としてきて

sudo apt install ./amdgpu-top_0.11.0-1_amd64.deb

するとインストールできる

sudo amdgpu_top したときに以下のようになっていればOK

picture 0

参考リンク

UbuntuでIPのネットマスクを変更するコマンド

環境

やりたいこと

たとえば192.168.100.123/24で設定するつもりが192.168.100.123/16で設定してしまった。ssh越しで修正したい。

やり方

nmcliコマンドを使う。まずはUUIDを特定するために nmcli connection show を実行する。

$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Wired connection 2  8f404403-67bb-3827-9a1c-5632987d4ef8  ethernet  eno6np1
lo                  b46ba310-a01f-43c5-93c8-1cbc81324999  loopback  lo
Wired connection 1  fc4b122f-55d6-3845-bfd7-cf6c1094ce7b  ethernet  --

いざ設定

sudo nmcli connection modify "Wired connection 2" ipv4.addresses 192.168.100.123/24 && sudo nmcli connection up "Wired connection 2"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

と表示されれば成功。