Loading video...

Video Failed to Load

Go Home

💫It's fascinating that a single feed-forward pass through an LLM can replace a complex rendering pipeline, like Blender! Just feed it 3D shapes, xyz positions, and poses as tokens, and it spits out the image token-by-token. The dual, aka scene reconstruction, is also possible! 👇

44,636 views • 1 year ago •via X (Twitter)

7 Comments

Georgia Gkioxari's profile picture
Georgia Gkioxari1 year ago

The dual: Image goes in as tokens, and 3D shapes, xyz positions and poses come out token-by-token.

Georgia Gkioxari's profile picture
Georgia Gkioxari1 year ago

Read more here:

Mike Roberts's profile picture
Mike Roberts1 year ago

This is exciting!! Congrats Georgia and team 🥳 Silly naive question: How should I think about this work in relation to that recent RenderFormer paper from a few weeks ago?

Georgia Gkioxari's profile picture
Georgia Gkioxari1 year ago

RenderFormer is awesome! Very very similar in spirit -- use a neural net to predict the rendered image of an input 3D asset. Many differences in algorithm and in scope: * our model is fully autoregressive and performs next-token prediction. This token can an image token, shape token, or text token. RenderFormer is vision-transformer style. * We can do 3D-to-image (rendering), image-to-3D (reconstruction, recognition), image + 3D-to-image + 3D (instruction-following), all with the same framework enabled by the unified token-wise model. It's why we love tokens! * For the rendering task, we emphasize on compositionality (scenes composed of many objects) with control over the locations, poses and object types/shapes -- all specified in the input. Our model at the end is dirt simple, just an LLM, but we found some things to be very critical: (1) how to best encode numbers to specific 3D locations and poses, (2) how to discretize/tokenize 3D shapes, which are inherently continuous, and (3) how to fuse the modalities.

Bisheshwor Neupane's profile picture
Bisheshwor Neupane1 year ago

Is it faster?

Krish Mehta's profile picture
Krish Mehta1 year ago

Wow, feels like it could be applied to better part segmentation too?

honasu-san's profile picture
honasu-san1 year ago

According to apple it must be an illusion.

Related Videos

Continuous batching in LLMs, clearly explained: (a popular LLM interview question; bookmark this) In traditional ML inference, a batch is a matrix. Every input is padded to the same length, one forward pass runs, and every row finishes at the same moment. LLM decoding does not work that way. One forward pass produces one token per sequence, so a request needs as many passes as it has output tokens, and nobody knows that count until the model emits a stop token. Under static batching, membership is fixed when the batch starts. A request that finishes in 30 tokens holds its slot until the slowest request in the same batch finishes at 400. The GPU keeps paying the full weight read for a batch that is mostly empty. Loading model weights out of HBM costs the same whether four slots are producing tokens or one. Continuous batching moves the decision boundary. Instead of scheduling once per batch, the scheduler runs a single forward pass, gets control back, and decides again. A finished request leaves at the next iteration boundary, and a queued request takes its slot right there. No slot stays reserved for work that is already done. Anyscale benchmarked both OPT-13B on a single A100. With uniform generation lengths, the two policies came out about level (as expected), and as output length variance rose, static batching fell to around 81 tokens per second while vLLM reached 23x the throughput of naive Hugging Face serving. Variance drives the entire gap. Production traffic mixes 30-token replies with 400-token ones, which is exactly the condition static batching handles worst. None of this alters the model. vLLM, SGLang, TGI, and TensorRT-LLM all run it by default, and NVIDIA ships the same mechanism under the name in-flight batching. The animation below runs both policies on the same 16 requests and the same 4 slots, stepping in lockstep. The only difference is when a new request is allowed in. To dive deeper into continuous batching specifically, I wrote a full breakdown of the scheduler underneath it. It covers what happens between two forward passes, how tokens get handed out against a fixed budget, why the scheduler needs no separate path for prefill and decode, and what preemption costs you when the KV cache fills up mid-generation. Read it below.

Avi Chawla

16,140 views • 1 month ago