<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ethan Vance</title>
    <description>The latest articles on DEV Community by Ethan Vance (@ethan_vance).</description>
    <link>https://dev.to/ethan_vance</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3614663%2Fc8f8351b-195e-43a6-a694-692367589d6e.png</url>
      <title>DEV Community: Ethan Vance</title>
      <link>https://dev.to/ethan_vance</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ethan_vance"/>
    <language>en</language>
    <item>
      <title>How NVMe-oF Boosts Server Storage Performance</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Sat, 24 Oct 2026 09:32:29 +0000</pubDate>
      <link>https://dev.to/ethan_vance/how-nvme-of-boosts-server-storage-performance-32m6</link>
      <guid>https://dev.to/ethan_vance/how-nvme-of-boosts-server-storage-performance-32m6</guid>
      <description>&lt;p&gt;Enterprise data centers are currently facing an unprecedented infrastructure challenge. Workloads involving artificial intelligence (AI) training, real-time database analytics, and high-frequency transaction processing demand massive throughput and microsecond-level latency. While modern solid-state drives (SSDs) easily meet these demands at the local server level, a critical bottleneck emerges the moment this storage is shared across a network.&lt;/p&gt;

&lt;p&gt;Legacy storage protocols—such as Internet SCSI (iSCSI), Serial Attached SCSI (SAS), and the traditional Fibre Channel Protocol (FCP)—were fundamentally engineered for the era of mechanical spinning disks. When paired with modern flash media, these legacy protocols introduce severe software overhead and artificial bottlenecks, preventing enterprise NVMe SSDs from delivering their true potential over a network.&lt;/p&gt;

&lt;p&gt;This is exactly where NVMe over Fabrics (NVMe-oF) restructures the architecture of modern data centers. By extending the highly efficient NVMe protocol beyond the individual server chassis, NVMe-oF enables networked storage to perform identically to direct-attached local drives, virtually eliminating network latency.&lt;/p&gt;

&lt;p&gt;In this guide, we will explore the core mechanics of the NVMe-oF protocol, compare its transport options (TCP, RDMA, and FC), and break down the specific networking hardware required to eliminate data center bottlenecks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is NVMe over Fabrics (NVMe-oF)?
&lt;/h2&gt;

&lt;p&gt;To understand NVMe over Fabrics (NVMe-oF), we first need to look at standard NVMe. Originally, the Non-Volatile Memory Express (NVMe) specification was designed exclusively for local, direct-attached storage. It connected ultra-fast SSDs directly to a server's motherboard via the PCIe bus, bypassing older, slower connection methods.&lt;/p&gt;

&lt;p&gt;NVMe-oF is a network protocol extension that takes this incredible local performance and pushes it across a network. It enables networked storage to perform exactly like those direct-attached drives, maintaining microsecond-level latency and massive throughput across Ethernet, Fibre Channel, or InfiniBand networks.&lt;/p&gt;

&lt;p&gt;Here is how NVMe-oF achieves this seamless network integration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Message-Based Architecture&lt;/strong&gt;: Unlike local NVMe, which uses a memory-mapped model, NVMe-oF relies on remote communication. Commands and responses are packaged into efficient, self-contained units called capsules. This allows multiple small messages to be transmitted as a single, highly efficient unit across the network fabric.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preserving Massive Parallelism&lt;/strong&gt;: The true power of NVMe lies in its ability to do many things at once. NVMe-oF preserves this parallel architecture, supporting up to 65,535 I/O queue pairs per controller, with each queue holding up to 65,535 commands. While legacy protocols struggle with serial bottlenecks, NVMe-oF processes thousands of I/O operations simultaneously without breaking a sweat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Addressing and Discovery&lt;/strong&gt;: NVMe-oF uses NVMe Qualified Names (NQNs) to identify storage targets. It features standardized discovery mechanisms, meaning host servers can automatically locate and connect to available storage subsystems without tedious manual configuration. It also supports multipath I/O, ensuring both high availability and aggregated performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, NVMe-oF eliminates the performance penalties that have historically separated networked storage from local flash drives, allowing organizations to scale their storage architecture without sacrificing raw speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Legacy Protocols vs. NVMe-oF: Why Traditional Storage Became a Bottleneck
&lt;/h2&gt;

&lt;p&gt;Before NVMe-oF became the enterprise standard, storage networks relied on three primary protocols: Internet SCSI (iSCSI), Serial Attached SCSI (SAS), and Fibre Channel Protocol (FCP). While these protocols were highly reliable and perfectly suited for the era of spinning hard disk drives, they were fundamentally not designed for modern flash storage.&lt;/p&gt;

&lt;p&gt;When you place an ultra-fast NVMe SSD behind a legacy protocol, the network connection itself becomes a bottleneck, artificially restricting the drive from reaching its full potential. Here is exactly why traditional storage falls short compared to NVMe-oF:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Translation Penalty (SCSI Overhead)
&lt;/h3&gt;

&lt;p&gt;Legacy protocols like iSCSI and FCP rely on encapsulating old SCSI commands to transfer data. Every time an application requests data, the system has to translate the native NVMe commands into SCSI, transmit them across the network, and then translate them back to NVMe at the storage array. This constant back-and-forth translation consumes valuable CPU cycles and introduces noticeable latency. NVMe-oF eliminates this entirely. It speaks native NVMe end-to-end across the fabric, removing the middleman and the associated processing delays.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Command Queues and the Serialization Bottleneck
&lt;/h3&gt;

&lt;p&gt;One of the biggest limitations of legacy protocols is their command queuing depth. A typical SCSI-based protocol supports roughly 256 outstanding commands per device. If an application suddenly issues 10,000 parallel read requests—which is common in AI workloads or big data analytics—SCSI creates a severe serialization bottleneck, forcing commands to wait in line. NVMe-oF, by contrast, supports up to 65,535 I/O queue pairs, with each queue holding up to 65,535 commands. It operates like a massive multi-lane highway, allowing thousands of I/O operations to process concurrently without blocking.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Milliseconds vs. Microseconds Latency
&lt;/h3&gt;

&lt;p&gt;Because legacy protocols involve multiple layers of processing—such as SCSI translation, TCP segmentation, and complex IP routing—data delivery is typically measured in milliseconds. While that was fast enough for legacy web hosting, modern transaction processing systems demand much more. By stripping away these heavy protocol stacks, NVMe-oF delivers latency measured in single-digit microseconds, essentially matching the performance of a drive plugged directly into the server motherboard.&lt;/p&gt;

&lt;p&gt;By abandoning the legacy SCSI framework entirely, NVMe-oF allows data centers to finally utilize the raw speed of flash media across a distributed network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crucial Infrastructure Requirements: Network and Hardware Specs
&lt;/h2&gt;

&lt;p&gt;To achieve direct-attached flash speeds across a distributed network, NVMe-oF demands a specialized, high-performance infrastructure. Running this advanced protocol on legacy networking gear will immediately create bottlenecks, neutralizing its primary benefits.&lt;/p&gt;

&lt;p&gt;If you are deploying NVMe-oF in a modern data center or evaluating a dedicated server provider, these are the mandatory hardware specifications you need to look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High-Speed Network Bandwidth&lt;/strong&gt;: Legacy iSCSI environments could survive on 1GbE or 10GbE networks. NVMe-oF, however, generates massive throughput that requires a bare minimum of 25GbE. For true enterprise deployments, data-intensive workloads, and AI training, 100GbE, 200GbE, or even 400GbE networks are the industry standard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RDMA-Capable SmartNICs&lt;/strong&gt;: Standard Network Interface Cards (NICs) rely on the host CPU to process network traffic, which reintroduces the exact latency NVMe-oF is designed to eliminate. To achieve single-digit microsecond latency, servers must be equipped with RDMA-capable NICs (SmartNICs). These specialized cards support protocols like RoCE v2 (RDMA over Converged Ethernet) or iWARP, allowing data transfers to bypass the operating system and CPU entirely, handling the heavy lifting at the hardware level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-Grade Network Switches&lt;/strong&gt;: When you open 64,000 parallel data queues, standard switches can quickly become overwhelmed and drop packets. NVMe-oF—particularly when using RDMA transport—requires enterprise-grade switches configured for Lossless Ethernet. This involves enabling features like Priority Flow Control (PFC) and Explicit Congestion Notification (ECN) to ensure smooth, zero-drop data delivery even during massive traffic spikes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Upgrading to NVMe-oF is not just about changing the storage drives; it requires a holistic upgrade of the underlying network fabric to ensure the data has a clear, frictionless path to travel.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three NVMe-oF Transport Options: TCP, RDMA, and Fibre Channel
&lt;/h2&gt;

&lt;p&gt;NVMe over Fabrics is not a rigid, one-size-fits-all technology. Because different data centers have varying budgets, existing infrastructure, and performance requirements, the protocol was designed to operate over three primary transport types.&lt;/p&gt;

&lt;p&gt;Understanding the distinctions between these three transports is critical for selecting the right implementation for your specific workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. NVMe over TCP (NVMe/TCP)
&lt;/h3&gt;

&lt;p&gt;Introduced to the NVMe-oF specification in 2019, NVMe/TCP encapsulates NVMe commands within standard TCP/IP packets. Its biggest advantage is deployment simplicity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Pros&lt;/strong&gt;: NVMe/TCP runs on standard Ethernet infrastructure. You do not need specialized hardware; any modern Network Interface Card (NIC) capable of 10GbE or higher can support it. This makes it highly cost-effective and the preferred choice for cloud or hybrid-cloud deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Trade-off&lt;/strong&gt;: Because it relies on software initiators to handle command processing, it introduces a moderate amount of CPU overhead. Latency typically hovers between 100 and 500 microseconds—which is vastly superior to legacy iSCSI, but not quite as fast as RDMA.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. NVMe over RDMA (NVMe/RDMA)
&lt;/h3&gt;

&lt;p&gt;When applications demand the absolute lowest latency possible, NVMe/RDMA is the undisputed leader. It uses Remote Direct Memory Access (RDMA) technology—most commonly deployed as RDMA over Converged Ethernet (RoCE v2)—to transfer data directly between the host and storage memory.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Pros&lt;/strong&gt;: By bypassing the operating system and host CPU entirely, NVMe/RDMA delivers single-digit microsecond latency (often sub-10 microseconds). It essentially matches the performance of a physical drive plugged directly into the server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Trade-off&lt;/strong&gt;: It requires strict hardware prerequisites, specifically RDMA-capable SmartNICs and enterprise-grade switches configured for lossless network traffic. It is the go-to transport for High-Performance Computing (HPC), AI model training, and high-frequency financial trading.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. NVMe over Fibre Channel (NVMe/FC)
&lt;/h3&gt;

&lt;p&gt;For decades, enterprise Storage Area Networks (SANs) have relied on Fibre Channel for its rock-solid stability. NVMe/FC allows organizations to map NVMe commands directly onto Fibre Channel frames, completely bypassing the old SCSI translation layer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Pros&lt;/strong&gt;: If an enterprise already has a modern Fibre Channel infrastructure (Gen 5 switches or newer), they can adopt NVMe/FC through simple firmware upgrades without physically replacing their hardware. It delivers excellent, consistent sub-50 microsecond latency with very low CPU overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Trade-off&lt;/strong&gt;: It remains tethered to the Fibre Channel ecosystem, meaning it is primarily suited for organizations that want to protect their existing SAN investments rather than transitioning to Ethernet-based fabrics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, the choice comes down to your infrastructure realities: TCP for simplicity and cloud scale, RDMA for uncompromising peak performance, and FC for upgrading established enterprise SANs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Benefits and Real-World Use Cases of NVMe-oF&lt;/strong&gt;&lt;br&gt;
Upgrading to NVMe over Fabrics isn’t just a technical exercise for system administrators; it drives measurable, bottom-line business outcomes. When storage performance ceases to be a bottleneck, the entire IT infrastructure becomes more agile and cost-effective.&lt;/p&gt;

&lt;p&gt;Here is how adopting NVMe-oF directly benefits the enterprise:&lt;/p&gt;

&lt;h3&gt;
  
  
  Transformative Business Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure Consolidation&lt;/strong&gt;: Historically, applications requiring extreme speed were forced to rely on direct-attached local storage. This led to "stranded capacity"—expensive drives sitting idle in one server while another server ran out of space. NVMe-oF allows you to pool high-performance storage on a centralized array and share it across dozens or hundreds of servers without any performance penalty. This significantly reduces hardware sprawl and maximizes your storage investments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reclaiming CPU Resources&lt;/strong&gt;: Legacy storage protocols are incredibly taxing on server CPUs. By offloading storage processing through efficient NVMe queues (and completely bypassing the CPU with NVMe/RDMA), NVMe-oF frees up expensive processing power. This means your server CPUs can focus 100% on running your actual applications, instantly improving overall system efficiency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximizing Virtual Machine (VM) Density&lt;/strong&gt;: In virtualized environments (like VMware, KVM, or Hyper-V), NVMe-oF’s massive queue depth is a game-changer. It effectively eliminates the "noisy neighbor" problem, where one VM's sudden I/O burst slows down the rest of the server. With thousands of parallel queues, you can safely host more VMs on a single physical host while guaranteeing consistent, high-tier performance for all of them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Real-World Use Cases: Where NVMe-oF Shines
