VPU Encoding with NETINT Quadra
This guide walks you through deploying a virtual machine with a NETINT Quadra VPU, installing the NETINT software stack, and running hardware-accelerated video encoding with FFmpeg. By the end, you will have a working VPU-powered transcoding pipeline.
Why VPU Over CPU Encoding?
Software-based video encoding on CPUs is compute-intensive and does not scale efficiently. A single 4K HEVC transcode can saturate multiple CPU cores. VPUs are purpose-built ASICs that handle encoding and decoding in dedicated hardware, providing:
- Higher throughput — a single Quadra T1A card can encode 64 simultaneous 1080p30 streams or 16 4Kp30 streams
- Lower cost — offloading video processing frees CPU cores for application logic
- Lower power — VPUs consume a fraction of the power required by equivalent CPU encoding
Prerequisites
- A NetActuate account with access to VPU-enabled locations
- Familiarity with Linux command-line administration
- Basic knowledge of FFmpeg
Step 1: Deploy a VM with a NETINT Quadra VPU
Follow the standard VM deployment wizard at Infrastructure → Virtual Machines → + Add, with these accelerator-specific steps:
- On the CPU Type tab, toggle Include Accelerators and select VPU from the Category dropdown.
- Select a region and location that has VPU availability, then click Next.
- On the Billing tab, under Select Accelerator:
- Set Type to NETINT Quadra T1A.
- Set Attachment Type to Virtual Function (recommended for most workloads).
- Select a Firmware version and click Add.
Note: If you plan to use NETINT's Bitstreams management software, Physical attachment is recommended for best performance and compatibility.
- Configure your server size (CPU, RAM, disk) as needed.
- Under Operating System, select Ubuntu → Ubuntu 24.04 LTS (recommended for VPU workloads).
- Complete the remaining wizard steps (networking, SSH key, FQDN) and click Submit.
The VM typically builds in under 15 seconds. For the full deployment walkthrough, see Deploying a Virtual Machine.
Step 2: Verify VPU Hardware
Once the VM is running, SSH in and verify the Quadra card is visible:
ni_rsrc_mon
The output shows all detected VPU devices with their serial numbers, firmware versions, temperature, power draw, and utilization metrics for decoder, encoder, scaler, and AI engine. You should see at least one Quadra device listed.
Note: If
ni_rsrc_monis not available, you need to install the NETINT software stack first (Step 3).
Step 3: Install the NETINT Software Stack
The NETINT software stack has three components that must be installed in order: system prerequisites, the libxcoder codec library, and FFmpeg with Quadra support. Libxcoder provides the low-level interface between FFmpeg and the Quadra hardware — FFmpeg will not build correctly without it.
Install prerequisites
sudo apt-get update
sudo apt-get install -y pkg-config git gcc make g++ yasm nvme-cli
Install libxcoder
Libxcoder is NETINT's codec library that provides the driver, resource manager, and hardware abstraction layer for Quadra VPUs. It must be installed before building FFmpeg.
git clone https://github.com/NETINT-Technologies/netint_libxcoder
cd netint_libxcoder
bash build.sh
Note: Use
bash build.sh -hto see available build options. By default, libxcoder installs to/usr/local/lib,/usr/local/include, and/usr/local/bin. For custom paths, usebash configure --libdir=... --bindir=... --includedir=...followed bymake && sudo make install. See the libxcoder installation guide for details.
Build FFmpeg with Quadra support
Once libxcoder is installed, build FFmpeg with NETINT encoder/decoder support:
cd ..
git clone https://github.com/NETINT-Technologies/netint_ffmpeg
cd netint_ffmpeg
bash build_ffmpeg.sh
sudo make install
sudo ldconfig
Note: Use
bash build_ffmpeg.sh -hto see available build options. The build script automatically detects the installed libxcoder. For the complete installation guide, including alternative methods, see the NETINT Quadra Installation Guide.
Initialize VPU devices
After installation, initialize the Quadra cards:
init_rsrc
⚠️ VPU cards must be re-initialized after every reboot. To automate this, create a systemd service that runs
init_rsrcat boot:
sudo tee /etc/systemd/system/netint-init.service > /dev/null <<'EOF'
[Unit]
Description=Initialize NETINT Quadra VPU
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/init_rsrc
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable netint-init.service
Step 4: Verify FFmpeg Encoders
Confirm that the Quadra encoders are available in your FFmpeg build:
ffmpeg -encoders 2>/dev/null | grep ni_quadra
You should see output similar to:
V..... h264_ni_quadra_enc H.264 NetInt Quadra encoder (codec h264)
V..... h265_ni_quadra_enc H.265 NetInt Quadra encoder (codec hevc)
V..... av1_ni_quadra_enc AV1 NetInt Quadra encoder (codec av1)
V..... jpeg_ni_quadra_enc JPEG NetInt Quadra encoder (codec mjpeg)
You can also verify decoders and filters:
ffmpeg -decoders 2>/dev/null | grep ni_quadra
ffmpeg -filters 2>/dev/null | grep ni_quadra
Step 5: Encoding Examples
The following examples demonstrate common encoding workflows using the Quadra VPU. Replace input.mp4 with your source file.
H.264 encoding
ffmpeg -i input.mp4 -c:v h264_ni_quadra_enc -b:v 5M output_h264.mp4
H.265/HEVC encoding
ffmpeg -i input.mp4 -c:v h265_ni_quadra_enc -b:v 3M output_hevc.mp4
AV1 encoding
ffmpeg -i input.mp4 -c:v av1_ni_quadra_enc -b:v 2M output_av1.mp4
Full VPU transcode (decode + re-encode)
Decode the input on the VPU and re-encode to a different codec, keeping the entire pipeline on the card:
ffmpeg -c:v h264_ni_quadra_dec -i input.mp4 -c:v h265_ni_quadra_enc -b:v 3M output_transcoded.mp4
Note: For the full parameter reference and advanced encoding options (CRF mode, scaling, overlay, multi-stream), see the NETINT Programming Guide.
Step 6: Monitor VPU Performance
From the portal
Navigate to Infrastructure → Virtual Machines, click your VM, and expand the Accelerators section in the sidebar. You can monitor real-time graphs for Utilization (AI, Decoder, Encoder, Scaler, Uploader), Memory, Instances, Temperature, and Shared Memory with selectable time windows.
From the command line
Run ni_rsrc_mon on the VM to see live VPU utilization, temperature, and instance counts directly from the terminal. This is useful for scripting and headless monitoring.
Firmware Updates
You can update the Quadra firmware from the portal under the VM's Accelerators section. Click Update Firmware, select a new version, review the release notes, and confirm the update.
⚠️ Firmware updates require a brief interruption to the accelerator. Active encoding sessions will be affected. Schedule updates during a maintenance window when no encoding jobs are running.
Need Help?
- NETINT documentation — docs.netint.com for driver installation, API references, and codec guides
- NETINT product information — netint.com for VPU specifications and product details
- NetActuate support — contact support@netactuate.com or open a ticket from the portal