• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • AI Platforms / Deployment

    ????? ??? ??? NVIDIA OptiX? ?? ???

    Reading Time: 8 minutes

    NVIDIA? OptiX 9.0? ????? ‘????? ??(cooperative vectors)’?? ??? ??? ??????. ? ??? ?? ???? ?? ??? AI ?????? ??? ? ?? ???, NVIDIA RTX ?? ??? ??? ??? ?? ???? ?? ?? ??? ??? ??? ?????. ?? ?? NVIDIA RTX Neural Shaders? RTX Neural Texture Compression(NTC) ?? AI ??? ??? ??? ? ?? ??, ??? ?????? ???? ???? ?? ??? ????? ????.

    ????? ?? API? OptiX? ??? DirectX,?NVAPI,?Slang, Vulkan??? ?? ???? ????. ?? ???? ?? API? ????? ???? ????? ?? ??? ????, OptiX API? ??? ??? ?? ?? ??? ??? ? ??? ?????.

    ? ?? ??????

    ?? ????(MLP)? ?? ??? ????? ?? ?? ?????. ??? ???, MLP? ??? ??? ?? ???? ??? ? ????. ????? ??? ? ?? ?? ????, ?? ?? ??? ?? ??? ??? ?? ? ???, ?? ??? ?????? ? ??? ??? ??? ?? ? ????..

    MLP? ????? ?? ??, ?? ?? ?? ?? ???, ??? ?? ??? ?????. ? ???? ?? ??? ??? ?? ??? ????.

    ?? 1. ??? ?? ???, ? ?? ??? ???, ?? ???? ??? ?? ????(MLP)

    MLP? ? ??? ??? ??? ?? ? ?? ??? ????. ?? ?? ??? ?? ???? ??? ??? ?? ??? ??, ????? ??? ??? ??? ?????. ? ???? ??? ??? ?? ??? ?? ??-?? ??? ?? ??? ??? ??, ? ??? ??(affine transform)?? ? ? ????.

    ? ?? ??? ??? ???? ???? ??? ??? ??? ???? ???, ?? ? ??? ? ?? ??? ????? ?? MLP? ? ??? ??? ???? ??? ? ????. ??? MLP? ? ??? ??? ??? ??? ???? ???? ??? ?? ? ???? ???? ?????.

    ?? ?? MLP??? ? ??? ?? ??? ?? ?? ?? ???? ?? ?????. ?? ?? 1?? ? ? ???, ? ??? ?? ?? ??? ???? ?? ?? 2? ?? ????.

    ?? 2. MLP? ?? ??? ??? ????? ??-?? ???, ???? ?? ??, ??? ??? ?? ???? ?????.

    ? ?????? ??????

    ????? ??? ?? ?? ? ??? NVIDIA ?? ??? ??? ?? ??? ???? ????. ????? CUDA? SIMT(Single Instruction, Multiple Threads) ????? ??? ?? ??(warp)? ???? ???? ??? ?? ??? ??? ? ????. ??? ?? ???? ????? ????? ? ???? ????? ???? ??? ?? ??? ?????? ??? ????. ??, ?? ??? ????? ??-?? ??? ???? ???, ?? ????? ? ???? ?? ??-?? ??? ??? ? ?? ??? ??? ??? ???? ??? ??? ????.

    ??? CUDA API? ?? ???? ????? ???? ??? ???? ??, ????? ?? ??? ???? ???? ???? ?? ?????. CUDA ??? ????? ?? ?? ?? ??? ?? ? ?? ???, Matrix Multiplication Background User’s Guide? ???? ???.

    ??? ??? ???? ?? ????? ??? ??? ?? ??? ???? API? ??????:

    • ?? ???? ????? ????? ?? ?? ?? ??
    • ??? ???? ? ?? ? ?? ??? ??
    • ? ????? ?? ???? ????, ?? ??? ????? ????? ??? ???

    ????? ??? ?? ??? ???? ?? ??? ???? ??? ??? ? ???, ??? ??? ?? ??? ? ????. ?? ?? ??? ??? ?? ? ?? ???? ??? MLP ???? ????, ??? ??? ??? ???? ???. ??? ?? ???(Shader Execution Reordering, SER)? ???? ??? ??? ????? ?????.

    MLP ??? ????? ???? ??-?? ???? ?????, ?? ? ?? ???? ??? MLP? ??? ??? ?, ????? ?? API? ? ???? ??? ?? ?? ??? ???? ?? ??-?? ??? ?? ??? ??? ???? ??? ? ????. ?? ? ?? ‘?????(cooperative)’? ????? — ?? ???? ??? ?? ??-?? ???? ??? ??-?? ???? ???? ??.

    ?? ???? = ?? ???? × ??? ???? + ???? ????

    outputMatrix = inputMatrix × weightsMatrix + biasMatrix

    ?? 3. ?? ??? ??? MLP ??? ??? ?? ??? ??-?? ??? ???? ??? ?????.

    ??? ??? ??? ??? ?? ??? 32??? ??, ?? ? ???? ??? ? ?? ??? ???? ?? ???? ?????.

    OptiX?? ?? ?? ????

    ????? ??? ????? ?? ???? ??? ???? ?? ????, ??? ?? ?? ???? ??? ? ????. OptiX??? ? ????? ??? OptixCoopVec??? ???? ??? ?????. OptiX??? ????? ??? MLP? ?? ???? ??? ???? ? ???, ??? ?? ???? ?????.

    ????? ?? API??? ??-?? ??? ?? ??? optixCoopVecMatMul ??? ?????, ? ??? ? ??? ??? ??? ?????. ??? ???? ?? ?? ??? ??? ???? ??? ?? ???, ???? ? ?? ?? ??? ?????. ??? ??? ????? ?? API? ???? ??? ?? ???? ??? ??? ? ????.

    ?? ?? = ?? ?? × ?? + ????

    outputVector = inputVector × matrix + bias

    ?? 4. ???? MLP ??? ???? ?? ??? ?? ?? ??? ???? ??? ???? ?????.

    ????? ??? ?? RTX ??? ?? ??? GPU?? OptiX? ?? ?????. ?? ??? ?? ??? optixDeviceContextGetProperty ??? OPTIX_DEVICE_PROPERTY_COOP_VEC ??? ??? ??? ? ????. ????? ??? ???? ?? ????? ?? ?? ?? ??? ?????, ?? ? ??? ?? ??? ???? ???.

    ?? ??

    ? ????? OptiX ????? ??, ? MLP ?? ??? ??? ? ???? ????? ?? API? ?????. ??? ?? ??? OptiX SDK? ??? optixNeuralTexture ??? ???? ???. ? ??? NTC SDK? ????, NTC SDK? ???? ??(??)??, ???? ??? ??? ?? ???? ????, ??? ??? ?? ???? ??(?? ??)? ?????. ???? NTC SDK? ??? ???? ???? ????, ?? optixNeuralTexture? ?? ??? ? ????.

    ????? ??? ???? ??? C++ ???? ????? ?????. ???? ??? ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ????? ?????. ?? ???? ???? ?? ????? ?? ???? ?? ? ????.

    using T_OUT = OptixCoopVec<float, 16 /*output channels*/>;
    ...
    T_OUT texel = inferTexel<T_OUT> (
    latents, weights, x, y, ... );

    ? ??? ???? OptixCoopVec<>? ?? ??? ?? ?? T_OUT? ?? ??? ??? ??? ? ????.
    evalMLP ??? ?? ?? ?? ??? ?? ?? MLP? ???? ??? ?????. ?? ?? ????, ?? ??? ?? MLP? ??? ??? ??? ?, ? ???? ????? ????, ??? ???? ??? ?????.

    template &lt;class T_OUT&gt;
    evalMLP( T_OUT&amp; outLayer, latents, mlpWeights, x, y )
    {
        using T_IN  = OptixCoopVec&lt;half, 48 /* input vec size    */ &gt;;
        using T_HID = OptixCoopVec&lt;half, 64 /* hidden layer size */ &gt;;
        T_IN networkInputs = prepareNetworkInputs_FP16&lt;T_IN&gt;(x, y, latents);
        T_HID hiddenOut1 = evalLayer&lt;T_IN, T_HID&gt;(
            networkInputs, mlpWeights, 0, scaleBiasOffset, hiddenOut1);
        T_HID hiddenOut2 = evalLayer&lt;T_HID, T_HID&gt;(
            hiddenOut1, mlpWeights, weightOffset1, scaleBiasOffset, hiddenOut2);
        T_HID hiddenOut3 = evalLayer&lt;T_HID, T_HID&gt;(
            hiddenOut2, mlpWeights, weightOffset2, scaleBiasOffset, hiddenOut3 );
        outLayer = evalLayer&lt;T_HID, T_OUT&gt;(
            hiddenOut3, mlpWeights, weightOffset3, scaleBiasOffset, outLayer);
        return true;
    }

    ? ??? ??? ??? ?? ??? ??? ??? ?? ??? ?????. ??? ??? ??? ?????:

    template <class T_IN, class T_OUT> evalLayer(
        T_IN&           inputArray,
        uint8_t*        weights,
        uint32_t        weightsOffsetInBytes,
        uint32_t&       biasOffsetInBytes,
        T_OUT&          outputArray )
    {
      outputArray = optixCoopVecMatMul <
        T_OUT,
        T_IN,
        OPTIX_COOP_VEC_ELEM_TYPE_FLOAT8_E4M3, // inputInterpretation
        MAT_LAYOUT,                           // matrixLayout
        false,                                // transpose
        T_OUT::size,                          // N
        T_IN::size,                           // K
        OPTIX_COOP_VEC_ELEM_TYPE_FLOAT8_E4M3, // matrixElementType
        OPTIX_COOP_VEC_ELEM_TYPE_FLOAT16      // biasElementType
      >(
        inputArray,                           // inputVector
        weights,                              // matrix base ptr
        weightsOffsetInBytes,                 // matrix offset
        weights,                              // bias base ptr, same as weights
        biasOffsetInBytes                     // bias offset
      );
      
      // increment offset to the next layer
      biasOffsetInBytes += T_OUT::size * sizeof( T_OUT::value_type );
      
      outputArray = activate<T_OUT>( outputArray );
    }

    ?? ?? ?? ??? ??? optixCoopVecMatMul? ??? ??? ??? ?????. ?? ??? ??? ?? ??? ???? ?? ?? ??? ??? ?? ???????. ?? ?? ???? ??? ???? ??? ?? ???? ?? ?????. ?? ?? ?? ??? ??? ??? ?????.

    ?? ??? ??? ????, evalLayer ??? ?? ? ??? ??? ??? ???(base) ???? ???? ???? ??? ?? ????? ?? ????. ???? ???, ? ???? ???? ?? ?? ???? ?? ???? ? ????? ????. ? ???? ??? ???? ??? ??, ? base ???? ?? ???(weightsOffsetInBytes, biasOffsetInBytes)? ??? ???? ?????.

    ?? ???? ??? ???? ?? ? ?? ??? ????. ??, NTC ???? ??? ??? ?? ? API? ?? ??? ??? ?? ??? ??? ??? ??? ??? ??? ?????. ??? ? ??? ???? ??? ?? ???? ????? ??? ? ?? ???. ? ?? ???, ?????? ?? API? ??? ??? ??? ???? ???? ??? ?? optixCoopVecMatMul? ???? ???? ???? ???? ???? ?????. ????? base ???? ????? ?? ????(?? ???? ???), ?? ?? ???? ??(shuffle) ? ???(unshuffle) ??? ???? ??? ????? ???? ??????.

    ?????, ??? ??? ??? ?? ???????:

    template<class T_IN>
    VecT activate(const T_IN& x, bool scaleActivation=true)
    {
        T_IN tmp    = optixCoopVecFFMA( x, T_IN( 1.0f/3.0f ), T_IN( 0.5f ) );
        tmp         = optixCoopVecMin( optixCoopVecMax( tmp, 0.0f ), 1.f ); // clamp
        T_IN result = optixCoopVecMin( x, 3.0f );
        result      = optixCoopVecMul( result, tmp );
        if( scaleActivation )
             result = optixCoopVecFFMA( result, T_IN(invStep), T_IN(bias) );
        return result;
    }

    MLP? ??? ??? ? ??? ?? ?? ???? ??? ??? ?????, ?? ??? ???? ???? ????? ?? ???? ?? ?? ????, ?? ??? ????. ???? ????? ?? ??? ??? ???? ?? ?? ?? ?? ?? ??? ?? ?????. ????? ???? ??? ? ?? ?? ?? ??? ??????, MLP?? ?? ??? ??? ???? ??? ? ?? ???? ??? ????. ?? ?? tanh, log2, exp2, min, max, ffma ? ??? ??? ???? ?????.

    ?? ??? ??? ????? ?? ? ?? ?? ??? ?????, ?? ??? ?? ?? ????. ??? ??? ?? ??? ?? ?? ??? ??? ???? ? ?? ????. ?? ??, T_IN(0.5f)?? OptixCoopVec ???? ??? ?? ??? 0.5? ??? ??? optixCoopVecFFMA? ?? ??? ? ????. ? ?? ??? ??? NTC SDK?? ???? ?????, ???? ????? ??? ?? ?? ???? ??? ?? ????. ?? ?? ? ??? ReLU ???? ?? ?? ???, optixCoopVecMax? ???? ?????.

    ?? ???

    ????? ??? RTX ?? ???? RTX Neural Texture Compression (NTC) ??? ????, ? ? ??? NVIDIA RTX Kit? ??? ?????. RTX Kit? ??? ???? ?? ?? ???? ??? ? ??? ??? ?? ?? ????? ?????. RTX Kit? ??? ???? ???, ? ?????? ?? ??? ?? ??? ??? “Get Started with Neural Rendering Using NVIDIA RTX Kit” ??? ??????.

    ?? 5. NVIDIA NTC SDK ? NVIDIA RTX ?? ?????? ???? ???? ??? ??

    ?? 5? ??? ??? ??? GeForce RTX 5080 GPU? 16GB ??? ???? ???? ?? ??? ??? ??????. ? ??? ??? ?? 100? ??? 8K UDIM ???? ??? ???, ? ???? 5?? ???? ???? ????. ???? ???? ???? ??? ??? ??, VRAM 32GB ??? ???? ??, ?? 5080 GPU? ??? ? ? ?? ?????.

    ??? NTC(Neural Texture Compression)? ???? ??? ??? ???? 3GB ??? ?????. ?? BC ?? ?????? ? ? ?? ?? ??? ?????. ??? ??? ?? ???? ??, ?????, ?????, BVH, ????? ??? ???? ??? ? ???, ??? ??? ???? ??? ?? ?? 5080 GPU?? ??? ???? ??????.

    ?? ???? RTX Neural Shading SDK? ?? ??? ? ???, ? SDK? ???? ?? ?? ??? ????? ?????, ?? ??? ??? ??????? ??? ???? ??? ?? ? ??? ??? ?? ?????. ????? ??? ??? ??? ?? ?? ??(Real-Time Neural Appearance Models)? ???? ? ??? ??? ? ? ????.

    ?? ?? ??

    ??? ??? ?? ?? ???? ???? ???:

    • ?? ? ??? ??: Tensor Core? ????? optixCoopVecMatMul ?? ? ?? ? ???? ????, ???? ?? ??????. ?? ? ?? ?? ???? ???? ?? ??? ??? ??, ???? ?? ??? ??? ? ?? ??? ?????.
    • ? ?? ??: ?? ??? ??? ? ?? ?? ??? ?? ? ????. SER(Single Execution Region)? ??? ???? ??(coalesce)??, ?? ??? ??? optixCoopVecMatMul? ???? ?? ????.
    • ??? ????: ??? ??? ??? ??? ??? ? ??? ????. OptiX? ??? ??? ?? ??? ??? ????? ?????, ?? ???? ?? ????. ??? ?? ?????? ????? optixCoopVecMatrixConvert? ?????.

    OptiX ?? ??? ??? ??

    OptiX? ?????? ??? ??? ??? ????, ???? ???? ??? ??? ?? ?????. ??? ??? OptiX Programming Guide? ?????. ?? ???? ??? ???? ? ?? ?? ??? optixCoopVecReduceSumAccumulate? optixCoopVecOuterProductAccumulate? ?? ???? ??? ??? ??? ?? ?? ? ??? ?????.

    ????

    ?????? ??? NVIDIA OptiX?? ???? ??? ?? ? API?, OptiX ??? ???? ??? ??? ?? ? ?? ??? ??? ? ??? ???????. ??? ?? ? ?? ??? MLP(?? ????) ?? ???? ???? ????? ????, cooperative vector? ?? ?? ????? ??? ? ?? ????. ???? Tensor Core? ????? ?? ? ??? ? ???? ???? ??? ?????, ?????? ??? ???? ??? ??? ??? ?? ?? ??? ??? ??? ?? ???? ???? ??-?? ? ??? ??? ? ????.

    ?????? ??? NVIDIA OptiX SDK 9.0?? ?? ????, 2025? 4? ? Agility SDK ???? ?? DirectX?? ???? ????. Vulkan? Slang??? ??? ???? ??, ???? ?? ?? ????? ??? ?? ?? ???? ??? ? ????. API? ?? ??? ??? ???? SDK? ??? PDF ?? ??? OptiX Programming Guide?? ??? ? ????.

    OptiX SDK?? RTX Neural Texture Compression? ?? ??? optixNeuralTexture ??? ???? ????. ? ????? ?????? ??? ??? ??? ?? ? ??? ?? ?? ???? ????? ????, ?? ?? BC5? BC6 ?? ?? ?? ? 20?, ??? ???? ?? ???? ?? ?? 80?? ??? ??? ??? ???? ???.

    ??? ?????? ??? ??? ??? ?? ???? ??? ??? ?????. ? ?? ??? ?? ??? ??? ???? ??? NVIDIA ??? ??? OptiX ???? ????? ??? ???.

    ?? ???

    Discuss (0)
    0

    Tags

    人人超碰97caoporen国产