&lt;/h3&gt;

&lt;p&gt;While almost any workload benefits from faster storage, NVMe-oF is practically mandatory for modern, data-intensive applications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI and Machine Learning Training&lt;/strong&gt;: Training Large Language Models (LLMs) and advanced AI neural networks requires feeding massive datasets to GPUs as fast as possible. If the storage cannot keep up, the highly expensive GPUs sit idle waiting for data (GPU starvation). NVMe-oF provides the sustained, massive throughput required to keep AI clusters continuously fed, drastically reducing training times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Analytics and Big Data&lt;/strong&gt;: E-commerce platforms, fraud detection systems, and enterprise databases (like high-traffic SQL or NoSQL clusters) rely on processing streaming data instantly. NVMe-oF ensures that these platforms can query massive, distributed datasets with consistent microsecond response times, enabling real-time decision-making.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-Frequency Financial Trading&lt;/strong&gt;: In the financial sector, a delay of a single millisecond can result in millions of dollars in missed opportunities. Trading algorithms require storage that introduces essentially zero latency. For these ultra-competitive environments, NVMe/RDMA is the undisputed standard, providing the absolute lowest possible latency to access market data instantly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By aligning storage infrastructure with the demands of modern applications, NVMe-oF allows businesses to push the limits of what their software can achieve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: The Future of Storage Networking
&lt;/h2&gt;

&lt;p&gt;NVMe over Fabrics officially eliminates the performance penalties that have historically separated networked storage from direct-attached drives. By breaking free from the constraints of legacy SCSI protocols, organizations can finally consolidate their infrastructure, reclaim valuable CPU resources, and deliver the uncompromised microsecond latency that modern, data-intensive applications demand. Whether you implement it via TCP, RDMA, or Fibre Channel, NVMe-oF is undeniably the new standard for enterprise storage.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>techtalks</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>Run Ollama with GPU on Ubuntu Using Docker and Open WebUI</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Fri, 09 Oct 2026 06:19:30 +0000</pubDate>
      <link>https://dev.to/ethan_vance/run-ollama-with-gpu-on-ubuntu-using-docker-and-open-webui-252c</link>
      <guid>https://dev.to/ethan_vance/run-ollama-with-gpu-on-ubuntu-using-docker-and-open-webui-252c</guid>
      <description>&lt;p&gt;Running large language models locally gives developers more control over their AI environment. With Ollama, Docker, and Open WebUI, you can set up a self-hosted AI chatbot on an Ubuntu server with NVIDIA GPU acceleration.&lt;/p&gt;

&lt;p&gt;In this guide, we'll cover the essential components required to get started with GPU-powered local AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You'll Need
&lt;/h2&gt;

&lt;p&gt;Before deploying Ollama, prepare the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 22.04 or 24.04 LTS&lt;/li&gt;
&lt;li&gt;A compatible NVIDIA GPU&lt;/li&gt;
&lt;li&gt;NVIDIA drivers&lt;/li&gt;
&lt;li&gt;Docker Engine&lt;/li&gt;
&lt;li&gt;NVIDIA Container Toolkit&lt;/li&gt;
&lt;li&gt;Sufficient GPU VRAM, RAM, and storage for your chosen model&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Update the server and check your&amp;nbsp;GPU
&lt;/h2&gt;

&lt;p&gt;Log in over SSH and update the system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm Ubuntu can see your GPU:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lspci | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; nvidia
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see a line with your GPU model. If nothing appears, the GPU is not detected: check with your hosting provider before continuing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Install the NVIDIA&amp;nbsp;driver
&lt;/h2&gt;

&lt;p&gt;List the recommended driver for your GPU:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ubuntu-drivers devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install it automatically (this picks the recommended version):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ubuntu-drivers autoinstall
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reboot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After reconnecting, verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvidia-smi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see a table showing your GPU name, driver version and VRAM. If you see it, the driver works.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Secure Boot warning If Secure Boot is enabled in BIOS, the NVIDIA kernel module may refuse to load and nvidia-smi will fail. Either disable Secure Boot in BIOS/IPMI, or enroll a MOK key when the installer asks. See Troubleshooting, Problem 1.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 3: Install&amp;nbsp;Docker
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.docker.com | &lt;span class="nb"&gt;sudo &lt;/span&gt;sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Allow your user to run Docker without &lt;code&gt;sudo&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Log out and log back in (or run &lt;code&gt;newgrp docker&lt;/code&gt;), then test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Install the NVIDIA Container Toolkit
&lt;/h2&gt;

&lt;p&gt;This is the piece that lets Docker containers use your GPU.&lt;br&gt;
Add NVIDIA's repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://nvidia.github.io/libnvidia-container/gpgkey | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g'&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/nvidia-container-toolkit.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nvidia-container-toolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tell Docker to use the NVIDIA runtime, then restart Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nvidia-ctk runtime configure &lt;span class="nt"&gt;--runtime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Test GPU access inside a container
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--gpus&lt;/span&gt; all ubuntu nvidia-smi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you see the same GPU table as in Step 2, GPU passthrough to Docker works. Do not continue until this test passes&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Create the project&amp;nbsp;folder
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/ai-server &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/ai-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.1 Create the docker-compose.yml
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;nano docker-compose.yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Paste this&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ollama&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ollama/ollama:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ollama&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ollama_data:/root/.ollama&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;OLLAMA_KEEP_ALIVE=30m&lt;/span&gt;        &lt;span class="c1"&gt;# keep model loaded in VRAM for 30 min&lt;/span&gt;
    &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;reservations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;devices&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nvidia&lt;/span&gt;
              &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;
              &lt;span class="na"&gt;capabilities&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;gpu&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="c1"&gt;# No "ports:" section on purpose. Ollama has no login,&lt;/span&gt;
    &lt;span class="c1"&gt;# so it must NOT be reachable from the internet.&lt;/span&gt;

  &lt;span class="na"&gt;open-webui&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/open-webui/open-webui:main&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;open-webui&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ollama&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;OLLAMA_BASE_URL=http://ollama:11434&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ENABLE_SIGNUP=${ENABLE_SIGNUP:-true}&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;open_webui_data:/app/backend/data&lt;/span&gt;

  &lt;span class="na"&gt;caddy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy:2&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;open-webui&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./Caddyfile:/etc/caddy/Caddyfile:ro&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;caddy_data:/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;caddy_config:/config&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ollama_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;open_webui_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;caddy_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;caddy_config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save with &lt;code&gt;Ctrl+O&lt;/code&gt;, Enter, then &lt;code&gt;Ctrl+X&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Create the&amp;nbsp;.env&amp;nbsp;file
&lt;/h3&gt;

