April 1, 2022 Ngoc Quynh

Các kỹ thuật tối ưu hóa bộ nhớ GPU để render nhanh hơn trên Redshift3D

Redshift hỗ trợ một tập hợp các tính năng kết xuất không có trong các trình kết xuất GPU khác như point-based GI, out-of-core texturing và out-of-core geometry,vv. Nhưng một trong những thách thức với GPU là quản lý bộ nhớ. Thứ nhất, GPU có tài nguyên bộ nhớ hạn chế. Thứ hai, không tồn tại phương pháp mạnh mẽ nào để phân bổ động bộ nhớ GPU. Redshift phải phân vùng bộ nhớ GPU rảnh giữa các mô-đun khác nhau để mỗi mô-đun có thể hoạt động trong các giới hạn đã biết được xác định ở đầu mỗi frame. Redshift cũng sử dụng “geometry memory” “texture cache” cho các  polygons và textures tương ứng.

Vậy làm sao để tối ưu hóa bộ nhớ GPU để render nhanh hơn trên Redshift? Hãy cùng iRender tìm hiểu chi tiết trong bài viết hôm nay!

Redshift cần cấp phát bộ nhớ cho các tia. Bởi vì GPU là một bộ xử lý song song lớn, nó liên tục tạo danh sách các tia và gửi chúng đến GPU. Chúng ta càng có thể gửi nhiều tia tới GPU trong một lần, thì hiệu suất càng tốt. Ví dụ: một cảnh 1920×1080 sử dụng brute-force GI với 1024 tia trên mỗi pixel cần bắn tối thiểu 2,1 tỷ tia! Và điều này thậm chí không bao gồm các tia phụ có thể cần thiết để khử răng cưa, bóng đổ, v.v. Không thể có tất cả các tia này trong bộ nhớ vì vậy Redshift chia công việc thành ‘các phần’ và gửi các phần này riêng lẻ, vì vậy chúng ta chỉ cần có đủ bộ nhớ trên GPU cho một phần duy nhất. 

Một số kỹ thuật nhất định như  Irradiance cache hay Irradiance Point cloud cần thêm bộ nhớ trong giai đoạn tính toán của chúng để lưu trữ các điểm trung gian. Bao nhiêu điểm sẽ được tạo ra bởi các giai đoạn này không được biết trước vì vậy một ngân sách bộ nhớ phải được dự trữ. Phiên bản hiện tại của Redshift không tự động điều chỉnh các bộ đệm bộ nhớ này, vì vậy, nếu các giai đoạn này tạo ra quá nhiều điểm, kết xuất sẽ bị hủy bỏ và người dùng phải đi đến tùy chọn bộ nhớ và tăng các giới hạn này. Đó chính là những lý do bạn cần tối ưu hóa bộ nhớ GPU cho việc render trên Redshift trở nên nhanh chóng hơn.

Tối ưu hóa bộ nhớ GPU bằng Redshift Partitions Memory

Nhìn một cách chi tiết, các bước mà trình kết xuất thực hiện để cấp phát bộ nhớ như sau:

  1. Nhận diện bộ nhớ GPU rảnh có sẵn
  2. Nếu chúng ta đang thực hiện tính toán  irradiance cache computations hoặc irradiance point cloud computations, hãy trừ bộ nhớ thích hợp cho các phép tính này (thường là vài chục đến vài trăm MB)
  3. Nếu chúng ta đang irradiance cache, photon map, irradiance point cloud hay subsurface scattering, hãy phân bổ không gian cho bộ nhớ đó
  4. Phân bổ bộ ray memory
  5. Từ những gì còn lại, hãy sử dụng tỷ lệ phần trăm cho geometry (polygons) và tỷ lệ phần trăm cho  texture cache

Các tùy chọn tối ưu hóa bộ nhớ GPU

Để tối ưu hóa bộ nhớ GPU bạn cần xác định những bộ nhớ của Redshift. Bên trong các tùy chọn kết xuất Redshift có một tab “Memory” chứa tất cả các tùy chọn liên quan đến bộ nhớ GPU. Đó là:

  • Quản lý bộ nhớ tự động

Cài đặt này sẽ cho phép Redshift phân tích cảnh và xác định cách bộ nhớ GPU nên được phân vùng giữa các tia, hình học và kết cấu. Khi cài đặt này được bật, các điều khiển cho những cài đặt này sẽ chuyển sang màu xám. Chúng tôi khuyên bạn nên bật cài đặt này, trừ khi bạn là người dùng nâng cao và nhận thấy Redshift đưa ra quyết định sai lầm (do lỗi hoặc một số loại hạn chế khác).

  • Phần trăm bộ nhớ GPU được sử dụng

