Documentation menu
Requirements

ADP card

What the ADP card needs: hardware, SSDs, the storage server and network of a remote card, and the ADP software stack.

Hardware

The card

Requirement
SlotPCIe Gen5 x16 (the card is a PCIe Gen5 x16 device).
Form factorLow-profile, half-height half-length (HHHL, 6.6” × 2.536”). Tall and short brackets for full-height and low-profile slots.
PowerUnder 25 W typical, 45 W at most, +12 V through the PCIe slot — no auxiliary power cable.
CoolingOperating temperature 10–52 °C at 250 LFM of airflow across the card. Storage 5–35 °C, below 90 % humidity, non-condensing.
Power-loss protectionOn-board supercapacitors. No battery and nothing to install.
ServersAny standard x86_64 server with a free slot: Dell, HPE, Lenovo, Supermicro, Quanta, Wiwynn, Inspur, Sugon, Fujitsu, Hitachi, Tyan, MiTAC, Intel, Cisco, AIC.

GPU servers often control their fans by the GPU temperature. Make sure that the slot gets the airflow above also when the GPUs are idle.

The SSDs behind the card

The card stores the cache on NVMe SSDs in the same server. At installation the SSDs are assigned to the card and combined into one array behind it.

Requirement
InterfaceNVMe (PCIe Gen3, Gen4 or Gen5). The card also drives SAS and SATA SSDs. For the KV cache, use NVMe.
Type and vendorTLC or QLC flash from any vendor (Samsung, WD, Micron, Intel, Kioxia, Hynix, Seagate, …).
ArrayRAID 0 across the SSDs of one card. The content is a cache that can always be recomputed, so there is no need to pay for redundancy.
CapacityUp to 128 TB of raw SSD capacity per card. The usable cache is about 90 % of the raw capacity: two 3.84 TB SSDs give about 7 TB.
DedicatedThe SSDs belong to the card: no file system, no partitions, not the boot disk. Keep the operating system on a disk of its own.
PlacementOn the same NUMA node (CPU socket) as the card.

How much capacity. Plan from the prefixes that you want to keep, not from the request rate. Take the KV size of one token of your model. Multiply it by the tokens of all long prompts, conversations and agent contexts that must come back without a prefill. The usage report of the card (adpcli system get_disk_usage) shows the stored objects and their average size once a model has run for a while. When the card is full, it evicts objects by itself, and the hit rate is what the capacity allows (capacity and key eviction).

Where the card goes

PlacementHardware
Local — in the GPU serverA free PCIe Gen5 x16 slot in the GPU server and room for the SSDs there. No network.
Remote — in a storage serverA storage server with the card and its SSDs (below), and an RDMA network between it and the GPU server. The GPU server needs only the network card.

A remote card keeps storage off the GPU servers, and the cache can be on hardware sized for it. Several GPU servers can share remote cards (Cluster modes). A local card is the simplest setup, with nothing between the gateway and the card.

Several cards in one server

Put one card per NUMA node: in a two-socket server, a card on each socket, each with its own SSDs on that socket. Every card has its own storage service. In a remote setup it also has its own NVMe-oF target and network address. Several engines on one GPU server can each use a separate card, or all engines can share the cards (Shared cache).

Storage server for a remote card

Requirement
CPUx86_64. The NVMe-oF target service polls its CPU cores all the time. Give every card a set of dedicated cores on its NUMA node. These cores show as 100 % busy, which is normal.
MemoryEnough for the operating system plus the hugepages the installer reserves for the target service. When another service of the host also uses hugepages, for example a database, the storage service must start before it, or the reservation needs a headroom for it (other users of hugepages).
NetworkAn RDMA-capable NIC per card, on the card’s NUMA node (below).
DisksThe SSDs of the cards, and a separate boot disk.
Remote managementIPMI or another out-of-band console is strongly recommended: the target runs on bare metal.

Network for a remote card

Requirement
TransportNVMe over Fabrics on RDMA: RoCE v2 over Ethernet, or InfiniBand.
NICAn RDMA NIC on the storage server and on the GPU server. On the storage server, on the same NUMA node as its card.
Speed100 Gb/s or faster per card (InfiniBand EDR or faster). The restore speed of a long prompt is capped by the slower of the link and the SSDs.
MTURoCE v2: jumbo frames, 9000, end to end, on NICs and switch ports. InfiniBand: the link MTU that the subnet manager sets, 4096 where possible (active_mtu in ibv_devinfo). There are no jumbo frames to configure.
AddressingOne IP address and port (for example 4420) for the target of each card. On InfiniBand, this is the IPoIB address of the port of the storage server. The GPU servers must reach it. Tenants must not.

