<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>V100 on KnightLi Blog</title>
        <link>https://www.knightli.com/es/tags/v100/</link>
        <description>Recent content in V100 on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>es</language>
        <lastBuildDate>Sat, 09 May 2026 15:05:41 +0800</lastBuildDate><atom:link href="https://www.knightli.com/es/tags/v100/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Cómo medir el rendimiento multi-GPU en llama.cpp: ¿2x V100 16GB son más rápidas que una sola GPU de 32GB?</title>
        <link>https://www.knightli.com/es/2026/05/09/llama-cpp-multi-gpu-offload-performance/</link>
        <pubDate>Sat, 09 May 2026 15:05:41 +0800</pubDate>
        
        <guid>https://www.knightli.com/es/2026/05/09/llama-cpp-multi-gpu-offload-performance/</guid>
        <description>&lt;p&gt;La conclusión rápida: el multi-GPU offload de llama.cpp no significa rendimiento gratis por añadir una segunda tarjeta. Si el modelo ya cabe completo en una GPU de 32GB, 2x V100 16GB suele ser menos cómodo que una sola tarjeta de 32GB, e incluso puede ser más lento. Si el modelo no cabe en una sola tarjeta de 16GB, el valor principal de usar dos GPU es mantener el modelo en GPU, y ahí la mejora sí puede ser clara.&lt;/p&gt;
