みなさんこんにちは、
ついに、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のベンチマークを行えます。
[link] [comments]




