自宅サーバー(RTX 4070 Ti 12GB)でHeartMuLa 3BとACE-Step 1.5を実機比較。歌詞再現度をWhisperXで定量評価し、12GB VRAM環境で踏んだ導入の罠も記録しました。
まず結論を書くと、歌詞をきっちり歌わせたい場面ではHeartMuLa 3B、雰囲気重視のインストならACE-Step 1.5に軍配が上がりました。自宅のRTX 4070 Ti(VRAM 12GB)で両方を実機比較した結果です。同じ歌詞・同じタグを両方に投げて生成し、WhisperXで歌詞の一致率を数値化しました。8ジャンル平均でHeartMuLaがやや優勢(0.545 vs 0.464)でしたが、動かすまでにはそれぞれ別種の罠がありました。
AI音楽生成といえばSunoが真っ先に名前が挙がる。ただ、クラウドサービス頼みだとどうしても「アカウントがある間だけ使える」「無料枠だと生成数に限りがある」という不安がついて回る。うちは自宅にRTX 4070 Ti(VRAM 12GB)を積んだAIサーバーがあって、ComfyUIやQwen3-TTSなど普段からローカルAIを回しているので、「音楽生成もローカルでどこまでやれるのか」を実機で試してみた。
候補に挙げたのは2つ。
同じ歌詞・同じタグを両方のモデルに投げて、実際にどれだけ歌詞を正確に歌ってくれるかをWhisperXで文字起こしして数値化してみた。単なる聴き比べで終わらせず、「動かすまでに何が起きたか」まで含めて書く。
HeartMuLaはCLI専用ツールで、Gradio UIのようなサーバーは同梱されていない。python examples/run_music_generation.py を都度叩く軽量な構成だ。導入自体はPython 3.10の仮想環境を用意して pip install -e . するだけとシンプルだったが、実際に生成を試すと立て続けに3つの壁にぶつかった。
1つ目はVRAM不足。デフォルトの cfg_scale(Classifier-Free Guidanceの強度)は1.5なのだが、これが1.0以外の値だと内部でバッチサイズが2倍になる実装になっている。3Bモデル+音声コーデックのロードだけで12GB枠のほとんどを使い切ってしまうため、KVキャッシュを確保する段階でCUDA out of memoryが発生した。--cfg_scale 1.0 に落としてバッチを1本化することで解決したが、これは生成のガイダンス強度を犠牲にする妥協でもある。
2つ目はモデルロード時に見つけた発見で、--max_audio_length_ms(生成する曲の長さ指定)を短くしてもVRAM使用量は変わらなかった。中身を追うと、KVキャッシュのサイズはコード側で max_seq_len=8192 に固定されていて、指定した曲の長さとは無関係だった。
3つ目は音声保存時のエラー。新しいtorchaudioは保存バックエンドとしてtorchcodecを要求するが、これが実機のCUDAビルドとバージョンが噛み合わず、libnvrtc.so.13が見つからないというエラーでロードに失敗した。torchaudioのsave()を諦め、soundfileライブラリ経由でwav保存する形にコードを一部書き換えて回避した。
この3つを乗り越えれば、あとは安定して動く。1曲(90秒)の生成にかかる時間は、モデルロード込みで約1分前後だった。
ACE-Step側は既に自宅で運用実績があったので導入自体に問題はなかったが、Gradio UIの「Custom」モードで標準通りに生成すると、歌詞付きの曲でほぼ毎回こんなエラーが出た。
RuntimeError: stack expects each tensor to be equal size, but got [18570, 64] at entry 0 and [20160, 64] at entry 1
UIのデフォルトは「1回で2サンプル同時生成」する仕様になっているのだが、歌詞ありの曲だと言語モデルが終了トークンを出すタイミングが2サンプルで微妙にズレる。生成された2本の長さが揃わないまま結合しようとして内部でクラッシュする、という設計上の穴だ。UI上にはこの同時生成数を1に減らす操作画面が見当たらなかったため、Gradioの内部APIを直接叩いてバッチサイズを1に固定することで安定させた。
インストゥルメンタル曲では起きにくく、歌詞付きの曲で再現性高く発生した。ACE-Stepを標準UIで使っていて謎のRuntimeErrorに遭遇した人がいたら、まずバッチサイズを疑ってみてほしい。
同じ歌詞・同じスタイルタグを両モデルに投げて生成する、というシンプルな検証方法で進めた。ジャンルはJ-POP、Rock、Lo-Fi Hip-hop、Ambient、Rap、アニソン、ユーロビート、沖縄イメージの8つ。プレビュー用に冒頭25秒を切り出している。
日本語の歌詞制御は今回の検証で最も差が出たジャンルだった。
ここは実は今回一番の「事故」が起きたジャンルで、後述するがACE-Step側は歌詞がほぼ消えてしまっていた。
三線という西洋の学習データには少なそうな楽器・琉球音階をどう再現するか気になっていたジャンル。
「聴いた印象」だけだと主観が入りすぎるので、生成した音声をWhisperX(large-v3)で文字起こしし、意図した歌詞との一致率を機械的に計算した。インスト曲(Lo-Fi Hip-hop、Ambient)は歌詞がないので対象外、歌詞ありの6ジャンルで比較している。
| 曲 | HeartMuLa | ACE-Step |
|---|---|---|
| J-POP | 0.488 | 0.289 |
| Rock | 0.776 | 0.839 |
| Rap | 0.563 | 0.653 |
| アニソン | 0.435 | 0.441 |
| ユーロビート | 0.425 | 0.000 |
| 沖縄イメージ | 0.583 | 0.563 |
| 平均 | 0.545 | 0.464 |
数値だけ見るとHeartMuLaが優勢に見えるが、内訳を見るとそう単純でもない。RockとRapの英語曲では、むしろACE-Stepの方がスコアが高かった。反復的なコーラス構造の曲では、ACE-Stepも安定して歌詞を再現できるという推測が成り立つ。
差が大きく開いたのは日本語のJ-POPと、そしてユーロビート。特にユーロビートのACE-Step側はWhisperXの音声区間検出が「歌声が見つからない」と判定するレベルまで歌詞が消えてしまい、実質的にインスト化していた。HeartMuLaでこの種の「歌詞ごと消える」事故には遭遇していない。
総合すると、HeartMuLaは歌詞から外れる"事故"が少なく安定、ACE-Stepは当たれば高精度だが時々歌詞ごと飛ぶことがある、という対照的な結論になった。
このスコアはWhisperX自体の文字起こし精度も混ざった複合指標であり、モデルの歌唱精度だけを純粋に測れているわけではない。あくまで「大まかな傾向を掴む一次指標」として見てほしい。また、比較対象は各ジャンル1回ずつの生成であり、シードを変えて複数回試せばスコアは多少上下する可能性がある。
RTX 4070 Ti(12GB)クラスの環境で両方動かした実感としては、
cfg_scale=1.0にする、soundfileで保存するといった一手間は前提になる。どちらもクラウド課金なしでローカルGPU1枚で動く選択肢として十分実用的だった。Sunoの代替を探しているなら、両方試してみて用途に合う方を選ぶのが良さそうだ。
出典: HeartMuLa 公式GitHub / ACE-Step 1.5(自宅サーバー既存運用) 検証日・環境: 2026年7月、自宅AIサーバー(RTX 4070 Ti・VRAM 12GB、Ubuntu 24.04)
HW系エンジニアとして20年以上、10,000件を超える顧客訪問と2,000件を超える単独ソリューション実績。AIツールを使った個人開発やIoT農園など、Raspberry Piを使ったオートメーション化なども実践中です!エンジニア専門結婚相談所も運営中、ClaudeCodeで解決できない心の課題も解決いたします!
META-MARK × AI
ローカルAIを動かすGPU、ちゃんと選べていますか?
VRAM・性能・コスパをMetaScoreで数値化。AIアプリ別の推奨ハードウェア要件も確認できます。