Theo mặc định, Redshift dự trữ 90% bộ nhớ trống của GPU. Điều này có nghĩa là tất cả các ứng dụng GPU khác và hệ điều hành nhận được 10% còn lại. Nếu bạn đang chạy các ứng dụng nặng GPU khác trong quá trình hiển thị và gặp sự cố với chúng, bạn có thể giảm con số đó xuống 80 hoặc 70. Mặt khác, nếu bạn biết rằng không có ứng dụng nào khác sẽ sử dụng GPU, bạn có thể tăng lên 100 %.

  • Bộ nhớ GPU hết thời gian chờ không hoạt động

Như đã đề cập ở trên, Redshift dự trữ một số phần trăm bộ nhớ trống của GPU của bạn để hoạt động. Dự trữ và giải phóng bộ nhớ GPU là một hoạt động tốn kém vì vậy Redshift sẽ giữ bộ nhớ này trong khi có bất kỳ hoạt động kết xuất nào, bao gồm cả kết xuất bóng đổ. Nếu hoạt động kết xuất dừng trong 10 giây, Redshift sẽ giải phóng bộ nhớ này. Nó thực hiện điều này để các ứng dụng 3d khác có thể hoạt động mà không gặp sự cố.

  • Irradiance Cache Working Tree Reserved Memory

Đây là bộ nhớ “làm việc” trong quá trình tính toán đám mây điểm bức xạ. 128MB mặc định sẽ có thể chứa vài trăm nghìn điểm. Cài đặt này sẽ được tăng lên nếu bạn gặp lỗi kết xuất trong quá trình tính toán đám mây điểm bức xạ. Vui lòng xem thêm bên dưới.

  • Irradiance Cache Working Tree Reserved Memory

Đây là bộ nhớ “làm việc” trong quá trình tính toán bộ đệm bức xạ irradiance cache computations. 128MB mặc định sẽ có thể chứa vài trăm nghìn điểm. Cài đặt này sẽ được tăng lên nếu bạn gặp lỗi kết xuất trong quá trình tính toán bộ đệm ẩn bức xạ. Vui lòng xem bên dưới.

  • Maximum GPU Texture Cache Size

Sau khi bộ nhớ dự trữ và tia đã được trừ khỏi bộ nhớ trống, phần còn lại được phân chia giữa hình học (đa giác) và bộ đệm kết cấu (textures). Tham số “Percentage”  cho trình kết xuất biết phần trăm bộ nhớ trống mà nó có thể sử dụng để tạo kết cấu.

Ví dụ: Giả sử chúng ta đang sử dụng thẻ video 2GB và những gì còn lại sau bộ đệm và tia dự trữ là 1,7GB. 15% mặc định cho bộ đệm kết cấu có nghĩa là chúng ta có thể sử dụng tối đa 15% trong số 1,7 GB đó, tức là khoảng 255 MB. Mặt khác, nếu chúng ta đang sử dụng thẻ video có 1GB và sau khi bộ đệm và tia dự trữ, chúng ta còn lại 700MB, thì bộ nhớ cache kết cấu có thể lên đến 105MB (15% của 700MB).

Khi chúng ta biết có thể sử dụng bộ đệm kết cấu tối đa là bao nhiêu MB, chúng ta có thể giới hạn số lượng hơn nữa bằng cách sử dụng tùy chọn  “Maximum Texture Cache Size ”. Điều này hữu ích cho các thẻ video có nhiều bộ nhớ trống. Ví dụ: giả sử bạn đang sử dụng Quadro 6GB và sau khi dự trữ bộ đệm và tia, bạn có 5,7GB trống. 15% trong số đó là 855MB. Có rất ít cảnh cần bộ nhớ đệm họa tiết lớn như vậy! Nếu chúng ta không có “Maximum Texture Cache Size”  bạn sẽ phải liên tục sửa đổi tùy chọn “Percentage” tùy thuộc vào card màn hình bạn đang sử dụng.

Sử dụng hai tùy chọn này  (“Percentage” and “Maximum”) cho phép bạn chỉ định tỷ lệ phần trăm phù hợp (và 15% thường xuyên nhất) trong khi không lãng phí bộ nhớ trên các thẻ video có nhiều bộ nhớ trống.

  • Maximum CPU Texture Cache Size

Trước khi dữ liệu kết cấu được gửi đến GPU, chúng được lưu trữ trong bộ nhớ CPU. Theo mặc định, Redshift sử dụng 4GB cho bộ nhớ CPU này. Nếu bạn gặp vấn đề về hiệu suất với các cảnh có nhiều họa tiết, vui lòng tăng cài đặt này lên 8GB hoặc cao hơn.

  • Bộ nhớ dành riêng cho Ray