A slower link works, but restores are slower. For RoCE, configure the switches as your NIC vendor recommends for RDMA traffic. For InfiniBand, a subnet manager must run on the fabric: the one of the switch, or opensm on one host. Each port with NVMe-oF needs an IPoIB interface with an address, because RDMA connections use the IP address also on InfiniBand. Check the fabric before connecting the card.

Software

The ADP software stack

All software of the card comes in one package from Awide Labs, the ADP software stack. You install it on the host of the card: the GPU server for a local card, the storage server for a remote card.

ComponentWhat it isOn the host as
DriverThe kernel module of the card. Built for a specific kernel version.kernel module adp.ko (a DKMS package builds it for the running kernel)
FirmwareThe card’s firmware, delivered with the stack.reported by adpcli system get_status
Storage serviceKeeps the key-value databases on the card. One instance for each card. Starts at boot.adpstore@<N> (systemd), config /etc/adp/<N>/adpstore.ini
Command-line toolStatus, usage, the SSD array, maintenance.adpcli
NVMe-oF target service (remote card only)Exports the key-value namespace of the card over RDMA. One instance for each card, with a fixed namespace identity and a unique serial number. Bound to the storage service of its card: a stop or a restart of adpstore@<N> stops or restarts the target with it.awide-spdk-target-<N> (systemd), port 4420
InstallersInstall the parts above and make the SSD array. The target installer installs the NVMe-oF target.xdp-installer, awide_ai_spdk_target.py

On the GPU server, the integrations and the gateway come as container images (Installation). With a local card, the gateway container talks to the storage service on the same host. With a remote card, no part of the stack runs on the GPU server. Only the NVMe-oF initiator of the kernel runs there.

Use the ADP software stack of the same release as the gateway image. The gateway of a card in the GPU server talks to the storage service of the card by the names of this stack: adpstore, /dev/adp<N>, /etc/adp and /var/log/adp.

Operating system and kernel

HostRequirement
Host of the cardLinux x86_64. The driver is built for the exact kernel of the host. Tell Awide Labs your distribution and kernel version, and you get the stack for it. A kernel update needs a stack for the new kernel, so pin the kernel on these hosts.
GPU server, remote cardLinux x86_64 with the NVMe-oF RDMA initiator in the kernel (nvme_rdma). All current distribution kernels have it.

Packages to install first

On the host of the card, the installers need these packages. The names are as in RHEL-family distributions. The Debian family has equivalents.

PackageVersionWhy
nvme-cli, pciutils, libpciaccessanyFinding and managing the card and its SSDs.
libaio, numactl, numactl-develanyI/O and NUMA placement of the storage service.
ledmon0.96 or newerDrive LEDs of the SSD array.
fuse3, fuse3-devel, libuuid-devel, ncurses-develanyRequired by the stack’s services and tools.
python3, python3-pip3.8 or newerThe installers. The target installer also needs the pip modules meson and pyelftools.
libibverbs, libibverbs-devel, librdmacm-develanyRDMA for the NVMe-oF target (remote card).
infiniband-diags, perftestanyChecking the fabric (remote card): ibstat, ib_read_bw.
tunedanyThe throughput-performance profile of a storage server.

The target installer also installs the dependencies of the NVMe-oF target with RDMA support itself.

On the GPU server with a remote card:

Package or settingWhy
nvme-clinvme discover, nvme connect, nvme list.
kernel modules nvme_rdma, rdma_ucmThe NVMe-oF initiator over RDMA.
nvme_core.multipath=N (kernel parameter)The gateway sends NVMe pass-through commands to the namespace device. Native NVMe multipath must be off.
the RDMA user-space stack of your NIC (rdma-core or the vendor’s driver package)RDMA on the NIC.
kernel module ib_ipoib (InfiniBand)The IP address the RDMA connection is set up by.
infiniband-diags, perftestChecking the fabric: ibstat, ib_read_bw.

Installing and checking it

ADP card setup installs the stack and checks the card and its services. It also sets the two keys of the storage service that the KV cache needs: key eviction on, and key-value mode. Every key is listed in Configuration → ADP storage service.

Planning a deployment?

Talk to our engineers about your models, context lengths, concurrency and where the ADP card should sit.

Talk to Awide Labs