iT邦幫忙

2026 iThome 鐵人賽

DAY 21
0
AI Engineering

《矽墟》:我把一部科幻小說當成軟體專案來管系列 第 21

Day 21|官方要求 24GB 顯卡,我一張都沒有,模型還是跑出來了

  • 分享至 

  • xImage
  •  

模組四|從 2D 到 3D(Day 20–25)

Day 20 把限制寫死了——那篇的結論是:我手上沒有專業級顯卡,所以每一條「把 2D 圖變成 3D 模型」的路線,都得先過「這台機器跑不跑得動」這一關。這篇實際跑路線 A:把《矽墟》(我正在寫的科幻小說連載,整部用管軟體專案的方式在管)的角色三視圖,餵給 Microsoft 的 image-to-3D 模型 TRELLIS.2。

結論先說:跑成功了,第一次就成功,拿到一個帶完整 PBR(Physically Based Rendering,基於物理的算繪)材質的模型——簡單說就是這份材質進到 3D 軟體裡會對燈光有正確反應,金屬像金屬、布料像布料——角色認得出來。而我用的機器沒有任何一張符合官方要求的顯卡。

這篇講三件事:這個模型憑什麼能處理衣擺和髮絲、官方的硬體門檻到底寫了什麼、以及沒有那張卡的人實際上要從哪裡進去。

先把硬體要求逐字抄下來

TRELLIS.2 的 GitHub repo 在 Prerequisites 底下寫的是這兩行:

System: The code is currently tested only on Linux.
Hardware: An NVIDIA GPU with at least 24GB of memory is necessary.
          The code has been verified on NVIDIA A100 and H100 GPUs.

24GB 起跳,驗證平台是 A100 和 H100,而且只在 Linux 上測過。

這個門檻對個人創作者的意思很直接:消費級顯卡絕大多數出局。 24GB 這條線把選擇壓縮到很少數的卡,而官方實際驗證過的兩張都是資料中心卡。

repo 裡另外提到,不支援 flash-attn(一套讓注意力運算跑得更快、更省記憶體的加速函式庫)的卡(它舉的例子是 V100)要自己裝 xformers(另一套做同樣加速的替代品)並設 ATTN_BACKEND 環境變數,告訴程式改用哪一套。這句話透露的訊息是:就算你湊到記憶體,還有一層相容性要處理。

沒有那張卡的人從哪裡進去

答案不在 repo 的安裝說明裡,在專案首頁上。

microsoft.github.io/TRELLIS.2 頂部有四個連結:Watch Intro Video、Read Research Paper、Code、Demo。前三個分別指向影片、論文、GitHub。Demo 那個指向的是 Hugging Face 上的 microsoft/TRELLIS.2 Space。

也就是說,微軟官方掛出來的線上試用入口只有這一個,而它是一個 HF Space——Hugging Face(模型代管平台)上的線上試用頁,模型跑在對方的機器上,你只要開瀏覽器上傳圖片。

那個 Space 頁面上標示的執行環境是 ZeroGPU。ZeroGPU 的模式是:GPU 不常駐給單一 Space,而是在你送出請求的當下動態配給,用完釋放。對使用者的意義是登入之後有一份免費配額可以用,尖峰時要排隊,付費的 PRO 帳號配額更高、排得比較前面。

所以「24GB 顯卡」這個門檻對想試一次的人來說,實際上可以繞過:你不用去買那張卡,去借官方那台就行。

我就是這樣跑的。一次就過,沒有失敗重試。

這個模型憑什麼能吃衣擺和髮絲

這是我真正想弄懂的部分,因為它決定了這條路線適不適合角色。

多數 image-to-3D 的方法底層是某種等值面場(iso-surface field)——先學一個空間中的純量場,再抽出等值面變成網格。這個做法有一個結構性的限制:它天生描述的是「有內外之分的封閉表面」。

而角色身上最麻煩的東西剛好都不封閉:

東西 幾何性質
衣擺、披風、裙襬 開放曲面,只有一層,沒有厚度
髮絲 大量細片狀開放曲面
交錯的配件 非流形(non-manifold),邊被兩個以上的面共用
外衣底下的內襯 被包住的封閉內部結構

TRELLIS.2 的核心表示法叫 O-Voxel(voxel 是體素,也就是 3D 版的像素——把空間切成一格一格的小方塊來記錄形狀;「稀疏」則是只記有東西的那些格子,空的不佔位),官方對它的定位是一個「field-free」(無場)的稀疏體素結構——不走場、不抽等值面。專案頁上直接列出它宣稱能處理的三類:open surfaces、non-manifold geometry、enclosed interior structures,而且用了剖面圖來展示被包住的內部結構確實生出來了。

「不用場」這件事之所以關鍵,是因為前面那張表裡的四樣東西,全部都是等值面方法會做壞的地方。裙襬會被補成有厚度的殼,髮絲會糊成一塊,內襯根本不會存在。

換句話說:這不是「品質比較好」的差別,是「做不做得出來」的差別。 對純角色的專案,這一條就足以決定選型。

材質不是貼上去的一張圖

第二個我原本沒預期的點是材質。

這個模型產出的是一組可以做 PBR 的表面屬性:Base Color(基礎顏色)、Roughness(粗糙度)、Metallic(金屬度),以及 Opacity(不透明度)。彩色貼圖只是其中一個通道。

