Chuyển đến nội dung chính

Llama Mesh của Nvidia: Hướng dẫn kèm ví dụ

Tìm hiểu về mô hình tạo lưới 3D của NVIDIA, LLaMA-Mesh, bao gồm khả năng, giới hạn, hướng dẫn thiết lập và các ví dụ.
· 8 phút đọc

Khám phá cùng AI

Gần đây, NVIDIA đã ra mắt một mô hình đột phá có tên LLaMA-Mesh, có khả năng tạo lưới 3D từ mô tả văn bản thuần túy.

Mô hình cũng hoạt động theo chiều ngược lại: với một lưới 3D đầu vào, nó có thể nhận diện đối tượng.

Đây là một bước tiến quan trọng của học máy, vì hiểu không gian 3D là bước then chốt hướng tới AGI. LLaMA-Mesh cũng là công cụ hữu ích cho các chuyên gia và người đam mê thường xuyên làm việc với phần mềm như Blender, giúp quá trình tạo và sử dụng lưới 3D nhanh hơn.

Trong hướng dẫn ngắn này, tôi sẽ giải thích các khả năng của mô hình và chạy vài ví dụ để giúp bạn hiểu tiềm năng cũng như các giới hạn của nó.

LLaMa-Mesh là gì?

LLaMA-Mesh là một mô hình sáng tạo do NVIDIA phát triển, mở rộng khả năng của các mô hình ngôn ngữ lớn (LLM) sang miền 3D.

Khác với mọi mô hình trước đó, LLaMA-Mesh hợp nhất văn bản và 3D, cho phép người dùng tạo lưới 3D thông qua các prompt ngôn ngữ tự nhiên đơn giản. 

Bên dưới, mô hình là phiên bản LLaMa-3.1-8B-Instruct được tinh chỉnh. Mô hình hoạt động bằng cách mã hóa dữ liệu lưới 3D theo định dạng văn bản, cụ thể là tiêu chuẩn tệp OBJ, mô tả các đỉnh và mặt dưới dạng văn bản thuần.

Cách truy cập LLaMa-Mesh

Có ba cách để bạn sử dụng mô hình:

  1. Bạn có thể chạy mô hình cục bộ qua Hugging Face—kho lưu trữ có sẵn tại đây.
  2. Nếu bạn thành thạo Blender và muốn dùng mô hình ngay trong đó, nó có sẵn dưới dạng addon cho Blender.
  3. Tác giả cũng đã dựng một bản demo trực tuyến trên nền tảng Hugging Face mà tôi sẽ dùng để tạo các lưới thử nghiệm cho hướng dẫn này.

Giao diện WebApp demo trông như sau:

Nvidia Llama Mesh

Bản demo trực tuyến hỗ trợ tối đa 4096 token, trong khi mô hình đầy đủ hỗ trợ 8K. Vì vậy, chúng ta cần chạy mô hình cục bộ để trải nghiệm đầy đủ khả năng của nó.

Tiếp theo, tôi sẽ tạo ba ví dụ với độ khó tăng dần để kiểm thử giới hạn của mô hình. Tôi sẽ chạy các ví dụ trên cả phiên bản 4K và 8K token để xem sự khác biệt.

Cách thiết lập LLaMa-Mesh để dùng cục bộ hoặc trên đám mây

Trong hướng dẫn này, tôi sẽ minh họa cách chạy mô hình bằng runtime GPU A100 của Google Colab. Nếu bạn có đủ tài nguyên tính toán tại chỗ, cùng đoạn mã có thể điều chỉnh để chạy trên phần cứng cá nhân. Kho lưu trữ Hugging Face có sẵn tại đây.

Để bắt đầu, chúng ta cần import các thư viện cần thiết và tải mô hình cùng tokenizer:

from transformers import AutoModelForCausalLM, AutoTokenizer


model_path = "Zhengyi/LLaMA-Mesh"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto").cuda()

Chúng ta cũng cần thiết lập pad_token:

if tokenizer.pad_token_id is None:
    tokenizer.pad_token_id = tokenizer.eos_token_id

Cuối cùng, chúng ta cần tokenize prompt và đưa vào mô hình để suy luận (tất cả đều là quy trình chuẩn của Huggingface, áp dụng được cho hầu như mọi mô hình khác):

prompt = "Create a 3D model of an original designer chair."
inputs = tokenizer(prompt, return_tensors="pt", padding=True)
input_ids = inputs.input_ids.cuda()
output = model.generate(
    input_ids,
    attention_mask=inputs['attention_mask'],  # Provide the attention_mask
    max_length=8000,
)

Tác giả không nêu rõ các siêu tham số dùng trong bản demo web app, nên để công bằng, tôi sẽ dùng các giá trị mặc định cho phần so sánh.

