HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

2025年版Androidで画像を生成する

Generating Images with a 2025 Android (duration.ai)

16 pointsby sudb0 コメント

要約

この記事では、Samsung Galaxy S25+上でPrismMLのBonsai Imageモデルを使用して画像を生成する試みについて解説しています。iOSに比べてAndroidでの開発は複雑で、特に異なるハードウェアと未成熟な機械学習スタックが課題となりました。しかし、NPUを活用することで、512x512の画像を約2分で生成することに成功し、以前のiPhone 12 Proと同等の性能を達成しました。

全文翻訳

← ブログ 2025年版Androidで画像を生成する 2026年6月29日 Samsung Galaxy S25+上で完全に生成された画像がこちらです – PrismMLのBonsai Imageモデルを再び使用し、今回はディフュージョントランスフォーマーをスマートフォンのHexagon NPUで実行しました。 「静かな陶器のスタジオにある盆栽、柔らかな朝の光、浅い被写界深度」 コードはgithub.com/duration-ai/bonsai-image-androidにあります。これは「Generating images with a 2020 iPhone」の続編です – 同じモデル、同じ512×512ですが今回はAndroidです。前回の投稿では、次にAndroidを検討するかもしれないと締めくくりました。そして実際に検討しましたが、はるかに困難であることが判明しました。 iOSの場合、Appleは2つの成熟した機械学習スタック(Core MLとMLX)を提供しており、PrismMLのリファレンスが私たちのSwiftポートと同じMLXフレームワークで実行されたため、彼らの数値と私たちの数値を1行ずつ比較することができました。 厄介なことに、Androidには成熟した同等のものがありません – NNAPIはLiteRT(旧TensorFlow Lite)に置き換えられましたが、まだかなり未成熟です。問題は、異なるAndroidスマートフォンのファミリーが異なるハードウェアを持っているため、最大のパフォーマンスを得るためには、特定のモデルをどこでどのように実行するかを選択する必要があることです。つまり、CPU、GPU、または一部の電話ではNPUです。各ファミリーには独自のツールチェーンがあり、Core MLほどスムーズなものはありません。 私たちのポーティング作業のベースラインはCPUです。stable-diffusion.cpp – あるいはJuste-Leo2のフォーク(1-bitサポートを追加したもの)は、Bonsaiの重みをかなり素直に実行しますが、非常に遅いです。S25+のSnapdragon 8 Eliteでは、ディフュージョントランスフォーマーはステップごとに約2分かかるため、完全な512×512の画像は8〜9分かかります。これは問題ありませんが、2020年のiPhone 12 Proで512×512の生成を2分強で実行できたことを考えると、技術的に5年も進んでいるはずのスマートフォンで、もっと良い結果が出せるかどうかを確認したかったのです。 GPUでは早期に成功を収め、256×256で鮮明なリンゴを生成することができました。 OpenCLを介してGPUで256×256 しかし、GPUを512×512の画像生成にプッシュする試みはその後ひどく停滞し、ノイズ除去中に一貫してクラッシュしました。これにより、NPUだけが未テストのパスとして残されました。(より知識のある誰かなら、これを解決できると確信しています。) BonsaiをS25+のNPUに移植するには、iOSでは問題にならなかった多くのことを回避する必要がありました。例えば、NPU用に拡張する必要のある重み、fp16のオーバーフロー、Qualcomm SDKのバージョンごとの癖などです。 完全にタップ可能なアプリができる前にポーティングを中断することになりました – アプリ自体がNPUと通信する上で新たな問題に直面し続けたためです。最終的な成果物は、スマートフォンにロードし、ケーブル経由でコンピューターからトリガーする生成パイプラインです。 iPhoneで実行したのと同じプロンプトで、さらに4つの生成結果がこちらです。 「小さな漁船の横で巨大なザトウクジラが飛び跳ねる、劇的な潮しぶき」 「暗い深海での生物発光クラゲのバレエ、神秘的で異世界のよう」 「冬の嵐の中の居心地の良い山小屋、煙突から煙、暖かい窓、ロマンチックな風景」 「油を塗ったコートを着た風化した船乗り、ひげには潮しぶき、ゴールデンアワーの写真」 各512×512の画像は2分強かかります – プロンプトのエンコードに約20秒、4つのノイズ除去ステップにNPUで65秒、デコードに45秒です。NPUでのみ、512×512のレンダリングを完了し、合理的な時間で実行することができました。実時間では、6年前のiPhoneがGPUで達成したのとほぼ同じです – 同じ4ステップで約140秒です。 ただし、画像はiPhoneのものよりも少し柔らかく仕上がります。同じモデルですが、精度が異なります。iPhoneはトランスフォーマー全体をGPUで浮動小数点数で実行します。NPUもその大部分をfp16で実行しますが、一部のブロックはより低い精度の整数にフォールバックする必要がありました(それらのfp16オーバーフロー)。これが細かいディテールを鈍らせているのではないかと疑っています。 1ビットモデルはNPU用に拡張されると1ビットではなくなるため、デプロイ可能なバンドル全体は約10.7 GBになり、iPhoneの3.7 GBと比較して大きくなります。ピークメモリは5 GB近くになり、12 GBのスマートフォンでは快適ですが、iPhoneの綿密な3 GBをはるかに上回ります。 iPhoneと同様に、連続して生成を行うと熱スロットリングが発生します。また、テキストエンコーダーやVAEをCPUから移動させることはまだ試みていません – これらは将来の改善点となるかもしれません。 Bonsai画像生成のための出荷可能なAndroidアプリを最後まで完成させることはできませんでしたが、達成できた進捗には満足しています。願わくば、これがこの任務を引き継ぐことに興味のある他の人々のための、少なくとも有用な出発点となることを願っています。