El problema fundamental que aborda este proyecto es la opacidad y la complejidad de las implementaciones de redes neuronales de renderizado en tiempo real, como DLSS de NVIDIA. Estas tecnologías, aunque transformadoras para los gráficos 3D, suelen ser cajas negras propietarias, lo que dificulta su estudio, optimización y adaptación por parte de la comunidad de ingenieros y desarrolladores. La tesis central es que es posible replicar con exactitud bit a bit una red de renderizado generativo compleja, como la de DLSS 5, utilizando APIs de bajo nivel como Vulkan y WebGPU, y que esta replicación, al ser de código abierto, permite una comprensión profunda de sus algoritmos subyacentes y sus requisitos de hardware.
La relevancia de este trabajo radica en la creciente importancia del renderizado neuronal en la industria de los videojuegos y la visualización. Al proporcionar una implementación transparente, se fomenta la innovación y se democratiza el conocimiento sobre cómo estas redes interactúan con el hardware gráfico moderno, especialmente con las capacidades de computación de precisión mixta (FP8/FP16) de los Tensor Cores. Este enfoque se alinea con la filosofía de la ingeniería inversa para el avance del conocimiento técnico, similar a cómo se han estudiado arquitecturas de CPU o protocolos de red en el pasado para comprender sus principios de funcionamiento.
Arquitectura del Sistema
La arquitectura central del sistema es una red neuronal de 71 bloques basada en una combinación de Swin Transformer y Vision Transformer (ViT), operando con activaciones FP8 (E4M3) y acumulación FP16 en los Tensor Cores de GPUs NVIDIA Ada o más recientes. La red es un U-Net de bloques de transformadores de ventana desplazada con un ViT global en la parte inferior, distribuidos en seis niveles de pooling. El sistema toma una "proxy" de un frame renderizado, ruido gaussiano, la salida del frame anterior reproyectada y cinco escalares de condicionamiento, para producir cuatro canales f32 por píxel (RGB residual y un logit de mezcla temporal).
La implementación en Vulkan (dlss5vk) se compone de varios módulos clave: un host en C++20 que gestiona el contexto de Vulkan, la carga del modelo, la reorganización de pesos y los "kernel wrappers". Los "kernels" GLSL proporcionan la ruta de referencia, implementando GEMMs de matriz cooperativa FP8, bloques fusionados de 32 canales, atención QKV fusionada, MLP experto, atención global y operaciones elementales. Para la ruta de ejecución rápida, se utilizan "kernels" PTX generados por scripts de Python, que aprovechan mma.sync E4M3 con acumulación f16, anillos cp.async, encadenamiento sin barreras a través de contadores de dispositivo y GEMMs split-K. El puerto a WebGPU es una implementación independiente que demuestra la exactitud bit a bit sin Tensor Cores ni FP8, ejecutándose en un navegador. La carga del modelo se realiza a través de un archivo manifest.json que describe las etapas y tensores, con los pesos almacenados en archivos de etapa como bytes empaquetados E4M3, que el host reorganiza para el consumo de los "kernels".
Flujo de Renderizado Neural por Frame
- 1 Engine Render El motor de juego renderiza un frame inicial (proxy de baja dinámica).
- 2 Input Preparation Se preparan entradas: proxy, ruido gaussiano, salida reproyectada del frame a...
- 3 Model Inference (GPU) La red DLSS 5 (71 bloques Swin/ViT) procesa las entradas en la GPU (FP8/FP16).
- 4 Output Generation La red produce 4 canales f32 por píxel: RGB residual y logit de mezcla temporal.
- 5 Temporal Blending El logit de mezcla temporal se usa para combinar la salida actual con el fram...
- 6 Final Frame Se obtiene el frame final renderizado con detalle mejorado.
| Capa | Tecnología | Justificación |
|---|---|---|
| compute | Vulkan | API de gráficos y computación de bajo nivel para la ejecución de los kernels de la red neuronal en la GPU. vs DirectX 12, CUDA VK_KHR_cooperative_matrix, VK_NV_cooperative_matrix2, VK_EXT_shader_float8, VK_NV_cuda_kernel_launch |
| compute | WebGPU | API de gráficos y computación para la ejecución de la red en navegadores web, demostrando portabilidad y exactitud sin hardware especializado. vs WebGL2 |
| compute | NVIDIA Tensor Cores | Unidades de hardware especializadas para operaciones de matriz de baja precisión (FP8, FP16), cruciales para la eficiencia de la inferencia de la red. vs CUDA Cores (FP32/FP16), AMD Matrix Cores FP8 (E4M3) activations, FP16 accumulation |
| compute | GLSL (OpenGL Shading Language) | Lenguaje de sombreado para implementar los kernels de la red, sirviendo como ruta de referencia y fallback. vs HLSL Cooperative-matrix FP8 GEMMs, fused 32-channel block |
| compute | PTX (Parallel Thread Execution) | Ensamblador virtual de NVIDIA para la implementación de kernels altamente optimizados, aprovechando características específicas del hardware como mma.sync y cp.async. vs SPIR-V (con extensiones específicas) mma.sync E4M3, f16 accumulation, cp.async rings, barrier-free chaining |
| data-processing | Swin Transformer / Vision Transformer (ViT) | Arquitectura de red neuronal subyacente para el renderizado generativo, combinando atención de ventana desplazada y atención global. vs Convolutional Neural Networks (CNNs), Generative Adversarial Networks (GANs) 71 blocks over six pooling levels, U-Net structure |
| storage | JSON (manifest.json) | Formato para describir la estructura del modelo (etapas, tensores) y sus metadatos, facilitando la carga y validación. vs YAML, Protocol Buffers |
Trade-offs
Ganancias
- ▲▲ Rendimiento (latencia)
- ▲ Eficiencia energética
- ▲ Fidelidad visual (renderizado neural)
Costes
- ▲ Complejidad de implementación (Vulkan/PTX)
- ▲ Dependencia de hardware (Tensor Cores)
- ▲ Portabilidad (PTX)
Fundamentos Teóricos
La arquitectura de la red, basada en Swin Transformer y Vision Transformer (ViT), tiene profundas raíces en la investigación académica sobre redes neuronales para visión por computadora. Los Vision Transformers, introducidos por Dosovitskiy et al. en 2020 ("An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale"), demostraron la eficacia de los mecanismos de autoatención para tareas de visión, rompiendo con la hegemonía de las CNNs. Los Swin Transformers, propuestos por Liu et al. en 2021 ("Swin Transformer: Hierarchical Vision Transformer using Shifted Windows"), abordaron la limitación computacional de los ViT al introducir una jerarquía y atención basada en ventanas desplazadas, lo que los hizo más eficientes y escalables para una variedad de tareas de visión, incluyendo la generación de imágenes y el renderizado.
El uso de precisión mixta (FP8 con acumulación FP16) se alinea con la investigación en computación de alto rendimiento y aprendizaje automático, donde la reducción de la precisión numérica es una técnica clave para mejorar la eficiencia computacional y el uso de memoria en hardware especializado como los Tensor Cores. Este enfoque se ha explorado en numerosos trabajos, como los de Micikevicius et al. en 2017 ("Mixed-Precision Training of Deep Neural Networks"), que sentaron las bases para el entrenamiento y la inferencia con menor precisión. La implementación de GEMMs de matriz cooperativa en Vulkan y los "kernels" PTX optimizados reflejan principios de optimización de bajo nivel para GPUs, buscando maximizar el "throughput" y minimizar la latencia, un campo de estudio constante en la computación paralela y los gráficos por computadora.