Qwen3-TTSをOpenVINOで:ゼロからの実装

Reddit r/LocalLLaMA / 2026/5/4

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical UsageModels & Research

要点

  • 著者は、Qwen3-TTSをOpenVINOのIR形式に変換する実装コードを公開し、2026年3月にOpenArcへマージした成果を共有した。
  • Transformersは中核ロジックには使わずPyTorchでTTS処理を最初から組み直し、OpenVINO向け変換の設計方法を理解することを重視した。
  • 主要な学びとして、nn.Module内のデータフローを解析し、デバイス配置を試行錯誤してOpenVINOコンパイラが最適なカーネルや融合を選べる組み合わせを見つけることが挙げられる。
  • カスタムカーネルは将来の別ミッションであり、状態を持つkv-cacheのような要素はガイダンスなしだと難しく、AI支援でも適切なOpenVINO判断やカーネル融合を十分に予測できなかったと述べている。
  • リポジトリは現時点でOpenArc上のCPU/GPU向けに1.7Bモデルのみを対象としており、NPU対応の貢献や、PyTorchとの比較ベンチマークの可能性を歓迎している。

みなさんこんにちは、

ついに、OpenVINO形式でのQwen3-TTSの実装をコードベースとして準備するところまでこぎつけました。これは2026年の初めに行った作業で、3月にOpenArcへマージされましたが、コードを公開するのをずっと忘れていました。さあ、ここにあります。https://github.com/SearchSavior/Qwen3-TTS-OpenVINO

Discordのメンバーの1人がロシア語を話していて、私のA770でelmoのボイスクローンをやりたかったので、transformersは(AutoTokenizerを除いて、私の愛してやまないやつです)無視して、最初からQwen3-TTSをpytorchで作ることにしました。そうすることで、彼らのモデル形式へのOpenVINO変換の設計がどうなっているのかを、本当に中まで理解したかったんです。

このプロジェクトでの重要な学びは次の通りです。つまり、あるロジックを持つnn.Moduleを用意し、そのforwardメソッドを理解し、データフローを調べてから、OpenVINOコンパイラが最適なカーネルを選べるようになるデータフローとデバイス配置の組み合わせを見つけるまで試行錯誤する、ということです。このプロセスに干渉する、たとえばカスタムカーネルを作ることは、将来の作業として完全に別ミッションです。その間にはいろいろなステップがありましたが、このプロジェクトでの私にとっての重要な学びは、より良いメモを取ることでした。

AI支援は使いました……が、正直なところ、それなしにどうやってできたのかはわかりません。Opus 4.5でも、ステートを持つkv cacheまわりなど、オープンVINO向けの良い判断はできず、十分なガイダンスなしではカーネルフュージョンを見込むこともできませんでした。Intelは、自分たちのエンジニアリング実践を文書化するために十分な努力をしていません……そのせいで、OpenVINOが思ったほど「オープン」ではないように感じます。ですが、AIツールと多少の努力があれば、可能です。

このコードベースは、pytorchモデルをOpenVINO IR形式へ最適化するための汎用的なものとして拡張できます。コードが追いやすいようにしておこうとは思いましたが、概念的にはかなり要求が高く、よく文書化されていないOpenVINOの概念をベースにしています。Opusは、上流ソースから私が記憶を頼りに引き出せた、対象を絞った例に基づいて実装しました。そのうえで、さらにテストを何時間も重ねています。AI支援はありましたが、このコードは決して全力で突っ込んで書いた(フル送信みたいな)ものではありません。

いまはすべてOpenArc上で稼働しています。対象はCPUとGPU向けに1.7Bサイズのみです。0.6Bについては問題がありましたが、そこは深掘りしませんでした。NPU対応のPRは大歓迎です。

他の実装記事と違って、ベンチマークは入れていません。主に時間の制約に加えて、OpenArcのPRで行った推論コードの変更が、このリポジトリ内のものと異なるためです。もし関心があれば、OpenArcとpytorchのCPU/XPUのベンチマークを行えます。

submitted by /u/Echo9Zulu-
[link] [comments]