有 Roughness 和 Metallic 的意思是,模型進到引擎裡之後會對場景燈光有正確反應——金屬件會像金屬,布料不會反光。這跟只有一張 base color 貼圖、靠美術硬畫出高光的做法,是兩個層級的東西。

官方對規模的說法是 4B 參數、最高可以產到 1536³ 解析度的帶材質資產,底層是原生 3D VAE(Variational Autoencoder,變分自編碼器——把 3D 資料壓成小很多的表示、要用時再還原回來的壓縮器)搭 16× 空間壓縮。

實跑:輸入、參數、產出

輸入是三張三視圖,就是模組三那條產線的產物——正面、背面、側面:

char-chenger-front.png    999 × 1438
char-chenger-back.png     999 × 1438
char-chenger-side.png     465 × 1438

參數只動了兩個:

resolution   1024
seed         175029927

resolution 是輸出的解析度,數字越大細節越多、跑越久;seed 是隨機種子,把它記下來,下次才有機會重跑出同一個結果。

產出是一個 GLB(glTF Binary,把網格、材質、貼圖全部打包進單一檔案的 3D 交換格式):

13,206,732 bytes  (12.59 MiB)

材質是四張 2048×2048:

baseColor                  3.13 MB
metallicRoughness_packed   0.80 MB
metallic                   0.46 MB
roughness                  0.18 MB

metallicRoughness_packed 是把 metallicroughness 兩張圖塞進同一張圖的不同色彩通道,內容跟另外兩張重複,只是引擎讀起來比較省。

打開來看,角色認得出來,是秤兒(模組三那條產線一直在畫的那個角色)沒錯。衣服的層次在,材質完整,該有的通道都在。

以「能不能從三張 2D 圖生出一個帶完整材質的 3D 角色」這個問題來說,答案是能,而且比我預期的好。

生成要多久

官方在專案頁上給的數字是這樣(標註測試環境為 NVIDIA H100):

解析度 總時間(幾何 + 材質)
512³ 3 秒(2 + 1)
1024³ 17 秒(10 + 7)
1536³ 60 秒(35 + 25)

我跑的是 1024,對應到 17 秒那一列。

這裡要說清楚:那 17 秒是 H100 上的推論時間。我從按下按鈕到拿到檔案,實際等得更久,因為走 ZeroGPU 還要加上排隊等配給的時間,而那段時間取決於當下有多少人在用,沒有固定值,我也沒有可靠的方式量它。

所以我能誠實給的是官方的推論時間,加上一句:體感上,等待主要花在排隊,不在算圖。

代價

第一個代價是可重現性。

我沒有跑在自己的機器上,我跑在一個我不控制的環境裡。這代表環境不是我的、版本不是我釘的、配額不是我的。今天能跑,是因為那個 Space 現在活著而且我還有額度。這在做一次性嘗試的時候完全沒問題,但它不能當成產線的一部分——你不能把一條會被人家關掉的路放進流程裡。

第二個代價是規模。

免費配額適合跑一個角色看看行不行,不適合跑二十個。一旦這條路線要真的用在整個專案上,前面那個 24GB 的門檻就會回來找你,只是換成雲端 GPU 的帳單形式。這跟 Day 17 講的成本結構是同一件事:能跑一次跟能跑一輪,中間隔著一個乘法。

第三個代價比較微妙:這次太順了。

一次就成功、模型好看、材質完整,很容易讓人在這個時間點下結論說路線 A 成立。而我下這個結論下得太早了——明天那篇就是在講,我拿到這個模型之後發現我沒辦法用它,而問題全部都跟「生得像不像」無關。

帶走什麼

一、官方硬體要求要去 repo 裡逐字讀,不要看二手轉述。

「要 24GB」和「只在 Linux 測過、只在 A100/H100 驗證過、不支援 flash-attn 的卡要自己換 backend」是很不一樣的兩件事。前者是一個數字,後者是一份實際的相容性清單。

二、門檻寫得很高的模型,先去專案首頁找 Demo 連結。

會把硬體要求寫成 24GB 的團隊,通常也知道大部分人沒有那張卡,所以多半會掛一個官方線上入口。這個入口省錢是其次,重點是讓你在投入硬體之前先確認這條路線值不值得投入

判斷句:在我為這件事買任何東西之前,有沒有一個官方管道能讓我先跑一次?

三、選型先問「做不做得出來」,再問「品質好不好」。

我原本以為 image-to-3D 的差別是精細度高低。實際上對角色來說,關鍵是底層表示法能不能處理開放曲面與非流形幾何:裙襬和髮絲在等值面那條路上根本做不對,跟「做得比較差」是兩回事。

看到一個模型宣稱自己 field-free、無等值面,要去確認它列的是不是你的東西真正會踩到的那幾類。

四、免費額度可以驗證,不能生產。

借來的環境適合回答「這條路行不行」,不適合回答「這條路能不能養活我的專案」。這兩個問題的答案經常不一樣,而把第一個的答案當成第二個來用,是選型階段最常見的自我欺騙。

五、一次就成功的時候,先別急著下結論。

順利的第一次會讓人跳過「拿到之後要怎麼用」這個問題。我就跳過了,而代價是明天那一整篇。


明天 Day 22,講拿到這個模型之後才浮出來的四個問題。它們有一個共同點:全部跟模型生得像不像無關,所以在評估階段完全沒被看到。


上一篇
Day 20|做技術選型之前,先把限制寫死
系列文
《矽墟》:我把一部科幻小說當成軟體專案來管21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言