&lt;p&gt;Generate a random secret key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"WEBUI_SECRET_KEY=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;openssl rand &lt;span class="nt"&gt;-hex&lt;/span&gt; 32&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .env
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"ENABLE_SIGNUP=true"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.3 Create the Caddyfile
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Option A&lt;/strong&gt;: with a domain (recommended, free automatic HTTPS). First point your domain's DNS A record to your server IP, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Caddyfile &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
ai.yourdomain.com {
    reverse_proxy open-webui:8080
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;ai.yourdomain.com&lt;/code&gt; with your real domain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B: no domain (testing only, plain HTTP).&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Caddyfile &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
:80 {
    reverse_proxy open-webui:8080
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Open the&amp;nbsp;firewall
&lt;/h2&gt;

&lt;p&gt;Only SSH, HTTP and HTTPS are needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 22/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 80/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 443/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⭐ Important: Docker can bypass UFW for any port you publish with ports:. That is why Ollama has no published port in the compose file above. Never publish 11434 to the internet.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 7: Start everything
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check that all three containers are running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker compose ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 8: Download your first&amp;nbsp;model
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama pull llama3.1:8b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test it from the command line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama run llama3.1:8b &lt;span class="s2"&gt;"Explain what a dedicated server is in two sentences."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Verify the model is using the GPU (the most important check)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While a model is loaded, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at the PROCESSOR :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;100% GPU:&lt;/strong&gt; Perfect: the whole model is in VRAM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;40%/60%:&lt;/strong&gt; Model is too big for VRAM, partly on CPU (slow). Use a smaller model or lower quantization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CPU/GPU:&lt;/strong&gt; Model is too big for VRAM, partly on CPU (slow). Use a smaller model or lower quantization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% CPU:&lt;/strong&gt; GPU is not being used. See Troubleshooting, Problem 3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also watch GPU usage live in a second terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;watch &lt;span class="nt"&gt;-n&lt;/span&gt; 1 nvidia-smi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 9: Open the chat interface and create your admin&amp;nbsp;account
&lt;/h2&gt;

&lt;p&gt;Visit &lt;code&gt;https://ai.yourdomain.com&lt;/code&gt; (or &lt;code&gt;http://YOUR_SERVER_IP&lt;/code&gt; for Option B).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Get Started.&lt;/li&gt;
&lt;li&gt;Create your account. The first account becomes the administrator.&lt;/li&gt;
&lt;li&gt;Pick your model from the dropdown at the top and start chatting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lock down registration (do this right after creating your&amp;nbsp;admin)&lt;/strong&gt;&lt;br&gt;
Otherwise anyone who finds your URL can sign up.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/ENABLE_SIGNUP=true/ENABLE_SIGNUP=false/'&lt;/span&gt; .env
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ Note In some Open WebUI versions, the signup setting is also stored in the admin panel after first start. If signups are still open, go to Admin Panel → Settings → General and turn off Enable New Sign Ups.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Which model should I run? (VRAM&amp;nbsp;guide)
&lt;/h2&gt;

&lt;p&gt;Rule of thumb for 4-bit quantized models (the Ollama default): model size in GB is roughly VRAM needed, plus 1 to 2 GB for context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your GPU VRAM:&lt;/strong&gt; 6 to 8 GB&lt;br&gt;
&lt;strong&gt;Comfortable model size&lt;/strong&gt;: 3B to 8B&lt;br&gt;
&lt;strong&gt;Example use&lt;/strong&gt;: Chat, summaries, simple coding help&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your GPU VRAM&lt;/strong&gt;: 12 to 16 GB&lt;br&gt;
&lt;strong&gt;Comfortable model size:&lt;/strong&gt; 8B to 14B&lt;br&gt;
&lt;strong&gt;Example use:&lt;/strong&gt; Better reasoning, coding&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your GPU VRAM&lt;/strong&gt;: 24 GB&lt;br&gt;
&lt;strong&gt;Comfortable model size&lt;/strong&gt;: up to ~30B&lt;br&gt;
&lt;strong&gt;Example use&lt;/strong&gt;: Strong general assistant&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your GPU VRAM&lt;/strong&gt;: 48 GB&lt;br&gt;
&lt;strong&gt;Comfortable model size&lt;/strong&gt;: up to ~70B&lt;br&gt;
&lt;strong&gt;Example use&lt;/strong&gt;: Near top-tier open models&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your GPU VRAM&lt;/strong&gt;: 80 GB+&lt;br&gt;
&lt;strong&gt;Comfortable model size&lt;/strong&gt;: 70B+ with long context&lt;br&gt;
&lt;strong&gt;Example use&lt;/strong&gt;: Heavy or multi-user workloads&lt;/p&gt;

&lt;p&gt;Browse available models at &lt;code&gt;ollama.com/library&lt;/code&gt; and pull any with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama pull MODEL_NAME:TAG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;List installed models, and delete ones you no longer need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama list
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama &lt;span class="nb"&gt;rm &lt;/span&gt;MODEL_NAME:TAG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using the API from your own&amp;nbsp;apps
&lt;/h2&gt;

&lt;p&gt;Ollama is OpenAI-compatible. Because we did not publish the port, call it from inside the Docker network, or temporarily test from the server itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama curl http://localhost:11434/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "llama3.1:8b",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For remote API access, put it behind an authenticated gateway or use a VPN such as WireGuard. Never expose raw Ollama to the internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problem 1 - nvidia-smi says "NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA&amp;nbsp;driver"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Likely causes and fixes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have not rebooted after installing the driver. Run sudo reboot.&lt;/li&gt;
&lt;li&gt;Secure Boot is on. Check with mokutil --sb-state. If enabled, disable Secure Boot in BIOS/IPMI or enroll the MOK key.&lt;/li&gt;
&lt;li&gt;Kernel and driver mismatch after a kernel update. Reinstall:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--reinstall&lt;/span&gt; linux-headers-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ubuntu-drivers autoinstall
&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The open-source nouveau driver is loaded. Check with lsmod | grep nouveau. If it shows, blacklist it:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"blacklist nouveau&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;options nouveau modeset=0"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/modprobe.d/blacklist-nouveau.conf
&lt;span class="nb"&gt;sudo &lt;/span&gt;update-initramfs &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Problem 2 -  docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
&lt;/h3&gt;

&lt;p&gt;The NVIDIA Container Toolkit is missing or Docker was not configured. Re-run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nvidia-container-toolkit
&lt;span class="nb"&gt;sudo &lt;/span&gt;nvidia-ctk runtime configure &lt;span class="nt"&gt;--runtime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then retest: docker run - rm - gpus all ubuntu nvidia-smi&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem 3 -  Ollama is running on CPU, not GPU ("Ollama not using&amp;nbsp;GPU")
&lt;/h3&gt;

&lt;p&gt;Work through this checklist in order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does nvidia-smi work on the host? If not, go to Problem 1.&lt;/li&gt;
&lt;li&gt;Does docker run --rm --gpus all ubuntu nvidia-smi  work? If not, go to Problem 2.&lt;/li&gt;
&lt;li&gt;Does your compose file contain the deploy.resources.reservations.devices block for the ollama service? Without it, the container gets no GPU.&lt;/li&gt;
&lt;li&gt;Check the Ollama logs for GPU detection messages:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs ollama 2&amp;gt;&amp;amp;1 | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"gpu|cuda|vram"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Is the model simply too large for your VRAM? Run ollama ps. A split such as 30%/70% CPU/GPU means it is overflowing. Use a smaller model.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Problem 4 -  GPU works at first, then Ollama falls back to CPU after some&amp;nbsp;time
&lt;/h3&gt;

&lt;p&gt;This is a known issue on some Linux setups where the GPU driver state is lost. Try reloading the UVM module and restarting the container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;rmmod nvidia_uvm &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;modprobe nvidia_uvm
docker restart ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it keeps happening, make sure you are on a recent driver version and keep the system updated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem 5 - Open WebUI shows no models, or "Ollama connection error"
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Confirm OLLAMA_BASE_URL=&lt;a href="http://ollama:11434" rel="noopener noreferrer"&gt;http://ollama:11434&lt;/a&gt; is set and both containers are in the same compose project.&lt;/li&gt;
&lt;li&gt;Check Ollama is up: docker compose ps and docker logs ollama.&lt;/li&gt;
&lt;li&gt;Confirm you actually pulled a model: docker exec -it ollama ollama list.&lt;/li&gt;
&lt;li&gt;Restart: docker compose restart open-webui.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Problem 6 - HTTPS does not work / Caddy shows certificate errors
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;DNS A record must point to your server IP before starting Caddy. Check with dig +short ai.yourdomain.com.&lt;/li&gt;
&lt;li&gt;Ports 80 and 443 must be open in UFW and any provider-level firewall.&lt;/li&gt;
&lt;li&gt;Read the logs: docker logs caddy.&lt;/li&gt;
&lt;li&gt;If you hit certificate rate limits from repeated failed attempts, wait and retry, or test with Option B first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Problem 7 - "CUDA out of memory" or the model fails to&amp;nbsp;load
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use a smaller model or a smaller quantization.&lt;/li&gt;
&lt;li&gt;Reduce context length in Open WebUI (Settings → Advanced Params → Context Length).&lt;/li&gt;
&lt;li&gt;Make sure no other process is holding VRAM: nvidia-smi shows processes using the GPU.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Problem 8 - Responses are very&amp;nbsp;slow
&lt;/h3&gt;

&lt;p&gt;Run ollama ps: if it is not 100% GPU, that is your cause.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large context windows slow things down. Lower the context length.&lt;/li&gt;
&lt;li&gt;First request after idle is slower because the model loads into VRAM. OLLAMA_KEEP_ALIVE=30m (already set) reduces this.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Problem 9 - Port 3000 or 11434 is reachable from the&amp;nbsp;internet
&lt;/h3&gt;

&lt;p&gt;You should not publish these ports. Remove any ports: entries for ollama and open-webui, then run docker compose up -d. Remember Docker bypasses UFW for published ports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintenance
&lt;/h2&gt;

&lt;p&gt;Update to the latest versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/ai-server
docker compose pull
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
docker image prune &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Back up your data (chats, users, settings):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; ai-server_open_webui_data:/data &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/backup ubuntu &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;tar &lt;/span&gt;czf /backup/open-webui-backup.tar.gz /data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(The volume name is your folder name plus &lt;code&gt;_open_webui_data&lt;/code&gt;. Check yours with &lt;code&gt;docker volume ls&lt;/code&gt;.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Useful daily commands:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;See running containers&lt;/strong&gt;:&lt;code&gt;docker compose ps&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View logs&lt;/strong&gt;:&lt;code&gt;docker compose logs -f&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loaded models&lt;/strong&gt;:&lt;code&gt;docker exec -it ollama ollama ps&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop everything&lt;/strong&gt;:&lt;code&gt;docker compose down&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start everything&lt;/strong&gt;:&lt;code&gt;docker compose up -d&amp;nbsp;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU usage&lt;/strong&gt;:&lt;code&gt;nvidia-smi&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SSH key login only (disable password login)&lt;/li&gt;
&lt;li&gt;Ollama port is not published&lt;/li&gt;
&lt;li&gt;Sign-ups disabled after creating the admin&lt;/li&gt;
&lt;li&gt;HTTPS enabled via Caddy&lt;/li&gt;
&lt;li&gt;WEBUI_SECRET_KEY set to a random value&lt;/li&gt;
&lt;li&gt;Firewall allows only ports 22, 80, 443&lt;/li&gt;
&lt;li&gt;Regular updates and backups scheduled&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>docker</category>
      <category>ubuntu</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How Bare-Metal Dedicated GPU Servers Prepare You for NVIDIA’s CUDA Rust</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Thu, 08 Oct 2026 07:03:17 +0000</pubDate>
      <link>https://dev.to/ethan_vance/how-bare-metal-dedicated-gpu-servers-prepare-you-for-nvidias-cuda-rust-23ko</link>
      <guid>https://dev.to/ethan_vance/how-bare-metal-dedicated-gpu-servers-prepare-you-for-nvidias-cuda-rust-23ko</guid>
      <description>&lt;p&gt;NVIDIA is fundamentally changing native GPU programming by bringing Rust directly to GPU kernels, setting a new standard for AI systems development. By compiling Rust natively to PTX, developers can now eliminate complex memory leaks, data races, and runtime crashes entirely at compile time. This shift introduces two primary development tracks—the granular SIMT model (&lt;code&gt;cuda-oxide&lt;/code&gt;) and the compiler-optimized Tile abstraction (&lt;code&gt;cutile-rs&lt;/code&gt;)—giving engineers unprecedented memory safety without sacrificing bare-metal performance.&lt;/p&gt;

&lt;p&gt;However, transitioning to this memory-safe ecosystem introduces new infrastructure bottlenecks. Heavy compilation pipelines and bleeding-edge toolchains require massive CPU resources, stable OS-level configurations, and completely isolated environments. In this guide, we break down how these two CUDA Rust tracks work, how strict borrowing rules prevent GPU crashes, and why properly compiling and benchmarking these next-generation workloads strictly demands the unthrottled power and root access of bare-metal dedicated GPU servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Shift to Native Rust for GPU Kernels
&lt;/h2&gt;

&lt;p&gt;In September 2026, NVIDIA announced a major shift in native GPU programming: the introduction of CUDA Rust. For years, writing GPU kernels meant relying exclusively on CUDA C++ or CUDA Python. However, the systems layer of AI—spanning inference engines, serving infrastructure, and drivers—is rapidly changing, and Rust is becoming the industry standard.&lt;/p&gt;

&lt;p&gt;The reason is simple. Rust catches entire classes of concurrency and memory bugs at compile time without giving up bare-metal performance. NVIDIA is already driving this shift; the Nova Linux driver is written in Rust, and NVTX has Rust bindings.&lt;/p&gt;

&lt;p&gt;Until recently, the GPU kernel itself was the exception. You could launch kernels from Rust, but the kernel code had to be written in another language. NVIDIA CUDA Rust finally closes that gap. Developers can now write GPU kernels directly in Rust and compile them natively to PTX (Parallel Thread Execution), rather than wrapping code from somewhere else.&lt;/p&gt;

&lt;p&gt;However, because this technology is still in early alpha and requires heavy compilation power, testing it on a standard laptop or a shared VPS is a bottleneck. To compile complex Rust code and run early-stage kernels without crashing, developers need the isolated, high-performance environment of a bare-metal dedicated GPU server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Approaches to CUDA Rust: SIMT vs. Tile
&lt;/h2&gt;

&lt;p&gt;NVIDIA provides two distinct programming tracks for writing GPU kernels in Rust, matching the existing models in CUDA. The choice depends on how much manual control you need over the hardware versus letting the compiler optimize the execution architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The SIMT Track (cuda-oxide)
&lt;/h3&gt;

&lt;p&gt;SIMT (Single Instruction, Multiple Threads) is the traditional GPU programming model familiar to developers who write in CUDA C++ or numba-cuda. In this track, you write code dictating exactly what a single thread does, and the GPU launches thousands of them in parallel.&lt;/p&gt;

&lt;p&gt;NVIDIA implements this through &lt;code&gt;cuda-oxide&lt;/code&gt;, a custom rustc codegen backend. It intercepts compilation, routing functions through Rust MIR, the Pliron IR framework, and LLVM IR, ultimately translating them into PTX.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Key characteristics of the SIMT track:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Granular Hardware Control:&lt;/strong&gt; You manage thread indexing and memory allocation directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory Safety Mechanism&lt;/strong&gt;: Because standard Rust prevents multiple threads from holding a mutable reference (&lt;code&gt;&amp;amp;mut&lt;/code&gt;) to the same array, &lt;code&gt;cuda-oxide&lt;/code&gt; introduces &lt;code&gt;DisjointSlice&lt;/code&gt;. This custom type splits a single mutable borrow into per-thread pieces, granting each thread exclusive access to its own element.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System Requirements&lt;/strong&gt;: This is a low-level approach requiring Linux, a GPU with Compute Capability 8.0+, the CUDA 12.x toolkit, and a pinned nightly Rust toolchain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. The Tile Track (cutile-rs)
&lt;/h3&gt;

&lt;p&gt;The Tile model represents a newer, higher-level abstraction. Instead of dealing with individual scalar values and manual thread counts, you perform computations on tiles (sub-tensors) of data.&lt;/p&gt;

&lt;p&gt;Powered by the &lt;code&gt;cutile-rs&lt;/code&gt; crate, each tile block runs the kernel body as a single logical thread. The #[cutile::module] macro embeds the kernel's AST into the host binary, which is then JIT-compiled through CUDA Tile IR exactly when it is launched.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key characteristics of the Tile track:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compiler Optimization&lt;/strong&gt;: The Tile IR compiler decides how your tiles map onto the physical GPU architecture, meaning your source code isn't locked into architecture-specific choices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplified Safety Constraints&lt;/strong&gt;: There is no need for &lt;code&gt;DisjointSlice&lt;/code&gt;. The Tile track uses a .partition() method on the host side. This automatically partitions data chunks, assigning exclusive ownership to each tile block, which satisfies Rust's strict &lt;code&gt;&amp;amp;mut&lt;/code&gt;borrowing rules by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lighter Requirements&lt;/strong&gt;: Unlike SIMT, the Tile track works on stable Rust (1.89 or newer). It requires CUDA 13.3 and Compute Capability 8.0+, but eliminates the need for nightly toolchains and custom LLVM setups.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SIMT vs. Tile: Which CUDA Rust Model Should You Choose?
&lt;/h2&gt;

&lt;p&gt;When starting a new project, NVIDIA’s guidance is straightforward: reach for the Tile track first.&lt;/p&gt;

&lt;p&gt;Because the Tile IR compiler automatically decides how to map tiles onto the underlying GPU architecture, your source code remains clean and hardware-agnostic. You only need to drop down to the SIMT track when your specific workload demands manual thread indexing, hyper-specific control over the execution grid, or custom shared memory management.&lt;/p&gt;

&lt;p&gt;Ultimately, the choice doesn't lock you in. NVIDIA plans to support inter-language interoperability, allowing you to use the CUDA exposure that best fits your existing stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Real Advantage: Compile-Time Memory Safety
&lt;/h3&gt;

&lt;p&gt;Regardless of whether you choose SIMT or Tile, the biggest advantage of writing GPU kernels in Rust is what happens before the code ever hits the hardware.&lt;/p&gt;

&lt;p&gt;In traditional C++, having thousands of parallel threads accessing the same memory buffers in no guaranteed order is a recipe for disaster. If two threads hit the same address and one is writing, the execution order dictates the result. These types of data races and aliasing bugs rarely reproduce on demand—they often pass unit tests only to fail catastrophically in production.&lt;/p&gt;

&lt;p&gt;Rust fixes this by construction. Both &lt;code&gt;cuda-oxide&lt;/code&gt; and &lt;code&gt;cutile-rs&lt;/code&gt; enforce strict borrowing rules at compile time: inputs can be shared (&lt;code&gt;&amp;amp;&lt;/code&gt;), but an output buffer (&lt;code&gt;&amp;amp;mut&lt;/code&gt;) must belong exclusively to a single writer.&lt;/p&gt;

&lt;p&gt;If a developer accidentally passes an output buffer as one of its own inputs, the Rust compiler immediately intervenes, halting the build with a borrowing error (e.g., &lt;code&gt;error[E0502]: cannot borrow as mutable because it is also borrowed as immutable&lt;/code&gt;). By catching classic aliasing mistakes at compile time, CUDA Rust eliminates an entire class of runtime GPU bugs before they ever happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  How CUDA Rust Supercharges GPU Servers
&lt;/h2&gt;

&lt;p&gt;The introduction of CUDA Rust isn't just a syntax update for developers—it is a massive upgrade for how efficiently a GPU server operates. By bringing Rust’s famous "fearless concurrency" to the GPU, the underlying server hardware gains completely new operational advantages:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 100% Hardware Utilization (Zero Runtime Overhead)
&lt;/h3&gt;

&lt;p&gt;Historically, running AI workloads meant relying on Python wrappers or heavy abstraction layers, which inevitably waste server CPU cycles and create latency. CUDA Rust compiles natively to PTX (Parallel Thread Execution). This means there is zero runtime overhead. Every single compute cycle on your GPU server is dedicated purely to processing the AI model, resulting in drastically faster inference times.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Crash-Free Uptime (No More Memory Leaks)
&lt;/h3&gt;

&lt;p&gt;One of the biggest issues with traditional C++ GPU kernels is memory mismanagement—specifically data races and aliasing bugs that cause Out-of-Memory (OOM) errors and server application crashes. Because CUDA Rust enforces strict borrowing rules at compile time, these memory errors are physically impossible in production. Your GPU servers will run heavy workloads 24/7 with rock-solid stability, completely eliminating the need for unexpected reboots.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Crash-Free Uptime (No More Memory Leaks)
&lt;/h3&gt;

&lt;p&gt;A modern GPU server runs thousands of threads simultaneously. When multiple threads try to write to the same memory block, it corrupts the data. CUDA Rust introduces mechanisms like &lt;code&gt;DisjointSlice&lt;/code&gt; (in SIMT) and automatic partitioning (in Tile) that give each thread exclusive access to its own data chunk. This guarantees that massive parallel computations run flawlessly without data corruption.&lt;/p&gt;

&lt;h3&gt;
  
  
  The MIG Servers Solution
&lt;/h3&gt;

&lt;p&gt;This shift is exactly why shared cloud instances and local workstations are no longer enough. To test and deploy NVIDIA’s CUDA Rust efficiently, developers need Bare-Metal Dedicated GPU Servers.&lt;/p&gt;

&lt;p&gt;We provide unmetered, dedicated environments engineered for deep-level systems programming and AI inference. When you rent a dedicated GPU server from us, you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compute Capability 8.0+ Hardware&lt;/strong&gt;: Ready-to-deploy enterprise GPUs (including NVIDIA A100, H100, and high-end RTX series) that perfectly match CUDA Rust’s strict requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% Root Access&lt;/strong&gt;: Install your pinned nightly toolchains, custom CUDA drivers, and cargo-oxide environments without restrictions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Virtualization Overhead&lt;/strong&gt;: True bare-metal performance ensures that when you benchmark your Rust kernels, you are measuring the hardware's raw power&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Future of GPU Kernels is Memory-Safe
&lt;/h2&gt;

&lt;p&gt;NVIDIA’s push into native Rust for GPU programming is not just an experimental side project; it is the new baseline for systems-level AI development. By allowing developers to compile Rust directly to PTX, NVIDIA is closing the longest-standing gap in the AI stack. The memory safety that Rust brings to host-side infrastructure—like drivers and inference engines—is finally moving down to the kernel level.&lt;/p&gt;

&lt;p&gt;While both &lt;code&gt;cuda-oxide&lt;/code&gt; and &lt;code&gt;cutile-rs&lt;/code&gt; are currently in early testing, the engineering trajectory is clear. The days of hunting down elusive data races, manual aliasing bugs, and execution order crashes in thousands of parallel threads are coming to an end.&lt;/p&gt;

&lt;p&gt;For developers, the transition starts now. Whether you choose the granular hardware control of the SIMT track or the compiler-optimized abstraction of the Tile track, understanding how strict borrowing rules apply to GPU execution is going to be a mandatory skill. The ecosystem will inevitably shift toward these memory-safe constructs for building the next generation of scalable, high-performance AI runtimes.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>nvidia</category>
      <category>ai</category>
      <category>gpu</category>
    </item>
    <item>
      <title>AMD EPYC 9006 "Venice" CPUs: Architecting the Agentic AI Stack</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Thu, 08 Oct 2026 05:43:27 +0000</pubDate>
      <link>https://dev.to/ethan_vance/amd-epyc-9006-venice-cpus-architecting-the-agentic-ai-stack-1ggk</link>
      <guid>https://dev.to/ethan_vance/amd-epyc-9006-venice-cpus-architecting-the-agentic-ai-stack-1ggk</guid>
      <description>&lt;p&gt;Modern AI infrastructure has rapidly transitioned from static, monolithic training and inference clusters to highly dynamic Agentic AI pipelines. Unlike traditional models that rely on predictable compute cycles, agentic systems process single requests through complex, multi-stage execution chains encompassing data retrieval, external tool calls, and real-time code execution.&lt;/p&gt;

&lt;p&gt;This architectural shift creates a highly variable compute footprint. An agentic workflow is inherently shape-shifting, demanding fluctuating computational capacities and dynamic resource allocation across different server nodes during a single execution loop.&lt;/p&gt;

&lt;p&gt;Consequently, rigid hardware deployments are no longer viable for modern data centers. Supporting autonomous AI agents requires strict architectural flexibility at every layer of the technology stack. For enterprise environments, this necessitates highly adaptable server CPUs capable of processing diverse, shifting computational profiles without introducing latency or performance bottlenecks into the agentic pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Converged Compute Demands of Agentic Workflows
&lt;/h2&gt;

&lt;p&gt;Enterprise environments have historically managed varying system profiles for distinct workloads, provisioning separate infrastructure for databases, virtualization, real-time analytics, web services, and high-performance technical computing. Agentic AI disrupts this traditional model by converging multiple computational profiles into a single, cohesive execution pipeline.&lt;/p&gt;

&lt;p&gt;Instead of isolating tasks, an AI agent might query a vector database, execute analytical Python code, and render a web service response within milliseconds. To support this, modern server architecture must natively handle diverse, concurrent workloads without the latency overhead of routing tasks across fragmented, specialized clusters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter the 6th Gen AMD EPYC™ 9006 "Venice" Architecture
&lt;/h2&gt;

&lt;p&gt;Addressing the critical need for multi-workload flexibility, AMD’s newly evaluated 6th Gen AMD EPYC™ 9006 "Venice" server CPUs deliver a comprehensive solution. Rather than relying on narrow optimizations for specific tasks, the Venice architecture is engineered to execute across general-purpose, enterprise, cloud-native, AI, and high-performance computing (HPC) workloads with exceptional efficiency.&lt;/p&gt;

&lt;p&gt;The AMD EPYC 9006 series represents a highly scalable processor portfolio built upon a common software foundation. The lineup spans from lightweight 8-core deployments tailored for edge environments up to massive 256-core flagship processors designed for rack-scale AI host nodes.&lt;/p&gt;

&lt;p&gt;This tiered architectural approach ensures that each specific role within an agentic pipeline can leverage the exact processor profile it requires, completely eliminating the need to maintain separate operating environments. Currently in production, the "Venice" CPUs are actively being integrated into major OEM platforms, with leading cloud service providers slated for deployment later this year.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Benchmarks: EPYC 9996 vs. Competing Architectures
&lt;/h2&gt;

&lt;p&gt;To quantify this architectural flexibility, extensive testing evaluates the flagship AMD EPYC™ 9996 server CPU against major market alternatives across a highly diverse set of AI, enterprise, and technical workloads.&lt;/p&gt;

&lt;p&gt;The data below reveals significant throughput and per-core performance advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SPECrate® 2026 Integer Performance&lt;/strong&gt;: The EPYC 9996 delivers 1.2x higher per-core performance and an impressive 2.24x platform-level performance advantage over an Nvidia Vera-based platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise &amp;amp; Cloud-Native Workloads&lt;/strong&gt;: Across highly concurrent applications—including server-side Java, OpenSSL cryptography, MongoDB, Redis, NGINX web serving, and transaction processing—AMD testing reports substantial gains ranging from 2.4x to 3.7x.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-Performance Computing (HPC)&lt;/strong&gt;: When benchmarked against the Intel® Xeon® 6980P processor in complex compute-heavy tasks like molecular dynamics, materials modeling, and weather forecasting, the EPYC 9996 maintains a 1.8x to 3.13x performance lead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Crucial Data Center Metric&lt;/strong&gt;: In a modeled 100-kilowatt rack configuration, the AMD EPYC 9996 CPU is estimated to deliver 3.4 times the total throughput of a comparable Nvidia Vera-based platform, drastically improving power-to-performance ratios for enterprise data centers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Balancing Per-Core Performance with Massive Core Density
&lt;/h2&gt;

&lt;p&gt;The visual architecture of the AMD EPYC processor illustrates how this performance is physically achieved on the server motherboard. Notice the dense thermal and memory interface layout surrounding the core silicon—this physical design is what enables the chip to balance two historically competing server requirements: latency and concurrency.&lt;/p&gt;

&lt;p&gt;In an agentic AI pipeline, strong loaded per-core performance is mandatory for accelerating latency-sensitive sequential work, such as rapid database querying or executing complex logical inferences.&lt;/p&gt;

&lt;p&gt;Simultaneously, massive core density is required to support the extreme concurrency of agentic tools, allowing hundreds of parallel API calls and vector searches to run without bottlenecking rack-level throughput. By utilizing a scalable processor portfolio, enterprise customers can precisely optimize for both latency and concurrency across their server fleet without imposing compromised hardware constraints on specific stages of their AI workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Future-Proofing Your Infrastructure for Varied Workloads&lt;/strong&gt;&lt;br&gt;
The trajectory of Agentic AI guarantees one absolute certainty: workloads will only continue to diversify. As AI agents gain the ability to interact with more complex external toolchains, handle multimodal data streams, and execute multi-step logic autonomously, the computational demands placed on servers will become increasingly unpredictable.&lt;/p&gt;

&lt;p&gt;The strategic answer to a highly varied software workload has never been rigid, single-purpose hardware. Future-proofing enterprise AI infrastructure requires deploying a compute foundation where flexibility is natively built into the silicon. By leveraging adaptable, high-density architectures like the AMD EPYC 9006 series, organizations can confidently scale their data centers today, knowing their server nodes possess the exact shape and power required for whatever AI workflows emerge tomorrow.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>devops</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Intel Xeon 6 Dedicated Servers: Performance &amp; Memory Guide</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Fri, 18 Sep 2026 04:20:43 +0000</pubDate>
      <link>https://dev.to/ethan_vance/intel-xeon-6-dedicated-servers-performance-memory-guide-301j</link>
      <guid>https://dev.to/ethan_vance/intel-xeon-6-dedicated-servers-performance-memory-guide-301j</guid>
      <description>&lt;p&gt;As workloads like AI, cloud-native applications, and large in-memory databases explode, the demands placed on server infrastructure have never been higher. To meet these intensive computing challenges, the &lt;strong&gt;&lt;a href="https://www.migservers.com/dedicated-servers/intel-xeon-6/" rel="noopener noreferrer"&gt;Intel Xeon 6&lt;/a&gt;&lt;/strong&gt; processor lineup represents a massive architectural shift.&lt;/p&gt;

&lt;p&gt;For those of us architecting or managing &lt;a href="https://www.migservers.com/dedicated-servers/" rel="noopener noreferrer"&gt;dedicated server hosting&lt;/a&gt;, raw compute power alone doesn't cut it anymore. We need efficiency, maximum scalability, and lightning-fast data transfer to prevent bottlenecks. &lt;/p&gt;

&lt;p&gt;Here is a deep dive into how the new Xeon 6 architecture and DDR5 memory are redefining data center performance.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Intel Xeon 6 splits into E-cores (for 3:1 density consolidation) and P-cores (for raw speed/AI). The biggest game-changer is the memory controller, unlocking &lt;strong&gt;6000 MT/s&lt;/strong&gt; in a 2 DIMM per channel (2DPC) configuration—crushing the memory bottlenecks that plague modern virtualization and database workloads.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Architecture Split: E-Cores vs. P-Cores
&lt;/h2&gt;

&lt;p&gt;Unlike previous generations, Intel Xeon 6 processors are split into two distinct series. This allows server architects to provision exact hardware for specific workload needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  🟢 Efficient-cores (E-cores): Sierra Forest-SP
&lt;/h3&gt;

&lt;p&gt;Built primarily for cloud-native and scale-out workloads, E-cores prioritize rack density and power efficiency. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Benefit:&lt;/strong&gt; Run significantly more instances and VMs per server rack while keeping thermal and energy limits strictly controlled. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Stat:&lt;/strong&gt; Delivers an impressive &lt;strong&gt;3:1 rack consolidation&lt;/strong&gt; compared to older 2nd Gen Intel Xeon processors, drastically lowering TCO.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔵 Performance-cores (P-cores): Granite Rapids
&lt;/h3&gt;

&lt;p&gt;Engineered for traditional, heavy-duty enterprise applications requiring predictable, low latency.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Benefit:&lt;/strong&gt; Perfect match for transaction-heavy systems, real-time analytics, and massive SQL/NoSQL databases. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Stat:&lt;/strong&gt; When paired with advanced MRDIMMs, Xeon 6 with P-cores delivers &lt;strong&gt;up to 5.5x better AI inferencing performance&lt;/strong&gt; compared to competing AMD EPYC processors.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The 2DPC Memory Breakthrough: Why 6000 MT/s Matters
&lt;/h2&gt;

&lt;p&gt;CPU cores are useless if they are starved of data. Memory speed dictates total data throughput. &lt;/p&gt;

&lt;p&gt;Typically, populating servers with more memory modules (increasing capacity) forces the system to drop to slower RAM clock speeds due to electrical loads. &lt;/p&gt;

&lt;p&gt;Intel Xeon 6 (P-cores) introduces a unique advantage using a &lt;strong&gt;2 DIMM per channel (2DPC) configuration&lt;/strong&gt;. This achieves maximum RAM capacity &lt;em&gt;without&lt;/em&gt; sacrificing CPU performance.&lt;/p&gt;

&lt;p&gt;Intel has pushed the boundaries of DDR5 server memory by enabling 2DPC speeds of &lt;strong&gt;6000 MT/s&lt;/strong&gt; (on Xeon 6700/6500P). For perspective, competing platforms are often capped at 4400 MT/s in similar high-density setups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-world impact:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;25% better average performance&lt;/strong&gt; vs. 5th Gen Intel Xeon at equal core counts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2.18x performance jump&lt;/strong&gt; in heavy media transcode workloads (SVT-AV1) compared to a 1DPC setup at 6400 MT/s.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firmware Upgradeable:&lt;/strong&gt; Running populated memory at 5200 MT/s? You can unlock the full 6000 MT/s speed via a simple software update—zero hardware swaps required.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  4 Operational Benefits for the Data Center
&lt;/h2&gt;

&lt;p&gt;Upgrading to Xeon 6 dedicated servers translates to measurable operational wins:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prevents Core Starvation:&lt;/strong&gt; Faster 2DPC DDR5 speeds ensure your expensive CPUs don't sit in wait-states. Critical for SAP HANA, Redis, and large SQL clusters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximizes VM Density:&lt;/strong&gt; Pack massive RAM capacities into virtualized environments, increasing revenue-generating VMs per node without performance dips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolates "Noisy Neighbors":&lt;/strong&gt; 6000 MT/s provides enough bandwidth headroom to buffer tenants from each other's data spikes in multi-tenant environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lowers TCO:&lt;/strong&gt; Faster task completion allows servers to return to idle states sooner. At 40% utilization, Xeon 6 (P-cores) delivers &lt;strong&gt;1.9x better performance-per-watt&lt;/strong&gt; vs. the previous generation.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  DDR5 &amp;amp; Enterprise-Grade RAS Features
&lt;/h2&gt;

&lt;p&gt;DDR4 is officially phased out. Xeon 6 supports a variety of advanced DDR5 modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RDIMMs:&lt;/strong&gt; Up to 6400 MT/s for standard enterprise workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MRDIMMs:&lt;/strong&gt; Multiplexed Rank DIMMs pushing bandwidth up to 8800 MT/s on the 6900-series.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3DS RDIMMs:&lt;/strong&gt; Up to 256GB per module for ultimate capacity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To guarantee uptime, the platform includes robust &lt;strong&gt;RAS (Reliability, Availability, and Serviceability)&lt;/strong&gt; features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SDDC (Single Device Data Correction):&lt;/strong&gt; Detects/corrects device-level errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Post Package Repair:&lt;/strong&gt; Auto-repairs hard/soft bit errors without reboots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory Sparing &amp;amp; Mirroring:&lt;/strong&gt; Live duplicates across DIMMs for redundancy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ECC:&lt;/strong&gt; Advanced single/multi-bit error correction.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Which Workload Fits Where?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI &amp;amp; HPC:&lt;/strong&gt; Go with the &lt;strong&gt;Xeon 6900-series&lt;/strong&gt; (12-channel DDR5) for immense bandwidth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise DBs &amp;amp; Analytics:&lt;/strong&gt; &lt;strong&gt;P-core Xeon 6&lt;/strong&gt; processors for low-latency throughput.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Virtualization:&lt;/strong&gt; &lt;strong&gt;2DPC 6000 MT/s configs&lt;/strong&gt; for max VM consolidation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud-Native Deployments:&lt;/strong&gt; &lt;strong&gt;Xeon 6700E-series&lt;/strong&gt; for power efficiency and density.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The shift to DDR5 and bifurcated core architectures gives us more tools than ever to right-size infrastructure. &lt;/p&gt;

</description>
      <category>hardware</category>
      <category>sysadmin</category>
      <category>devops</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How to Fix High RAM Usage on a Linux Dedicated Server</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Fri, 04 Sep 2026 10:56:04 +0000</pubDate>
      <link>https://dev.to/ethan_vance/how-to-fix-high-ram-usage-on-a-linux-dedicated-server-3ong</link>
      <guid>https://dev.to/ethan_vance/how-to-fix-high-ram-usage-on-a-linux-dedicated-server-3ong</guid>
      <description>&lt;p&gt;Experiencing sluggish performance, unresponsive terminals, or unexpected application crashes on your &lt;a href="https://www.migservers.com/" rel="noopener noreferrer"&gt;MIG servers&lt;/a&gt; infrastructure usually points to memory exhaustion.&lt;/p&gt;

&lt;p&gt;This guide provides the exact diagnostic commands and mitigation strategies to stabilize your Linux environment and permanently resolve memory leaks, using production-safe best practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Evaluate Current Memory Availability
&lt;/h2&gt;

&lt;p&gt;Before taking action, you must understand how your server distributes its resources. Run the following command to get a snapshot of your system's memory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Physical RAM installed on your server.&lt;br&gt;
&lt;strong&gt;Actionable Insight&lt;/strong&gt;: Baseline reference for your hardware capacity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Available&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Memory currently free and ready for new processes.&lt;br&gt;
&lt;strong&gt;Actionable Insight&lt;/strong&gt;: If consistently near zero (and swap is growing), your server is struggling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Buff/Cache&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt;: RAM used by the Linux kernel to cache files.&lt;br&gt;
&lt;strong&gt;Actionable Insight&lt;/strong&gt;: High numbers are healthy; Linux frees this automatically when apps need RAM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Swap&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Disk space used as emergency overflow RAM.&lt;br&gt;
&lt;strong&gt;Actionable Insight&lt;/strong&gt;: Sustained, active swap usage severely degrades performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Identify Resource Hogs
&lt;/h2&gt;

&lt;p&gt;Locate the specific applications draining your RAM using built-in Linux utilities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interactive Monitoring&lt;/strong&gt;: Run &lt;code&gt;top&lt;/code&gt; and press &lt;code&gt;Shift + M&lt;/code&gt; to sort active tasks by memory usage. For a more readable interface, install and run &lt;code&gt;htop&lt;/code&gt; (press &lt;code&gt;F6&lt;/code&gt; to sort by memory).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Targeted Process Snapshot&lt;/strong&gt;: To immediately print the top 10 memory-consuming processes directly to your terminal:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%mem | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Track Memory Leaks&lt;/strong&gt;: If you suspect an application's Resident Set Size (RSS) is growing endlessly without releasing memory, monitor its Process ID (PID) over a 10-minute window:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;1 10&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;ps &lt;span class="nt"&gt;-o&lt;/span&gt; pid,rss,vsz &lt;span class="nt"&gt;-p&lt;/span&gt; &amp;lt;PID&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;sleep &lt;/span&gt;60&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Immediate Remediation Actions
&lt;/h2&gt;

&lt;p&gt;If your server is actively freezing, apply these commands to safely recover system resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gracefully Terminate Rogue Processes&lt;/strong&gt;: Send a standard termination signal to allow the application to clean up and shut down properly.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;kill&lt;/span&gt; &amp;lt;PID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Crucial Warning&lt;/strong&gt;: Only use kill -9  as an absolute last resort if the process is completely frozen. It forces an immediate shutdown without cleanup, which can cause data corruption in databases or file writes.&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Restart Application Services&lt;/strong&gt;: Restarting daemons (like Nginx, MySQL, or Node.js) flushes their allocated memory pools.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart &amp;lt;service_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Diagnostic Cache Clearing (Use Sparingly)&lt;/strong&gt;: Linux intentionally uses free RAM to cache files for better performance. Dropping the cache can prove whether RAM is truly locked up by applications, but doing this routinely will actually hurt server performance as the kernel is forced to re-read files from the disk.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo &lt;/span&gt;1 | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /proc/sys/vm/drop_caches
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Long-Term Server Optimization
&lt;/h2&gt;

&lt;p&gt;Prevent future bottlenecks by tuning kernel parameters and configuring workload-specific limits.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lower Swappiness&lt;/strong&gt;: Depending on your workload, you can encourage the kernel to favor physical RAM before relying on slow disk swap. Open /etc/sysctl.conf, append vm.swappiness=10, and apply with sudo sysctl -p.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploy Emergency Swap Space&lt;/strong&gt;: Swap prevents fatal Out-Of-Memory (OOM) crashes by providing overflow space, though it is not a replacement for sufficient physical RAM. Size this appropriately for your server (e.g., 2GB to 4GB):&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;fallocate &lt;span class="nt"&gt;-l&lt;/span&gt; 2G /swapfile
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;600 /swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;mkswap /swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapon /swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enforce Workload-Based Memory Limits&lt;/strong&gt;: Prevent a single memory leak from taking down the entire server by setting Systemd limits. Run &lt;code&gt;sudo systemctl edit &amp;lt;service_name&amp;gt;&lt;/code&gt; and configure limits based on your app's actual needs:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight systemd"&gt;&lt;code&gt;&lt;span class="k"&gt;[Service]&lt;/span&gt;
&lt;span class="nt"&gt;MemoryMax&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;4G
&lt;span class="nt"&gt;MemorySwapMax&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(&lt;strong&gt;Note&lt;/strong&gt;: Set MemoryMax based on actual profiling; if set too low, Systemd will routinely kill your service. Setting MemorySwapMax=0 strictly prevents the service from using swap, which guarantees an OOM kill if physical RAM limits are exceeded).&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Audit and Disable Unused Services&lt;/strong&gt;: Background services consume baseline RAM. Identify unnecessary software and disable it from booting:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl disable &amp;lt;service_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Discussion:
&lt;/h3&gt;

&lt;p&gt;What is your go-to terminal command when a server starts lagging? Drop your tips in the comments below! 👇&lt;/p&gt;

</description>
      <category>linux</category>
      <category>sysadmin</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Dedicated Servers for AI Inference: CPU, GPU, RAM and Network Requirements</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Thu, 03 Sep 2026 10:05:30 +0000</pubDate>
      <link>https://dev.to/ethan_vance/dedicated-servers-for-ai-inference-cpu-gpu-ram-and-network-requirements-3p0</link>
      <guid>https://dev.to/ethan_vance/dedicated-servers-for-ai-inference-cpu-gpu-ram-and-network-requirements-3p0</guid>
      <description>&lt;p&gt;You can install the most powerful GPU on the market into a server, load a large language model (LLM), and still experience severe performance bottlenecks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.migservers.com/dedicated-servers/" rel="noopener noreferrer"&gt;A dedicated server&lt;/a&gt; for AI inference can have a high-end accelerator and still perform poorly because of insufficient VRAM, KV-cache pressure, weak CPU resources, slow storage, or PCIe limitations. A GPU alone does not determine AI inference performance.&lt;/p&gt;

&lt;p&gt;AI inference is fundamentally a system-level workload. While the GPU is critically important, your CPU, system RAM, NVMe storage, networking, and interconnects must be perfectly balanced around the specific model and workload you are deploying.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is AI Inference and Why Does Infrastructure Matter?
&lt;/h2&gt;

&lt;p&gt;To properly size an AI inference server, you must separate inference from training. AI training is a massive, highly parallel batch process. AI inference—whether it is real-time generative AI, API model serving, or automated batch inference—is the execution phase where that trained model generates responses to live prompts.&lt;/p&gt;

&lt;p&gt;In a production inference environment, performance is dictated by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Time to First Token (TTFT)&lt;/strong&gt;: How fast the system processes the prompt and returns the very first piece of the answer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inter-Token Latency (ITL)&lt;/strong&gt;: The microsecond delay between each generated token.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tokens Per Second (Throughput)&lt;/strong&gt;: The total volume of output the server can generate across all concurrent users.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Concurrency: How many independent requests the hardware can handle simultaneously before queue times spike.&lt;/p&gt;

&lt;p&gt;Optimizing for these metrics means recognizing that an AI inference server is a complete data pipeline. Fast NVMe storage, efficient PCIe topology, high-bandwidth GPU interconnects, and robust power systems allow those four core resources to function without I/O bottlenecks.&lt;/p&gt;

&lt;h2&gt;
  
  
  CPU Requirements for AI Inference Servers
&lt;/h2&gt;

&lt;p&gt;A GPU-accelerated inference server still depends on the CPU for request processing, tokenization, preprocessing, orchestration, and data movement. It is a very common mistake to over-invest in high-end GPUs while severely bottlenecking the system with an underpowered processor.&lt;/p&gt;

&lt;p&gt;Before a prompt ever reaches the GPU, and after the GPU generates a response, the CPU must actively manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Incoming API requests and network payloads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tokenization and post-processing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic request batching and scheduling for the GPU.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Retrieval-Augmented Generation (RAG) pipelines and vector searches.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How Many CPU Cores Do You Need?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Small LLM (e.g., 7B-8B models)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU Requirement: Moderate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;High-concurrency API&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU Requirement: High&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;RAG / Agentic AI workflows&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU Requirement: High&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Multi-GPU inference&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU Requirement: Very High&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The CPU-to-GPU Balance: High-performance environments require enterprise-grade processors (such as AMD EPYC or Intel Xeon) not just for their core counts, but to provide the extensive PCIe lanes required to keep modern GPUs saturated.&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  GPU Requirements for AI Inference
&lt;/h2&gt;

&lt;p&gt;Do not select an inference GPU based only on raw compute performance (TFLOPs). To determine if an accelerator can handle your specific AI workload, evaluate a complete matrix of features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VRAM Capacity&lt;/strong&gt;: Can it hold the model and the required runtime memory?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory Bandwidth&lt;/strong&gt;: How fast can it move data during token generation?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Precision Support&lt;/strong&gt;: Does it natively accelerate formats like FP8 or INT4?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power Consumption&lt;/strong&gt;: Can the server chassis sustainably cool the GPU under 24/7 loads?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GPU Interconnect&lt;/strong&gt;: Does it support high-speed communication (like NVLink)?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How Much GPU Memory Does AI Inference Need?
&lt;/h3&gt;

&lt;p&gt;Baseline memory depends entirely on the precision format (quantization) you choose:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FP32 (Full Precision)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approximate Memory per Parameter: 4 bytes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;FP16 / BF16 (Half Precision)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approximate Memory per Parameter: 2 bytes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;INT8 (Quantized)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approximate Memory per Parameter: 1 byte&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4-bit (Highly Quantized)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approximate Memory per Parameter: ~0.5 byte&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI Model Size vs GPU Memory Requirements
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;7B / 8B&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;FP16 / BF16 Weights: ~14 GB - 16 GB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;INT8 Weights: ~7 GB - 8 GB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;4-bit Weights: ~3.5 GB - 4 GB&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;13B / 14B&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;FP16 / BF16 Weights: ~26 GB - 28 GB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;INT8 Weights: ~13 GB - 14 GB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;4-bit Weights: ~6.5 GB - 7 GB&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;32B / 34B&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;FP16 / BF16 Weights: ~64 GB - 68 GB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;INT8 Weights: ~32 GB - 34 GB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;4-bit Weights: ~16 GB - 17 GB&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;70B / 72B&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;FP16 / BF16 Weights: ~140 GB - 144 GB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;INT8 Weights: ~70 GB - 72 GB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;4-bit Weights: ~35 GB - 36 GB&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Important Sizing Disclaimer: These numbers represent the approximate memory required for the model weights alone. You must add 20% to over 100% additional memory overhead to support the context window, continuous batching, and the KV cache.&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  When Do You Need Multiple GPUs?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The Model Does Not Fit: A 70B parameter model running in FP16 requires roughly 140GB just to load the model weights. An 80GB GPU simply cannot hold this model alone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Higher Throughput and Concurrency: If your API scales from 10 concurrent users to 1,000, you need multiple GPUs for data parallelism.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Large-Scale Distributed Models: Massive foundation models approaching 400B parameters require clusters of multi-GPU servers.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How Much System RAM Does an AI Inference Server Need?
&lt;/h2&gt;

&lt;p&gt;System RAM and GPU VRAM are not interchangeable. Adding 512GB of standard DDR5 system memory will not help you load a massive 70B parameter model if your GPU only has 24GB of VRAM. The model weights required for hardware acceleration must reside in the GPU’s VRAM.&lt;/p&gt;

&lt;p&gt;However, system RAM actively supports the surrounding inference architecture. Practical deployment ranges include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Entry-Level (64GB – 128GB)&lt;/strong&gt;: Sufficient for serving single, smaller LLMs (7B-8B class).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Production (128GB – 256GB)&lt;/strong&gt;: The standard starting point for enterprise deployments (continuous batching, application containers).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Large Multi-GPU (256GB – 1TB+)&lt;/strong&gt;: Required for multi-node inference, massive models, or heavy vector database queries.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Network and Storage Infrastructure
&lt;/h3&gt;

&lt;p&gt;Network capacity is dictated by concurrent users and request payloads.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network Consideration&lt;/strong&gt;: 1Gbps may be sufficient&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network Consideration&lt;/strong&gt;: 10Gbps dedicated servers are a strong standard&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network Consideration&lt;/strong&gt;: 10Gbps to 25Gbps+ (essential for heavy RAG inputs)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network Consideration&lt;/strong&gt;: 100Gbps to 200Gbps+ (RDMA/RoCE/InfiniBand)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Traditional hard drives or SATA SSDs will severely cripple an inference server during model loading. High-speed NVMe storage ensures that local disk reads never become a bottleneck. Furthermore, modern CPUs must offer enough direct PCIe Gen4/Gen5 lanes to support multiple GPUs, high-speed NICs, and NVMe storage without lane sharing or cross-socket latency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common AI Inference Server Bottlenecks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GPU VRAM&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Symptoms: Out-of-memory (OOM) errors upon load&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Possible Solution: Add more VRAM, or apply 4-bit/8-bit quantization&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;KV Cache&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Symptoms: Memory exhaustion during long conversations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Possible Solution: Optimize context limits, deploy Paged Attention (vLLM)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Symptoms: GPU utilization is consistently low (waiting)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Possible Solution: Upgrade to stronger enterprise CPUs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;System RAM&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Symptoms: System swapping to disk, slow RAG queries&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Possible Solution: Increase system memory&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PCIe&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Symptoms: Slow data-transfer rates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Possible Solution: Ensure Gen4/Gen5 topology without lane sharing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Network&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Symptoms: High API latency despite fast token generation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Possible Solution: Upgrade to 10Gbps or 25Gbps dedicated networking&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dedicated AI Inference Server vs Cloud GPU
&lt;/h2&gt;

&lt;p&gt;When deploying AI into production, you must choose between renting cloud GPU instances or deploying a dedicated server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hardware Control&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dedicated Server (Bare Metal): High (Full root access, custom topology)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloud GPU Instance: Provider-dependent&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resource Predictability&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dedicated Server (Bare Metal): High (No noisy neighbors)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloud GPU Instance: Service-dependent&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Long-Running Workloads&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dedicated Server (Bare Metal): Often highly cost-effective 24/7&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloud GPU Instance: Can become incredibly expensive&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Scaling&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dedicated Server (Bare Metal): Hardware-based (Requires provisioning)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloud GPU Instance: Rapid and elastic&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloud GPUs are excellent for prototyping, training, or highly variable workloads that spike randomly. However, for predictable, continuous 24/7 API serving, dedicated bare-metal infrastructure drastically reduces long-term operational costs while providing total control over your system topology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Dedicated Infrastructure Makes Sense for Production AI Inference
&lt;/h2&gt;

&lt;p&gt;Deploying an AI inference server on bare metal guarantees that 100% of the CPU cores, system RAM, NVMe storage, and PCIe lanes are dedicated entirely to your workload. Whether you need a high-performance &lt;a href="https://www.migservers.com/gpu-dedicated-servers/nvidia-h100/" rel="noopener noreferrer"&gt;NVIDIA H100 dedicated server&lt;/a&gt; for a massive LLM, or a balanced multi-GPU setup with &lt;a href="https://www.migservers.com/100gbps-dedicated-servers/" rel="noopener noreferrer"&gt;100Gbps unmetered&lt;/a&gt; networking for agentic AI workflows.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>infrastructure</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>How to Detect a DDoS Attack on a Linux Server via CLI</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Fri, 21 Aug 2026 05:00:35 +0000</pubDate>
      <link>https://dev.to/ethan_vance/how-to-detect-a-ddos-attack-on-a-linux-server-via-cli-39g</link>
      <guid>https://dev.to/ethan_vance/how-to-detect-a-ddos-attack-on-a-linux-server-via-cli-39g</guid>
      <description>&lt;p&gt;When your &lt;a href="https://www.migservers.com/dedicated-servers/" rel="noopener noreferrer"&gt;Linux server&lt;/a&gt; load suddenly spikes, guessing the cause is not an option. In these critical moments, you need to know immediately whether you are dealing with a legitimate traffic surge, a misbehaving application, or a DDoS attack.&lt;/p&gt;

&lt;p&gt;Here is a hands-on guide to diagnosing malicious traffic directly from your terminal using standard Linux command-line utilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Monitor Network Interfaces (Volumetric Attacks)
&lt;/h2&gt;

&lt;p&gt;The most common DDoS attack is a volumetric flood. Before digging into logs, check the raw traffic hitting your network interfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Bandwidth with &lt;code&gt;iftop&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;iftop &lt;span class="nt"&gt;-n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: The -n flag prevents DNS resolution, which is crucial during an attack because DNS lookups will slow down the tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Check Packets Per Second (PPS) with &lt;code&gt;sar&lt;/code&gt;:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bash
sar &lt;span class="nt"&gt;-n&lt;/span&gt; DEV 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;If your inbound traffic (RX) or PPS is pinned to its absolute limit while CPU usage remains normal, it strongly indicates a Layer 3 network-level flood.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Analyze Active TCP States (Protocol Attacks)
&lt;/h2&gt;

&lt;p&gt;If legitimate users are failing to connect, the attacker is likely targeting your server's connection-handling capacity (Layer 4).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Count Total Connections by IP Address:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bash
ss &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="nt"&gt;-tn&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $5}'&lt;/span&gt; &lt;span class="se"&gt;\v&lt;/span&gt;ert&lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/:[^:]*$//'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-nr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Detect a SYN Flood Attack:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A SYN flood repeatedly sends initial connection requests (SYN) but never completes the handshake. To count connections stuck in the &lt;code&gt;SYN_RECV&lt;/code&gt; state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bash
ss &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; state syn-recv | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Pro-Tip:&lt;/em&gt;&lt;/strong&gt; For a rapid summary of your current TCP states without locking up your terminal, simply type ss -s.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Inspect Web Server Logs (Layer 7 HTTP Floods)
&lt;/h3&gt;

&lt;p&gt;If your network bandwidth is fine but your server's CPU or memory is maxed out, you might be facing an HTTP flood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Identify Top Attacking IPs via Web Logs (Nginx):&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bash
&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 10000 /var/log/nginx/access.log | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-nr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Find the Most Hammered URLs:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bash
&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 10000 /var/log/nginx/access.log | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $7}'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Defense and Upstream Mitigation
&lt;/h3&gt;

&lt;p&gt;Once the observed traffic patterns are consistent with a DDoS attack, you can begin mitigation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Block specific IPs: &lt;code&gt;sudo iptables -A INPUT -s ATTACKER_IP -j DROP&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable TCP SYN Cookies: &lt;code&gt;sudo sysctl -w net.ipv4.tcp_syncookies=1&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Understand the Limits of Local Server Defense:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Local firewalls are useful for targeted attacks, but they cannot stop a massive volumetric flood. If an attacker sends 50Gbps of traffic to your 1Gbps interface, dropping packets locally at the OS level still means your pipe is clogged.&lt;/p&gt;

&lt;p&gt;To survive large-scale volumetric or complex multi-vector DDoS attacks, malicious traffic must be filtered before it ever reaches your server through upstream traffic scrubbing or high-capacity network-level mitigation.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why Upgrading Your Server's Hardware Won't Stop a DDoS Attack</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Thu, 20 Aug 2026 04:44:50 +0000</pubDate>
      <link>https://dev.to/ethan_vance/why-upgrading-your-servers-hardware-wont-stop-a-ddos-attack-1aho</link>
      <guid>https://dev.to/ethan_vance/why-upgrading-your-servers-hardware-wont-stop-a-ddos-attack-1aho</guid>
      <description>&lt;p&gt;When a web application starts slowing down or dropping connections under heavy load, the instinct for many developers and sysadmins is to scale up: add a faster CPU, double the RAM, or move to NVMe storage.&lt;/p&gt;

&lt;p&gt;But what happens when the traffic isn't a viral product launch, but a coordinated Distributed Denial-of-Service (DDoS) attack?&lt;/p&gt;

&lt;p&gt;The harsh reality is that a &lt;a href="https://www.migservers.com/dedicated-servers/" rel="noopener noreferrer"&gt;dedicated server&lt;/a&gt; can have top-tier hardware and a 20Gbps network port, yet still become entirely unreachable. Let’s dive into the technical mechanics of why this happens and where the actual bottlenecks occur.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Traffic Path: Where Do Things Break?
&lt;/h2&gt;

&lt;p&gt;When an attack is launched, the malicious data doesn't instantly appear on your server's processor or memory. The traffic follows a specific path:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Internet → Upstream Network → Mitigation Infrastructure → Server Network Interface → OS → Application&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If incoming traffic exceeds the available capacity at any point in this path, the link becomes saturated. Legitimate traffic simply cannot reach your server.&lt;/p&gt;

&lt;h2&gt;
  
  
  How DDoS Attacks Choke Network Performance
&lt;/h2&gt;

&lt;p&gt;Attacks generally fall into three categories (Volumetric, Protocol, and Application-layer), and they impact your network in the following ways:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Bandwidth Saturation (The Clogged Pipe)
&lt;/h2&gt;

&lt;p&gt;Every network connection has a finite limit. In a volumetric attack (like a UDP flood), the attacker's goal is to consume all available bandwidth between the target and the wider internet. Even if you have a 10Gbps or 20Gbps port, a massive attack can fill that "pipe" completely. Your CPU might be sitting at 5% utilization, but your users still get a 502 Bad Gateway or connection timeout because their requests can't physically reach the server.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Connection State Exhaustion
&lt;/h2&gt;

&lt;p&gt;Not all attacks rely on pure data volume. Protocol attacks (like SYN floods) target the connection-handling capacity of network infrastructure like firewalls or load balancers. By initiating massive numbers of incomplete TCP connection attempts, attackers can consume all available connection state tables. Once exhausted, the network device simply drops any new connections from legitimate users.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Packet Loss and Latency
&lt;/h2&gt;

&lt;p&gt;Excessive traffic creates network congestion. When routers and switches are overwhelmed, packets spend more time waiting in queues (increasing latency). When the buffers are full, packets are dropped entirely (packet loss). This forces retransmissions, creating even more traffic and making interactive applications (like WebSockets or game servers) unusable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Host Firewall Misconception
&lt;/h2&gt;

&lt;p&gt;A common misconception among developers is that iptables or a standard host-based firewall is enough to stop a network flood.&lt;/p&gt;

&lt;p&gt;While a firewall is essential for controlling access (e.g., blocking unused ports), it only filters traffic after it has reached your server's network interface. If a volumetric attack has already saturated your upstream bandwidth, your local firewall dropping the packets won't magically free up the network pipe.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: Upstream Mitigation
&lt;/h2&gt;

&lt;p&gt;To truly protect a server, you can't rely on the server to defend itself. The most effective protection happens upstream.&lt;/p&gt;

&lt;p&gt;Upstream &lt;a href="https://www.migservers.com/ddos-protected-servers/" rel="noopener noreferrer"&gt;DDoS mitigation&lt;/a&gt; analyzes incoming data in real-time, passing it through traffic scrubbing centers. The core concept is straightforward:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Incoming traffic → Scrubbing Center → Malicious traffic dropped → Clean traffic forwarded&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This preserves your network capacity and ensures your server's hardware is only processing legitimate application logic, not fighting off junk packets.&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>networking</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>Configuring NVIDIA MIG: Technical Walkthrough for Bare-Metal GPU Partitioning published: true</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Tue, 11 Aug 2026 11:36:06 +0000</pubDate>
      <link>https://dev.to/ethan_vance/configuring-nvidia-mig-technical-walkthrough-for-bare-metal-gpu-partitioningpublished-true-2oc1</link>
      <guid>https://dev.to/ethan_vance/configuring-nvidia-mig-technical-walkthrough-for-bare-metal-gpu-partitioningpublished-true-2oc1</guid>
      <description>&lt;p&gt;High-capacity GPUs (like the A100, H100, or Blackwell) often sit underutilized in bare-metal environments. Software-based time slicing lacks hardware-level resource guarantees.&lt;/p&gt;

&lt;p&gt;NVIDIA Multi-Instance GPU (MIG) solves this by partitioning a single physical card into independent instances at the hardware level, giving each partition dedicated compute, memory, and bandwidth.&lt;/p&gt;

&lt;p&gt;Here is a quick step-by-step CLI walkthrough on Ubuntu 24.04:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Install Drivers and Verify Support&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ubuntu-drivers &lt;span class="nb"&gt;install
&lt;/span&gt;nvidia-smi &lt;span class="nt"&gt;-q&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for the MIG Mode section in the output to confirm hardware support. (Install nvidia-container-toolkit if you plan to run Docker).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Enable MIG Mode&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ensure no active workloads are attached, then enable MIG mode on GPU 0:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo nvidia-smi -i 0 -mig 1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. List Supported Profiles&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Query the supported resource layouts for your GPU model:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nvidia-smi mig -lgip&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Partition the GPU&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create GPU Instances (GI) and Compute Instances (CI) using your chosen profile string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nvidia-smi mig &lt;span class="nt"&gt;-cgi&lt;/span&gt; 2g.48gb,2g.48gb &lt;span class="nt"&gt;-C&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify active partitions using &lt;code&gt;nvidia-smi mig -lgi&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Target MIG Instances in Docker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;List generated UUIDs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvidia-smi &lt;span class="nt"&gt;-L&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pass the specific MIG UUID directly to your Docker container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--gpus&lt;/span&gt; &lt;span class="s1"&gt;'"device=MIG-af414487-fcaa-5f42-b210-6f614c9cf780"'&lt;/span&gt; nvcr.io/nvidia/pytorch: nvidia-smi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6. Reset Partitions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To revert to single-instance operation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nvidia-smi mig &lt;span class="nt"&gt;-dci&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nvidia-smi mig &lt;span class="nt"&gt;-dgi&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nvidia-smi &lt;span class="nt"&gt;-i&lt;/span&gt; 0 &lt;span class="nt"&gt;-mig&lt;/span&gt; 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Managing bare-metal lifecycle, drivers, and hardware provisioning at scale takes operational bandwidth. At &lt;a href="https://www.migservers.com/" rel="noopener noreferrer"&gt;MIG servers&lt;/a&gt;, we provide pre-configured, dedicated GPU hardware optimized for partitioned AI workloads out of the box.&lt;/p&gt;

</description>
      <category>nvidia</category>
      <category>devops</category>
      <category>docker</category>
      <category>linux</category>
    </item>
    <item>
      <title>Deep Dive into NVIDIA Blackwell Architecture: Redefining GenAI Infrastructure</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Thu, 06 Aug 2026 07:30:18 +0000</pubDate>
      <link>https://dev.to/ethan_vance/deep-dive-into-nvidia-blackwell-architecture-redefining-genai-infrastructure-12g5</link>
      <guid>https://dev.to/ethan_vance/deep-dive-into-nvidia-blackwell-architecture-redefining-genai-infrastructure-12g5</guid>
      <description>&lt;p&gt;When we talk about the evolution of modern &lt;a href="https://www.migservers.com/gpu-dedicated-servers/" rel="noopener noreferrer"&gt;GPU servers&lt;/a&gt;, the NVIDIA Blackwell architecture represents a monumental leap forward. Purpose-built to handle the most demanding AI and cloud computing workloads, Blackwell is strictly an enterprise-grade system.&lt;/p&gt;

&lt;p&gt;Unlike consumer gaming GPUs, Blackwell is completely optimized for processing massive datasets, complex neural networks, and generative AI systems. It directly succeeds the highly successful NVIDIA Hopper architecture, bringing a massive leap in compute performance, memory bandwidth, and multi-node scalability to the data center.&lt;/p&gt;

&lt;p&gt;Let's dive into the hardware and see what makes this silicon so groundbreaking. 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hardware: An Entirely New Class of AI Superchip 🧠
&lt;/h2&gt;

&lt;p&gt;To achieve unprecedented computing density, NVIDIA engineering broke through traditional manufacturing limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unmatched Scale: These GPUs pack an astounding 208 billion transistors, providing the raw compute density needed for trillion-parameter models.&lt;/li&gt;
&lt;li&gt;Custom Fabrication: The architecture is manufactured utilizing a custom-built TSMC 4NP process, balancing extreme performance with energy efficiency.&lt;/li&gt;
&lt;li&gt;Unified Architecture: To overcome physical die limits, all Blackwell products feature two reticle-limited dies. Instead of acting as separate processors, they are seamlessly linked by a 10 terabytes per second (TB/s) chip-to-chip interconnect. This allows the dual-die setup to function flawlessly as a single, unified GPU.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Inside the Technological Breakthroughs ⚡
&lt;/h2&gt;

&lt;p&gt;Blackwell is not just a faster chip; it is a fundamental redesign of how computing resources interact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Second-Generation Transformer Engine&lt;/strong&gt;&lt;br&gt;
Training and running Large Language Models (LLMs) requires staggering amounts of computational power. Blackwell introduces its second-generation Transformer Engine, which pairs custom Tensor Cores with software like NVIDIA TensorRT™-LLM. What truly sets it apart is micro-tensor scaling, enabling FP4 (4-bit floating point) AI precision. This effectively doubles the performance and memory capacity for next-generation models while maintaining high accuracy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. 5th-Generation NVLink &amp;amp; NVLink Switch&lt;/strong&gt;&lt;br&gt;
Even the fastest GPUs will bottleneck if the network connecting them is slow. The 5th-generation NVLink interconnect solves this by scaling up to 576 GPUs. Within a single 72-GPU NVLink domain (NVL72), the NVLink Switch Chip enables a massive 130TB/s of GPU bandwidth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Secure AI with Confidential Computing&lt;/strong&gt;&lt;br&gt;
Security is paramount for enterprise data. Blackwell is the industry’s first TEE-I/O capable GPU. NVIDIA Confidential Computing protects sensitive data and models from unauthorized access without any performance degradation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Decompression Engine &amp;amp; RAS&lt;/strong&gt;&lt;br&gt;
The architecture features a dedicated Decompression Engine that accelerates the full pipeline of database queries. Additionally, intelligent resiliency is handled via a dedicated RAS (Reliability, Availability, and Serviceability) Engine, which uses AI-powered predictive management to minimize downtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blackwell vs. Hopper: What’s the Real Difference? 📊
&lt;/h2&gt;

&lt;p&gt;The Hopper architecture (H100) is an incredibly powerful foundation for today's workloads. However, Blackwell (B200) is purpose-built for the massive scale of tomorrow.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;NVIDIA Hopper (H100)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;NVIDIA Blackwell (B200)&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary Focus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mixed AI &amp;amp; Traditional HPC&lt;/td&gt;
&lt;td&gt;Massive LLMs &amp;amp; Generative AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transformer Precision&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1st Gen Tensor Cores with &lt;strong&gt;FP8&lt;/strong&gt; precision&lt;/td&gt;
&lt;td&gt;2nd Gen Tensor Cores with &lt;strong&gt;FP4&lt;/strong&gt; micro-tensor scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interconnect Technology&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4th Gen NVLink&lt;/td&gt;
&lt;td&gt;5th Gen NVLink (Scales up to &lt;strong&gt;576 GPUs&lt;/strong&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Domain Bandwidth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scalable for standard GPU clusters&lt;/td&gt;
&lt;td&gt;Up to &lt;strong&gt;130 TB/s&lt;/strong&gt; within a &lt;strong&gt;72-GPU NVL72&lt;/strong&gt; domain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Confidential Computing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Standard hardware security&lt;/td&gt;
&lt;td&gt;First &lt;strong&gt;TEE-I/O&lt;/strong&gt; capable GPU with &lt;strong&gt;no performance overhead&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Infrastructure Reality Check 🏗️
&lt;/h2&gt;

&lt;p&gt;While the performance gains are undeniable, deploying Blackwell in-house introduces severe infrastructure challenges. These are not plug-and-play GPUs:&lt;/p&gt;

&lt;p&gt;⚠️ Extreme Power Draw: A single Blackwell GPU can consume up to ~1,000 watts, straining standard data center electrical limits.&lt;/p&gt;

&lt;p&gt;💧 Mandatory Liquid Cooling: Traditional air-cooling systems are incapable of dissipating the heat. Liquid cooling infrastructure is now a strict requirement.&lt;/p&gt;

&lt;p&gt;🏢 Incompatible with Standard Racks: You cannot slot a Blackwell GPU into a legacy server chassis. These require purpose-built AI systems like NVIDIA HGX or DGX platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Developer Use Cases 💻
&lt;/h2&gt;

&lt;p&gt;By matching hardware innovations to modern software demands, Blackwell unlocks new capabilities:&lt;/p&gt;

&lt;p&gt;LLM Training &amp;amp; Fine-Tuning: Accelerate time-to-market for proprietary models using FP4 precision.&lt;/p&gt;

&lt;p&gt;Large-Scale Inference: Handle high token throughput efficiently for real-time AI chatbots, driving down the compute cost-per-token.&lt;/p&gt;

&lt;p&gt;Big Data Analytics &amp;amp; HPC: Rapidly process massive datasets and blend computing simulations with machine learning seamlessly.&lt;/p&gt;

&lt;p&gt;Physical AI &amp;amp; Robotics: Train complex vision models and run high-fidelity Digital Twin simulations for autonomous logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion 🏁
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.migservers.com/blogs/nvidia-blackwell-architecture/" rel="noopener noreferrer"&gt;NVIDIA Blackwell architecture&lt;/a&gt; has definitively set the new standard for accelerated computing. However, as developers and engineers, we must also prepare for the massive physical constraints—navigating 1000W power limits and liquid cooling will be just as crucial as writing the algorithms themselves.&lt;/p&gt;

&lt;p&gt;The future of AI infrastructure is incredibly exciting, but it demands a complete rethink of data center physics.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nvidia</category>
      <category>gpu</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>How to Build a High-Availability (HA) Cluster on Bare Metal</title>
      <dc:creator>Ethan Vance</dc:creator>
      <pubDate>Thu, 23 Jul 2026 08:49:54 +0000</pubDate>
      <link>https://dev.to/ethan_vance/how-to-build-a-high-availability-ha-cluster-on-bare-metal-4ipm</link>
      <guid>https://dev.to/ethan_vance/how-to-build-a-high-availability-ha-cluster-on-bare-metal-4ipm</guid>
      <description>&lt;p&gt;When deploying mission-critical applications, a &lt;strong&gt;Single Point of Failure (SPOF)&lt;/strong&gt; is a disaster waiting to happen. High Availability (HA) is essential for achieving uptime targets like &lt;strong&gt;99.99%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this tutorial, we outline a production-grade, &lt;strong&gt;7-node High-Availability cluster&lt;/strong&gt; built on bare-metal servers using a Private VLAN for maximum performance, security, and hardware control.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ 3-Tier Architecture Overview
&lt;/h2&gt;

&lt;p&gt;Traffic flows through three distinct, isolated tiers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Floating VIP (&lt;code&gt;203.0.113.100&lt;/code&gt;):&lt;/strong&gt; Single public IP entry point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1 (Load Balancers - LB-01 &amp;amp; LB-02):&lt;/strong&gt; Active/Passive &lt;strong&gt;HAProxy&lt;/strong&gt; + &lt;strong&gt;Keepalived&lt;/strong&gt; setup for automated 1–3 second VIP failover.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 2 (Web Tier - WEB-01 &amp;amp; WEB-02):&lt;/strong&gt; &lt;strong&gt;Nginx&lt;/strong&gt; nodes isolated from public access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 3 (Database Tier - DB-01, DB-02, DB-03):&lt;/strong&gt; &lt;strong&gt;MariaDB Galera Cluster&lt;/strong&gt; with synchronous, certification-based replication.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  📋 Server Topology &amp;amp; IP Scheme
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+----------+-----------------+---------------+--------------------+
| Hostname | Role            | Public IP     | Private IP (VLAN)  |
+----------+-----------------+---------------+--------------------+
| VIP      | Floating IP     | 203.0.113.100 | -                  |
| LB-01    | Load Balancer 1 | 203.0.113.101 | 10.0.0.10          |
| LB-02    | Load Balancer 2 | 203.0.113.102 | 10.0.0.11          |
| WEB-01   | Web Node 1      | -             | 10.0.0.20          |
| WEB-02   | Web Node 2      | -             | 10.0.0.21          |
| DB-01    | DB Node 1       | -             | 10.0.0.30          |
| DB-02    | DB Node 2       | -             | 10.0.0.31          |
| DB-03    | DB Node 3       | -             | 10.0.0.32          |
+----------+-----------------+---------------+--------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔒 Security &amp;amp; Sysctl Tuning
&lt;/h2&gt;

&lt;p&gt;Allow incoming traffic strictly from your Private VLAN (&lt;code&gt;10.0.0.0/24&lt;/code&gt;) using &lt;code&gt;ufw&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw default deny incoming
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw default allow outgoing
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow ssh

&lt;span class="c"&gt;# Allow internal Web Traffic&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow from 10.0.0.0/24 to any port 80
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow from 10.0.0.0/24 to any port 443

&lt;span class="c"&gt;# Allow internal Galera &amp;amp; MySQL Traffic&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow from 10.0.0.0/24 to any port 3306  &lt;span class="c"&gt;# MySQL&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow from 10.0.0.0/24 to any port 4444  &lt;span class="c"&gt;# Galera SST&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow from 10.0.0.0/24 to any port 4567  &lt;span class="c"&gt;# Galera Cluster&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow from 10.0.0.0/24 to any port 4568  &lt;span class="c"&gt;# Galera IST&lt;/span&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply kernel tweaks on all nodes to enable non-local binding and scale network queues:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. MariaDB Galera Configuration
&lt;/h2&gt;

&lt;p&gt;Edit the Galera configuration file:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;/etc/mysql/mariadb.conf.d/60-galera.cnf&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[galera]&lt;/span&gt;
&lt;span class="py"&gt;bind-address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0.0.0.0&lt;/span&gt;

&lt;span class="py"&gt;binlog_format&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;row&lt;/span&gt;
&lt;span class="py"&gt;default_storage_engine&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;InnoDB&lt;/span&gt;
&lt;span class="py"&gt;innodb_autoinc_lock_mode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;2&lt;/span&gt;

&lt;span class="py"&gt;wsrep_on&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;ON&lt;/span&gt;
&lt;span class="py"&gt;wsrep_provider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/usr/lib/galera/libgalera_smm.so&lt;/span&gt;
&lt;span class="py"&gt;wsrep_cluster_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;ha_production_cluster&lt;/span&gt;
&lt;span class="py"&gt;wsrep_cluster_address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"gcomm://10.0.0.30,10.0.0.31,10.0.0.32"&lt;/span&gt;

&lt;span class="py"&gt;wsrep_sst_method&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;mariabackup&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Kernel Networking (Sysctl)
&lt;/h3&gt;

&lt;p&gt;Create the sysctl configuration file:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;/etc/sysctl.d/99-ha-cluster.conf&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;net&lt;/span&gt;.&lt;span class="n"&gt;core&lt;/span&gt;.&lt;span class="n"&gt;somaxconn&lt;/span&gt; = &lt;span class="m"&gt;65535&lt;/span&gt;
&lt;span class="n"&gt;net&lt;/span&gt;.&lt;span class="n"&gt;ipv4&lt;/span&gt;.&lt;span class="n"&gt;ip_nonlocal_bind&lt;/span&gt; = &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;net&lt;/span&gt;.&lt;span class="n"&gt;ipv4&lt;/span&gt;.&lt;span class="n"&gt;tcp_max_syn_backlog&lt;/span&gt; = &lt;span class="m"&gt;65535&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply the changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sysctl &lt;span class="nt"&gt;--system&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bootstrap the Galera cluster &lt;strong&gt;only on DB-01&lt;/strong&gt;:&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;galera_new_cluster
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;After the cluster is initialized, start MariaDB normally on &lt;strong&gt;DB-02&lt;/strong&gt; and &lt;strong&gt;DB-03&lt;/strong&gt;:&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start mariadb
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. Keepalived Unicast VRRP
&lt;/h2&gt;

&lt;p&gt;Modern bare-metal servers and many cloud providers block multicast traffic. To ensure reliable VIP failover, configure &lt;strong&gt;Unicast VRRP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Edit the Keepalived configuration:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;/etc/keepalived/keepalived.conf&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  LB-01 (MASTER)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;vrrp_instance&lt;/span&gt; &lt;span class="n"&gt;VI_1&lt;/span&gt; {
    &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="n"&gt;MASTER&lt;/span&gt;
    &lt;span class="n"&gt;interface&lt;/span&gt; &lt;span class="n"&gt;ens18&lt;/span&gt;
    &lt;span class="n"&gt;virtual_router_id&lt;/span&gt; &lt;span class="m"&gt;51&lt;/span&gt;
    &lt;span class="n"&gt;priority&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;

    &lt;span class="n"&gt;unicast_src_ip&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;10&lt;/span&gt;

    &lt;span class="n"&gt;unicast_peer&lt;/span&gt; {
        &lt;span class="m"&gt;10&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;11&lt;/span&gt;
    }

    &lt;span class="n"&gt;virtual_ipaddress&lt;/span&gt; {
        &lt;span class="m"&gt;203&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;113&lt;/span&gt;.&lt;span class="m"&gt;100&lt;/span&gt;/&lt;span class="m"&gt;32&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  LB-02 (BACKUP)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;vrrp_instance&lt;/span&gt; &lt;span class="n"&gt;VI_1&lt;/span&gt; {
    &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="n"&gt;BACKUP&lt;/span&gt;
    &lt;span class="n"&gt;interface&lt;/span&gt; &lt;span class="n"&gt;ens18&lt;/span&gt;
    &lt;span class="n"&gt;virtual_router_id&lt;/span&gt; &lt;span class="m"&gt;51&lt;/span&gt;
    &lt;span class="n"&gt;priority&lt;/span&gt; &lt;span class="m"&gt;90&lt;/span&gt;

    &lt;span class="n"&gt;unicast_src_ip&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;11&lt;/span&gt;

    &lt;span class="n"&gt;unicast_peer&lt;/span&gt; {
        &lt;span class="m"&gt;10&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;10&lt;/span&gt;
    }

    &lt;span class="n"&gt;virtual_ipaddress&lt;/span&gt; {
        &lt;span class="m"&gt;203&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;113&lt;/span&gt;.&lt;span class="m"&gt;100&lt;/span&gt;/&lt;span class="m"&gt;32&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔗 Read the full step-by-step implementation guide with all HAProxy config files and failover testing steps:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.migservers.com/tutorials/build-high-availability-cluster-bare-metal/" rel="noopener noreferrer"&gt;Read Full Step-by-Step Tutorial Here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>architecture</category>
      <category>linux</category>
      <category>database</category>
    </item>
  </channel>
</rss>