Ví dụ với LLaMa-Mesh

Giờ tôi sẽ đi qua ba ví dụ có độ khó tăng dần và so sánh đầu ra từ ứng dụng demo với kết quả tôi chạy mô hình trên Colab.

Ví dụ 1: Ghế

Chúng ta bắt đầu với thứ gì đó đơn giản nhưng sáng tạo—một chiếc ghế thiết kế. Đây là prompt (tôi thêm yêu cầu tạo lưới theo định dạng OBJ ở cuối vì mô hình chạy cục bộ đôi khi từ chối tạo nếu không có yêu cầu này):

Create a 3D model of an original designer chair in OBJ format.

Đây là đối tượng được tạo trên bản demo trực tuyến:

nvidia llama mesh example - 3D mesh visualization of a chair

Đây chắc chắn là một chiếc ghế ngầu và lạ, dù trông giống ghế của đạo diễn phim hơn là ghế thiết kế.

Giờ hãy thử chạy prompt cục bộ và trực quan hóa kết quả. Đây là những gì chúng ta nhận được:

nvidia llama mesh example - 3D mesh visualization of a chair

Trực quan hóa lưới 3D của một chiếc ghế

Lưới với ngữ cảnh lớn hơn trông chi tiết hơn. Tuy nhiên, theo tôi, chiếc ghế này giống ghế băng sofa hơn.

Ví dụ 2: Xuyến (Torus)

Tiếp theo, hãy thử một đối tượng hình học: xuyến (bánh donut 3D). Prompt cho ví dụ này là:

Create a 3D model of a torus in OBJ format.

Đây là lưới do mô hình 4096 token tạo ra:

nvidia llama mesh torus example

Xuyến do mô hình tạo

Còn đây là trực quan hóa lưới do mô hình chạy trên Colab tạo ra:

nvidia llama mesh torus example

Xuyến do mô hình tạo

Như bạn thấy, lưới này có nhiều đa giác hơn. Tuy vậy, nó vẫn không có lỗ ở giữa. Một hình xuyến đúng phải trông như sau:

example of a torus

Nguồn: Wikipedia

Ví dụ 3: Chai Klein

Cuối cùng, hãy đẩy giới hạn với một chai Klein—một cấu trúc 3D phức tạp. Prompt cho ví dụ này sẽ là:

Create a 3D model of a Klein bottle in OBJ format.

Mô hình trực tuyến liên tục tạo lưới vô tận với đầu vào này, cho đến khi tự hết thời gian và báo lỗi.

Chạy prompt cục bộ với cửa sổ ngữ cảnh lớn hơn thì khắc phục được sự cố, tuy nhiên lưới thu được trông chẳng giống chai Klein:

nvidia llama mesh example of a klein bottle

Chai Klein do mô hình tạo

Đây là hình dạng chai Klein dành cho những ai quan tâm:

Klein bottle example

Nguồn: Wikipedia

Từ các thử nghiệm trên, có thể thấy rằng mặc dù LLaMA-Mesh (cả bản trực tuyến và cục bộ) rất giỏi với các thiết kế sáng tạo và đơn giản, nó gặp hạn chế với các hình học chính xác và những hình dạng toán học cực kỳ phức tạp. Khi mô hình phát triển, thật đáng mong đợi xem các khả năng này sẽ được mở rộng ra sao.

Kết luận

Trong hướng dẫn này, chúng ta đã khám phá mô hình Nvidia LLaMa-Mesh mới và thực hiện vài ví dụ trên nền tảng demo của họ. Dù mô hình còn ở giai đoạn đầu, nó vẫn cho thấy tiềm năng lớn cho các chuyên gia và người đam mê cần giải pháp nhanh, trực quan để tạo lưới 3D.

Khi khung làm việc phát triển, các bản cập nhật tương lai có thể mang đến khả năng mở rộng, như xử lý hình học phức tạp hơn hoặc tương thích với máy in 3D.

Dimitri Didmanidze

Tác giả

Dimitri Didmanidze

Tôi là Dimitri Didmanidze, một nhà khoa học dữ liệu hiện đang theo học Thạc sĩ Toán học với trọng tâm là Học máy. Hành trình học thuật của tôi còn bao gồm nghiên cứu về khả năng của các mô hình dựa trên transformer và giảng dạy ở bậc đại học, giúp tôi hiểu sâu hơn các khái niệm lý thuyết phức tạp. Tôi cũng từng làm việc trong ngành ngân hàng, nơi tôi áp dụng những nguyên lý này để giải quyết các thách thức dữ liệu trong thực tế.

Chủ đề

Liên quan