Nếu bạn để cài đặt này ở 0, Redshift sẽ sử dụng số MB mặc định tùy thuộc vào cấu hình đổ bóng. Tuy nhiên, nếu cảnh của bạn rất nhẹ về mặt đa giác hoặc bạn đang sử dụng thẻ video có nhiều bộ nhớ trống, bạn có thể chỉ định ngân sách cho các tia và có khả năng tăng hiệu suất hiển thị của bạn. Điều đó được giải thích trong phần riêng bên dưới.

Tối ưu hóa bộ nhớ GPU để điều chỉnh Irradiance Point Cloud/Irradiance Cache Reserved Memory

Bạn chỉ nên chỉnh sửa những con số này là nếu bạn nhận được một trong số các thông báo như sau:

“Irradiance cache points don’t fit in VRAM. Frame aborted. Please either reduce Irradiance Cache quality settings or increase the irradiance cache memory budget in the memory options”

Hoặc: “Irradiance point cloud doesn’t fit in VRAM. Frame aborted. Please either increase the ‘Screen Radius’ parameter or the irradiance point cloud memory budget in the memory options”

Nếu không thể (hoặc không mong muốn) sửa đổi  irradiance point cloud hoặc irradiance cache quality parameters, bạn có thể thử tăng bộ nhớ từ 128MB lên 256MB hoặc 512MB. Nếu bạn đã sử dụng nhiều bộ nhớ cho việc này và vẫn nhận được thông báo này, điều này có thể là do cảnh có rất nhiều chi tiết vi mô, trong trường hợp đó, bạn nên xem xét sử dụng Brute-Force GI để thay thế.

Tối ưu hóa bộ nhớ GPU bằng cách điều chỉnh Texture Cache Memory

Khi Redshift hiển thị, cửa sổ  “Feedback Displaysẽ bật lên. Cửa sổ này chứa thông tin hữu ích về lượng bộ nhớ được cấp phát cho các mô-đun riêng lẻ. Một trong những mục này là “Texture”. Con số đó báo cáo số MB mà CPU phải gửi GPU qua bus PCIe để tạo kết cấu. Ban đầu, nó có thể nói một cái gì đó như “0 KB [128 MB]”. Điều này có nghĩa là “bộ nhớ cache kết cấu của bạn lớn 128MB và cho đến nay bạn chưa tải lên dữ liệu nào”.

Redshift có thể kết xuất thành công các cảnh chứa hàng gigabyte dữ liệu kết cấu. Nó có thể đạt được điều đó bằng cách ‘tái chế’ bộ đệm kết cấu (trong trường hợp này là 128MB). Nó cũng sẽ chỉ tải lên các phần của kết cấu cần thiết thay vì toàn bộ kết cấu. Vì vậy, khi các kết cấu ở xa, phiên bản có độ phân giải thấp hơn của kết cấu sẽ được sử dụng (chúng được gọi là “bản đồ MIP”) và chỉ các ô cụ thể của bản đồ MIP đó.

Do phương pháp tái chế bộ nhớ này, bạn rất có thể sẽ thấy hình được truyền PCIe lớn hơn kích thước bộ đệm kết cấu (được hiển thị trong dấu ngoặc vuông). Điều đó thường xuyên xảy ra. Tuy nhiên, nếu bạn thấy số lượng “Đã tải lên” tăng rất nhanh và nhanh chóng lên đến vài trăm MB hoặc thậm chí gigabyte, điều này có thể có nghĩa là bộ nhớ cache kết cấu quá nhỏ và cần được tăng lên. Nếu đúng như vậy, bạn sẽ cần phải làm một hoặc hai điều:

  1. Đầu tiên, hãy thử tăng  “Max Texture Cache Size”. Mặc định nó là 128MB. Hãy thử 256MB như một phép thử. 
  2. Nếu bạn đã làm điều đó và con số hiển thị trong cửa sổ Phản hồi không trở thành 256MB, thì bạn sẽ cần tăng thông số “Percentage Of Free Memory Used For Texture Cache” . Hãy thử các số chẳng hạn như 0,3 hoặc 0,5. 

Tối ưu hóa bộ nhớ GPU bằng cách tăng Ray Reserved Memory

