Pixal3D(C++ 版の trellis.cpp)を Radeon で技術検証したとき、画像から 3D を作る1本あたりの時間を、最初の5本の平均で見積もりました。ところが別の題材を回すと約 3〜13 分と大きくばらつき、その見積もりは甘すぎました。時間の上限を置いて回すなら、どこで外れるかを知っておきたいところです。

結論

  • 所要は、物の表面の細かさで決まりました。1024 の段のトークン数が 7,531 の素体は 175 秒、26,783 の髪は 793 秒です。
  • 1024 の形の flow の時間は、トークン数のおよそ 1.7 乗で伸びます(7 点から見た目安です)。
  • 自作の Python スクリプト全体では 180.0〜798.4 秒(平均 391.8 秒)、RSS の最大は 3.1〜8.5 GiB で、どちらも髪が最大でした。
  • 最初の5本の平均 125.5 秒(12 ステップ・別の題材)は、髪の 798.4 秒の6分の1ほどでした。時間の上限は、細かい題材まで含めて測った値から決めるほうが安全です。

試した環境

  • Pixal3D を trellis.cpp v0.8.1(HIP でビルド)で動かしたもの。Radeon RX 7900 XT(gfx1100、VRAM 20 GB)、Ubuntu、ROCm 7.2.4
  • 1024・色付き・16 ステップ・画角 15°
  • 題材: 1人のキャラクターのパーツ 7 本(素体・髪・上着・シャツ・ズボン・靴・リュック)
  • trellis-cli は自作の Python スクリプトから呼びました

測った値

1024 の段のトークン数と、trellis-cli の所要です。

パーツトークン所要
素体7,531175 s
上着8,916194 s
ズボン10,149221 s
シャツ13,583318 s
靴17,512437 s
リュック20,587567 s
髪26,783793 s

トークン数が増えるほど所要が伸び、素体の 175 秒から髪の 793 秒まで

トークン数は 3.6 倍ですが、所要は 4.5 倍に伸びています。細かい物ほど、1トークンあたりの時間も長くなります。1024 の形の flow は、トークン数のおよそ 1.7 乗で伸びていました(7 点から見た目安です)。一番重い髪では、形の flow に 345 秒、色の flow に 204 秒かかっています。

どれも1枚の画像から作っていますが、トークン数は物ごとに大きく違い、多かったのは髪・リュック・靴でした。所要を画像の枚数だけで見積もると、ここで外れます。

背の高い荷物の台車の前で、作業員が門の横木を高い位置に付け替えている

時間の上限は細かい題材を含めて決める

最初の5本(同じ 1024・色付きで、12 ステップ)の平均は 125.5 秒でした。7 本の平均 391.8 秒の3分の1に届かず、一番重い髪の 798.4 秒とは6倍あまり離れています。

時間の上限を置いて回すなら、最初の数本の平均ではなく、細かい題材まで含めて測った値(最長 798 秒、RSS の最大 8.5 GiB)から決めるほうが安全です。最初の5本と7本では、ステップ数(12 と 16)も題材も違い、差のうちどれだけがステップ数によるかは分けて測っていません。

確かめていないこと

  • ステップ数の違い(12 と 16)が所要にどれだけ効くか。
  • キャッシュが冷えた状態(GGUF の一式 14 GB を読むところから)の所要。

おわりに

試した 7 本では、Pixal3D の生成時間は、画像の枚数ではなく物の表面の細かさに沿って伸びました。時間の上限や見込むメモリは、細かい題材を含めて測った値から決めると安心です。