> ## Documentation Index
> Fetch the complete documentation index at: https://docs.livepeer.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Operational and Hardware Requirements for Orchestrators

> Minimum, recommended, and production hardware for running a Livepeer orchestrator.

export const DynamicTable = ({tableTitle = null, headerList = [], itemsList = [], monospaceColumns = [], columnWidths = {}, contentFitColumns = [], showSeparators = false, margin, className = "", style = {}, ...rest}) => {
  if (!headerList.length) {
    return <div>No headers provided</div>;
  }
  const safeContentFitColumns = Array.isArray(contentFitColumns) ? contentFitColumns : [];
  const usesContentFitColumns = safeContentFitColumns.length > 0;
  const isContentFitColumn = header => safeContentFitColumns.includes(header);
  const getColumnStyle = header => {
    const widthStyle = columnWidths[header] ? {
      width: columnWidths[header],
      minWidth: columnWidths[header],
      maxWidth: columnWidths[header]
    } : {};
    const contentFitStyle = !columnWidths[header] && isContentFitColumn(header) ? {
      width: "1%",
      whiteSpace: "nowrap"
    } : {};
    return {
      ...contentFitStyle,
      ...widthStyle
    };
  };
  return <div className={className} style={style} {...rest}>
      {tableTitle && <div style={{
    fontStyle: "italic",
    margin: 0
  }}>
          <strong>{tableTitle}</strong>
        </div>}
      <div style={{
    overflowX: "auto",
    ...margin != null && ({
      margin
    })
  }} role="region" tabIndex={0} aria-label={tableTitle ? `Scrollable table: ${tableTitle}` : "Scrollable table"}>
        <table data-docs-dynamic-table style={{
    width: "100%",
    tableLayout: usesContentFitColumns ? "auto" : "fixed",
    borderCollapse: "collapse",
    fontSize: "0.9rem",
    marginTop: 0
  }}>
          <thead>
            <tr style={{
    backgroundColor: "var(--lp-color-accent)",
    color: "var(--lp-color-on-accent)",
    borderBottom: "1px solid var(--lp-color-border-default)"
  }}>
              {headerList.map((header, index) => <th key={index} style={{
    padding: "10px 8px",
    textAlign: "left",
    fontWeight: "600",
    color: "var(--lp-color-on-accent)",
    ...getColumnStyle(header)
  }}>
                  {header}
                </th>)}
            </tr>
          </thead>
          <tbody>
            {itemsList.filter(item => showSeparators || !item?.__separator).map((item, rowIndex) => item?.__separator ? <tr key={rowIndex} style={{
    backgroundColor: "var(--lp-color-accent)",
    color: "var(--lp-color-on-accent)",
    borderBottom: "1px solid var(--lp-color-accent)"
  }}>
                  <td colSpan={headerList.length} style={{
    padding: "6px 8px",
    fontWeight: "700",
    color: "var(--lp-color-on-accent)",
    letterSpacing: "0.01em"
  }}>
                    {(item[headerList[0]] ?? item.Category) ?? "Category"}
                  </td>
                </tr> : <tr key={rowIndex} style={{
    borderBottom: "1px solid var(--lp-color-border-default)"
  }}>
                  {headerList.map((header, colIndex) => {
    const value = (item[header] ?? item[header.toLowerCase()]) ?? "-";
    const isMonospace = monospaceColumns.includes(colIndex);
    return <td key={colIndex} style={{
      padding: "8px 8px",
      fontFamily: isMonospace ? "monospace" : "inherit",
      wordWrap: "break-word",
      overflowWrap: "break-word",
      ...getColumnStyle(header)
    }}>
                        {isMonospace ? <code>{value}</code> : value}
                      </td>;
  })}
                </tr>)}
          </tbody>
        </table>
      </div>
    </div>;
};

Orchestrators run **video transcoding** (NVENC/FFmpeg) and/or **AI inference** on GPUs. Hardware directly affects job selection, reputation, and revenue. Below are minimum, recommended, and AI-optimised guidelines for 2026.

## Minimum (development / testing)

<DynamicTable
  tableTitle="Minimum specs"
  headerList={["Component", "Minimum"]}
  itemsList={[
{ "Component": "GPU", "Minimum": "NVIDIA RTX 3060 / T4 (8GB VRAM)" },
{ "Component": "CPU", "Minimum": "4 cores" },
{ "Component": "RAM", "Minimum": "16GB" },
{ "Component": "Storage", "Minimum": "100GB SSD" },
{ "Component": "Network", "Minimum": "100 Mbps symmetric" },
{ "Component": "OS", "Minimum": "Ubuntu 22.04 LTS" }
]}
/>

Suitable for testnet, low-volume workloads, and learning.

## Recommended (video / production)

<DynamicTable
  tableTitle="Recommended production (video-focused)"
  headerList={["Component", "Recommended"]}
  itemsList={[
{ "Component": "GPU", "Recommended": "RTX 4080 / A4000 / L4" },
{ "Component": "CPU", "Recommended": "8–16 cores" },
{ "Component": "RAM", "Recommended": "32–64GB" },
{ "Component": "Storage", "Recommended": "NVMe SSD 1TB+" },
{ "Component": "Network", "Recommended": "1 Gbps symmetric" },
{ "Component": "Uptime", "Recommended": "99%+ target" }
]}
/>

Optimised for real-time streaming and multi-resolution transcoding.

## AI inference

AI workloads are VRAM-bound. Stake does **not** determine AI job routing; capability and price do.

<DynamicTable
  tableTitle="AI-oriented GPUs"
  headerList={["GPU", "Use case"]}
  itemsList={[
{ "GPU": "RTX 4090 (24GB)", "Use case": "Stable Diffusion, high batch" },
{ "GPU": "A100 (40GB/80GB)", "Use case": "Enterprise inference" },
{ "GPU": "H100", "Use case": "Advanced model serving" }
]}
/>

Also ensure: CUDA 12+, NVIDIA Container Toolkit, good cooling, high IOPS storage for model weights.

## Network and ops

* **Latency:** \<50 ms to major regions helps streaming and Gateway selection.
* **Production:** Static IP, reverse proxy (e.g. Nginx), TLS, firewall rules.
* **Monitoring:** Prometheus, Grafana, NVIDIA DCGM exporter; track GPU utilisation, VRAM, segment/job success rate.

## Checklist before going live

* GPU visible via `nvidia-smi`
* Docker sees GPU (`--gpus all`)
* CUDA functional
* Ports open (e.g. 8935)
* Stable Arbitrum RPC
* Monitoring configured

## See also

<Columns cols={2}>
  <Card title="Install go-livepeer" icon="download" href="/v2/orchestrators/setup/install" arrow />

  <Card title="Orchestrator stats & monitoring" icon="chart-line" href="https://explorer.livepeer.org/orchestrators" arrow />

  <Card title="Data centre setup" icon="server" href="/v2/orchestrators/guides/advanced-operations/scale-operations" arrow />
</Columns>