Cuối cùng bạn có thể tối ưu hóa bộ nhớ GPU bằng cách tăng Ray Reserved Memory. Trung bình, Redshift có thể phù hợp với khoảng 1 triệu triangles  trên 60MB bộ nhớ (trong trường hợp điển hình là các meshes chứa một kênh UV duy nhất và một không gian tiếp tuyến trên mỗi đỉnh). Điều này có nghĩa là ngay cả những cảnh có vài triệu hình tam giác vẫn có thể để lại một số bộ nhớ trống (không sử dụng cho hình học). Bộ nhớ đó có thể được gán lại cho các tia, như đã giải thích trước đó, sẽ giúp Redshift gửi ít gói công việc hơn, lớn hơn tới GPU, trong một số trường hợp, có thể tốt cho hiệu suất render. 

Dễ dàng xác định xem hình học của cảnh của bạn có đang sử dụng kém bộ nhớ GPU hay không: tất cả những gì bạn phải làm là xem mục Feedback display “Geometry” entry. Tương tự như texture cache, geometry memory được tái chế. Nếu cảnh của bạn đủ đơn giản (và sau khi kết xuất khung hình), bạn sẽ thấy bộ nhớ do PCIe truyền xuống thấp hơn đáng kể so với kích thước geometry cache size (được hiển thị trong dấu ngoặc vuông). Ví dụ: nó có thể đọc như sau: “Geometry: 100 MB [400 MB]”. Trong ví dụ này, điều này có nghĩa là chúng ta có thể sử dụng 300MB và gán lại chúng cho Rays.

Bộ nhớ tia hiện đang được sử dụng cũng được hiển thị trên Feedback display under “Rays”. Ví dụ như “Rays: 300MB”. Vì vậy, trong các tùy chọn bộ nhớ, chúng ta có thể tạo “Ray Resevered Memory”, khoảng 600MB. I E. thêm 300MB mà hình học của chúng ta không sử dụng vào 300MB mà các tia đang sử dụng.

Kết luận

Mong rằng sau bài viết này, bạn có thể có thêm nhiều kiến thức mới để tối ưu hóa bộ nhớ GPU, tối ưu cảnh để tăng tốc render và có thể tận dụng nó để tạo ra những dự án tuyệt vời trong tương lai.

Và một điều thú vị cho bạn! iRender là một trong những renderfarm rất được khuyến khích cho Redshift. Chúng tôi cung cấp các máy chủ chuyên dụng cho người dùng Redshift. Bạn có thể sử dụng các máy tính hiệu suất cao để tăng tốc độ kết xuất trên Redshift. Đặc biệt, chúng tôi có các máy chủ với nhiều card  RTX 3090 đi kèm với các thông số cấu hình sau:

Cấu hình máy chủ của iRender không chỉ vượt qua các yêu cầu phần cứng tối thiểu của Redshift mà còn vượt quá các yêu cầu được khuyến nghị. Redshift hỗ trợ nhiều GPU trên một máy, giúp tăng hiệu suất hiển thị lên nhiều lần. Đây là một trong những lý do chính mà chúng tôi đề xuất 4 gói này để các nhà thiết kế có sự lựa chọn linh hoạt dựa trên ngân sách và thời gian của mình. Hơn nữa, gói này sử dụng thẻ GPU Nvidia với dung lượng VRAM tối thiểu từ 10GB lên đến 24 GB. Ngoài ra, với NVLink có sẵn, VRAM giờ đây sẽ lên đến 48GB (RTX3090), giúp bạn lưu trữ và giải quyết các cảnh hoặc dữ liệu lớn và phức tạp.

Vì vậy, đừng ngần ngại trở thành thành viên của cộng đồng iRender ngay hôm nay để nhận COUPON MIỄN PHÍ để không lãng phí những giờ render vô nghĩa, và trực tiếp trải nghiệm dịch vụ. Luôn đi đầu trong công nghệ đồ họa tiên tiến, chúng tôi kết xuất, sáng tạo là của bạn!

Thank you & Happy Rendering!

Nguồn tham khảo:Redshift documentation
, , , , , , , , , , , , , , ,
Contact

INTEGRATIONS

Autodesk Maya
Autodesk 3DS Max
Blender
Cinema 4D
Houdini
Maxwell
Nvidia Iray
Lumion
KeyShot
UE4
Twinmotion
Redshift
Octane
And many more…

iRENDER TEAM

MONDAY – SUNDAY
9:00 AM – 8:00 PM
Hotline: 0916 806 116
Zalo: 0916 806 116
Skype: iRender Support
Email: [email protected]
CÔNG TY CỔ PHẦN CÔNG NGHỆ IRENDER VIỆT NAM
MST: 0108787752
Office: 5/82 Dịch Vọng Hậu, Cầu Giấy, Hà Nội.

Contact
0916806116