&lt;h2 id=&#34;primero-separa-los-split-mode&#34;&gt;Primero, separa los split mode
&lt;/h2&gt;&lt;p&gt;El uso multi-GPU en llama.cpp gira principalmente alrededor de &lt;code&gt;--split-mode&lt;/code&gt; y &lt;code&gt;--tensor-split&lt;/code&gt;. Para hablar de rendimiento, conviene distinguir primero estos modos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;layer&lt;/code&gt;: divide capas entre distintas GPU. Suele ser el punto de partida más compatible.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tensor&lt;/code&gt;: divide el cálculo de tensores entre varias GPU. Se acerca más al paralelismo real, pero depende mucho del ancho de banda entre GPU y del soporte del backend.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;row&lt;/code&gt;: un modo antiguo de división por filas. Todavía aparece en algunas configuraciones, pero normalmente no es la primera opción para despliegues nuevos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En términos simples, &lt;code&gt;layer&lt;/code&gt; es como poner diferentes pisos en diferentes tarjetas. Durante la generación de un solo token, no siempre mantiene ambas GPU completamente ocupadas. &lt;code&gt;tensor&lt;/code&gt; se parece más a hacer que ambas tarjetas trabajen juntas en la misma capa. Tiene más paralelismo teórico, pero la comunicación entre GPU puede convertirse en el cuello de botella.&lt;/p&gt;
&lt;h2 id=&#34;si-una-gpu-de-32gb-puede-cargar-el-modelo-dos-de-16gb-no-siempre-son-más-rápidas&#34;&gt;Si una GPU de 32GB puede cargar el modelo, dos de 16GB no siempre son más rápidas
&lt;/h2&gt;&lt;p&gt;Si el modelo y la KV cache caben completos en una GPU de 32GB, una sola tarjeta suele ser más estable y a menudo más rápida. En hardware de la misma generación, como 1x V100 32GB frente a 2x V100 16GB, la configuración de dos tarjetas no tiene por qué ganar.&lt;/p&gt;
&lt;p&gt;Una expectativa conservadora es que 2x V100 16GB pueda ser entre un 10% y un 40% más lenta que una sola V100 32GB, sobre todo en chat de un solo usuario, Continue Agent y preguntas de código, donde una petición suele generar una sola respuesta.&lt;/p&gt;
&lt;p&gt;La razón es sencilla: multi-GPU no convierte la VRAM en un único gran bloque rápido. Con división por capas, la inferencia pasa entre GPU y una tarjeta puede esperar a la otra durante la generación. Con división por tensores, ambas tarjetas pueden calcular juntas, pero los resultados intermedios necesitan sincronización entre GPU, y el ancho de banda y la latencia afectan directamente el throughput.&lt;/p&gt;
&lt;p&gt;Así que si tus opciones son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x V100 32GB&lt;/li&gt;
&lt;li&gt;2x V100 16GB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;y el modelo objetivo ya cabe completo en una sola tarjeta de 32GB, la GPU única de 32GB suele ser la opción más cómoda.&lt;/p&gt;
&lt;h2 id=&#34;si-una-gpu-de-16gb-no-puede-cargar-el-modelo-dos-tarjetas-sí-aportan-mucho&#34;&gt;Si una GPU de 16GB no puede cargar el modelo, dos tarjetas sí aportan mucho
&lt;/h2&gt;&lt;p&gt;La situación cambia por completo cuando el modelo no cabe en una GPU de 16GB, pero sí cabe repartido entre dos tarjetas de 16GB.&lt;/p&gt;
&lt;p&gt;En ese caso, el valor de dos GPU es directo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una tarjeta de 16GB: puede requerir mucho CPU offload, con una caída clara de velocidad.&lt;/li&gt;
&lt;li&gt;2x 16GB: los pesos pueden quedarse en gran parte en GPU, lo que puede ser mucho más rápido que una ejecución mixta CPU/GPU.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En este escenario, 2x V100 16GB no garantiza superar a una sola tarjeta de 32GB, pero puede ser varias veces más rápida que una sola 16GB con mucho offload a memoria del sistema. Es decir, el primer valor de dos tarjetas no es acelerar; es evitar que los pesos del modelo caigan en una RAM del sistema mucho más lenta.&lt;/p&gt;
&lt;h2 id=&#34;v100-pcie-y-v100-sxm2-son-muy-diferentes&#34;&gt;V100 PCIe y V100 SXM2 son muy diferentes
&lt;/h2&gt;&lt;p&gt;Lo que más se pasa por alto en inferencia multi-GPU es el interconnect.&lt;/p&gt;
&lt;p&gt;Si tienes V100 SXM2 con NVLink, el ancho de banda entre GPU es mucho mayor. La documentación de NVIDIA para V100 indica que NVLink puede llegar hasta 300GB/s de ancho de banda de interconexión. En ese entorno, &lt;code&gt;tensor&lt;/code&gt; o cargas con batch más alto tienen más posibilidades de acercarse o incluso superar el rendimiento de una sola tarjeta.&lt;/p&gt;
&lt;p&gt;Si tienes V100 PCIe, conviene ser mucho más conservador. V100 PCIe usa principalmente PCIe Gen3, y el interconnect bandwidth indicado es 32GB/s. No está en la misma categoría que NVLink, por eso dos tarjetas PCIe a menudo dan VRAM suficiente, pero no duplican la velocidad.&lt;/p&gt;
&lt;p&gt;Por eso, para decidir si 2x V100 16GB merece la pena, no basta con sumar VRAM y decir que son 32GB. También hay que comprobar si son tarjetas PCIe o SXM2/NVLink.&lt;/p&gt;
&lt;h2 id=&#34;cómo-elegir-de-forma-práctica&#34;&gt;Cómo elegir de forma práctica
&lt;/h2&gt;&lt;p&gt;Si el modelo cabe en una sola GPU de 32GB, prioriza una sola tarjeta. Su latencia, estabilidad y coste de ajuste suelen ser mejores.&lt;/p&gt;
&lt;p&gt;Si el modelo no cabe en una GPU de 16GB, pero sí en dos de 16GB, merece la pena usar dos tarjetas. En ese caso, el objetivo es mantener los pesos en GPU tanto como sea posible, no esperar una mejora lineal de rendimiento.&lt;/p&gt;
&lt;p&gt;Si tienes dos V100 PCIe, empieza con &lt;code&gt;--split-mode layer&lt;/code&gt; y busca ejecución estable con menos caída a CPU.&lt;/p&gt;
&lt;p&gt;Si tienes V100 SXM2/NVLink, vale más la pena probar modos relacionados con &lt;code&gt;tensor&lt;/code&gt;, especialmente en prefill, batch más grande o servicio concurrente.&lt;/p&gt;
&lt;h2 id=&#34;cuándo-comprar-2x16gb-y-cuándo-comprar-1x32gb&#34;&gt;Cuándo comprar 2x16GB y cuándo comprar 1x32GB
&lt;/h2&gt;&lt;p&gt;Si solo atiendes a un usuario y trabajas sobre todo con chat, completado de código, Continue Agent o preguntas con contexto largo, y el modelo objetivo cabe en 32GB, 1x32GB suele ser mejor. Evita la planificación entre GPU, ofrece latencia más estable y simplifica la depuración.&lt;/p&gt;
&lt;p&gt;Si ya tienes una tarjeta de 16GB y quieres una forma más barata de ejecutar modelos de 30B, 32B o cuantizaciones más grandes, 2x16GB tiene sentido. No necesariamente duplicará los token/s, pero puede mantener en GPU pesos que de otro modo tendrían que ir a CPU offload.&lt;/p&gt;
&lt;p&gt;Si vas a comprar desde cero, puedes priorizar así:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un solo modelo, un solo usuario, latencia importante: preferir 1x32GB.&lt;/li&gt;
&lt;li&gt;El modelo no cabe en una sola tarjeta y el presupuesto es limitado: considerar 2x16GB.&lt;/li&gt;
&lt;li&gt;Hay una máquina con NVLink o SXM2: 2x16GB es mucho más interesante que dos tarjetas PCIe comunes.&lt;/li&gt;
&lt;li&gt;Quieres usar contextos más largos en el futuro: no mires solo el tamaño de los pesos; reserva VRAM para KV cache.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;consejos-prácticos-para-layer-split-y-tensor-split&#34;&gt;Consejos prácticos para layer split y tensor split
&lt;/h2&gt;&lt;p&gt;La regla práctica es: empieza con &lt;code&gt;layer&lt;/code&gt; y luego mide &lt;code&gt;tensor&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;layer&lt;/code&gt; es un buen punto de partida. Divide el modelo por capas, tiene mejor compatibilidad y funciona mejor en sistemas PCIe de dos tarjetas. Su desventaja es que la generación puede comportarse como una tubería: en algunos momentos una tarjeta está ocupada mientras la otra espera.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tensor&lt;/code&gt; encaja mejor en máquinas con buena interconexión, como V100 SXM2/NVLink. Divide parte del cálculo de una misma capa entre varias GPU, así que tiene más paralelismo teórico, pero también sincroniza más a menudo entre tarjetas. En dos GPU PCIe, el coste de comunicación puede comerse la ganancia.&lt;/p&gt;
&lt;p&gt;Puedes empezar con estas pruebas:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;llama-bench -m model.gguf -ngl &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt; --split-mode layer --tensor-split 1,1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;llama-bench -m model.gguf -ngl &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt; --split-mode tensor --tensor-split 1,1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;llama-bench -m model.gguf -ngl &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt; --split-mode layer --tensor-split 1,0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El tercer comando no es para uso permanente. Sirve como referencia de una sola tarjeta, para saber si dos GPU realmente son más rápidas o solo están repartiendo la presión de VRAM.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-prefill-y-decode-se-comportan-distinto&#34;&gt;Por qué prefill y decode se comportan distinto
&lt;/h2&gt;&lt;p&gt;El rendimiento de un LLM local suele dividirse en dos fases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;prefill&lt;/code&gt;: procesa el prompt de entrada. Una métrica típica es el throughput de prompt processing, como &lt;code&gt;pp512&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;decode&lt;/code&gt;: genera la respuesta token por token. Una métrica típica es el throughput de token generation, como &lt;code&gt;tg128&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;prefill&lt;/code&gt; se parece más a cálculo matricial con batch grande. Con batch más alto es más fácil mantener las GPU ocupadas y obtener beneficio del paralelismo multi-GPU. &lt;code&gt;decode&lt;/code&gt; genera un token tras otro. El batch es pequeño y la sincronización es frecuente, así que la comunicación entre tarjetas y la latencia de planificación se notan más.&lt;/p&gt;
&lt;p&gt;Por eso puedes ver que dos GPU mejoran &lt;code&gt;pp512&lt;/code&gt;, pero &lt;code&gt;tg128&lt;/code&gt; apenas mejora o incluso empeora. Para chat y agentes, la experiencia del usuario se parece más a &lt;code&gt;tg128&lt;/code&gt;. Para ingestión de documentos largos, prefill por lotes o servicio concurrente, &lt;code&gt;pp512&lt;/code&gt; también importa.&lt;/p&gt;
&lt;h2 id=&#34;puede-kv-cache-convertirse-en-el-segundo-cuello-de-botella-de-vram&#34;&gt;¿Puede KV cache convertirse en el segundo cuello de botella de VRAM?
&lt;/h2&gt;&lt;p&gt;Sí. Muchas personas solo calculan los pesos del modelo y olvidan la KV cache.&lt;/p&gt;
&lt;p&gt;Los pesos determinan si el modelo puede cargarse. La KV cache determina si puedes usar la longitud de contexto que quieres. Cuanto más largo sea el contexto, mayor la concurrencia y más grande el batch, más visible será el consumo de KV cache. Puede pasar que el modelo base quepa en 32GB, pero al abrir 32K o 64K de contexto vuelva a faltar VRAM.&lt;/p&gt;
&lt;p&gt;Como mínimo, deja margen de VRAM para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KV cache&lt;/li&gt;
&lt;li&gt;CUDA graph o sobrecarga del runtime del backend&lt;/li&gt;
&lt;li&gt;prompt batch y ubatch&lt;/li&gt;
&lt;li&gt;escritorio, driver y otros procesos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si usas 2x16GB, la VRAM no es un pool único de 32GB completamente equivalente. Algunos buffers, KV cache o tensores intermedios todavía pueden quedar limitados por la memoria restante en una sola tarjeta. Para probar contexto largo, usa directamente el &lt;code&gt;--ctx-size&lt;/code&gt; objetivo y la concurrencia objetivo, no solo compruebes si el modelo arranca.&lt;/p&gt;
&lt;h2 id=&#34;cómo-medir-tus-dos-tarjetas-con-llama-bench&#34;&gt;Cómo medir tus dos tarjetas con llama-bench
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;llama-bench&lt;/code&gt; es mejor que chatear directamente para comparar hardware, porque separa prompt processing y token generation en métricas comparables. El ejemplo básico del README oficial es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;llama-bench -m model.gguf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para dos V100, al menos mide estos grupos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Single-card baseline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CUDA_VISIBLE_DEVICES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; llama-bench -m model.gguf -ngl &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Dual-card layer split&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CUDA_VISIBLE_DEVICES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0,1 llama-bench -m model.gguf -ngl &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt; --split-mode layer --tensor-split 1,1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Dual-card tensor split&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CUDA_VISIBLE_DEVICES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0,1 llama-bench -m model.gguf -ngl &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt; --split-mode tensor --tensor-split 1,1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Fíjate sobre todo en dos columnas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pp512&lt;/code&gt;: prompt processing, más relevante para entradas largas y prefill por lotes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tg128&lt;/code&gt;: token generation, más relevante para chat de un solo usuario y respuesta de agentes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mantén fijos el modelo, la cuantización, el contexto, batch, versión del driver y versión de llama.cpp. Ejecuta cada grupo varias veces y compara medianas, no un único resultado. Por último, prueba también tu flujo real, como Continue Agent, un OpenAI-compatible server o tus propias peticiones RAG, porque un benchmark bonito no siempre significa una mejor experiencia interactiva.&lt;/p&gt;
&lt;h2 id=&#34;conclusión-en-una-frase&#34;&gt;Conclusión en una frase
&lt;/h2&gt;&lt;p&gt;La ventaja principal de 2x V100 16GB es la capacidad de VRAM, no una velocidad de generación garantizada. Si el modelo cabe en una sola tarjeta, una GPU de 32GB suele ser más rápida y estable. Si el modelo no cabe en una sola 16GB, dos tarjetas de 16GB valen mucho porque evitan gran parte del CPU offload. Que sean más rápidas o no depende del split mode, batch, tamaño del modelo y de si las dos V100 están conectadas por PCIe o NVLink.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;llama.cpp server README&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.mintlify.com/ggml-org/llama.cpp/concepts/backends&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;llama.cpp Compute Backends&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.nvidia.com/en-gb/data-center/tesla-v100/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;NVIDIA Tesla V100&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://images.nvidia.com/content/technologies/volta/pdf/tesla-volta-v100-datasheet.pdf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;NVIDIA V100 Datasheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
