Buckets:

download
raw
112 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Despliegue de inferencia optimizado&quot;,&quot;local&quot;:&quot;despliegue-de-inferencia-optimizado&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Guía de selección de frameworks&quot;,&quot;local&quot;:&quot;guía-de-selección-de-frameworks&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Gestión de memoria y rendimiento&quot;,&quot;local&quot;:&quot;gestión-de-memoria-y-rendimiento&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Despliegue e integración&quot;,&quot;local&quot;:&quot;despliegue-e-integración&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Primeros pasos&quot;,&quot;local&quot;:&quot;primeros-pasos&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Instalación y configuración básica&quot;,&quot;local&quot;:&quot;instalación-y-configuración-básica&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Generación básica de texto&quot;,&quot;local&quot;:&quot;generación-básica-de-texto&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Control avanzado de generación&quot;,&quot;local&quot;:&quot;control-avanzado-de-generación&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Selección de tokens y muestreo&quot;,&quot;local&quot;:&quot;selección-de-tokens-y-muestreo&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Control de repetición&quot;,&quot;local&quot;:&quot;control-de-repetición&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Control de longitud y secuencias de parada&quot;,&quot;local&quot;:&quot;control-de-longitud-y-secuencias-de-parada&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Gestión de memoria&quot;,&quot;local&quot;:&quot;gestión-de-memoria&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Recursos&quot;,&quot;local&quot;:&quot;recursos&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"/>
<link href="/docs/course/pr_1349/es/_app/immutable/entry/start.i8cfvJdK.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/chunks/Bu8uk4gf.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/chunks/D1tCmNdJ.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/entry/app.ChbcDIvp.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/chunks/BCFysQfV.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/chunks/CZRDEabZ.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/chunks/BNkjvxpS.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/chunks/DsnmJJEf.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/nodes/0.C8NfFymJ.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/chunks/B22y-kd-.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/nodes/17.WNccBfUS.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/chunks/ByQJuyRF.js" rel="modulepreload">
<link href="/docs/course/pr_1349/es/_app/immutable/chunks/en53IbUL.js" rel="modulepreload">
<!--116gsbn--><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Despliegue de inferencia optimizado&quot;,&quot;local&quot;:&quot;despliegue-de-inferencia-optimizado&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Guía de selección de frameworks&quot;,&quot;local&quot;:&quot;guía-de-selección-de-frameworks&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Gestión de memoria y rendimiento&quot;,&quot;local&quot;:&quot;gestión-de-memoria-y-rendimiento&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Despliegue e integración&quot;,&quot;local&quot;:&quot;despliegue-e-integración&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Primeros pasos&quot;,&quot;local&quot;:&quot;primeros-pasos&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Instalación y configuración básica&quot;,&quot;local&quot;:&quot;instalación-y-configuración-básica&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Generación básica de texto&quot;,&quot;local&quot;:&quot;generación-básica-de-texto&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Control avanzado de generación&quot;,&quot;local&quot;:&quot;control-avanzado-de-generación&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Selección de tokens y muestreo&quot;,&quot;local&quot;:&quot;selección-de-tokens-y-muestreo&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Control de repetición&quot;,&quot;local&quot;:&quot;control-de-repetición&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Control de longitud y secuencias de parada&quot;,&quot;local&quot;:&quot;control-de-longitud-y-secuencias-de-parada&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Gestión de memoria&quot;,&quot;local&quot;:&quot;gestión-de-memoria&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Recursos&quot;,&quot;local&quot;:&quot;recursos&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"/><!---->
<link href="/docs/course/pr_1349/es/_app/immutable/assets/0.tn0RQdqM.css" rel="modulepreload"> <!--[--><!--[0--><!--[--><!--[0--><!--[--><p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"><div class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----></span> <span>Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg><!----></button></div> <!--[-1--><!--]--></div><!----> <!--[0--><h1 class="relative group"><a id="despliegue-de-inferencia-optimizado" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#despliegue-de-inferencia-optimizado"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Despliegue de inferencia optimizado</span></h1><!--]--><!----> <p>En esta sección, exploraremos frameworks avanzados para optimizar los despliegues de LLMs: Text Generation Inference (TGI), vLLM y llama.cpp. Estas aplicaciones se utilizan principalmente en entornos de producción para servir LLMs a usuarios. Esta sección se enfoca en cómo desplegar estos frameworks en producción en lugar de cómo usarlos para inferencia en una sola máquina.</p> <p>Cubriremos cómo estas herramientas maximizan la eficiencia de la inferencia y simplifican los despliegues en producción de modelos de lenguaje grandes (Large Language Models).</p> <!--[1--><h2 class="relative group"><a id="guía-de-selección-de-frameworks" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#guía-de-selección-de-frameworks"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Guía de selección de frameworks</span></h2><!--]--><!----> <p>TGI, vLLM y llama.cpp cumplen propósitos similares pero tienen características distintas que los hacen más adecuados para diferentes casos de uso. Veamos las diferencias clave entre ellos, centrándonos en el rendimiento y la integración.</p> <!--[2--><h3 class="relative group"><a id="gestión-de-memoria-y-rendimiento" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#gestión-de-memoria-y-rendimiento"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Gestión de memoria y rendimiento</span></h3><!--]--><!----> <p><strong>TGI</strong> está diseñado para ser estable y predecible en producción, utilizando longitudes de secuencia fijas para mantener el uso de memoria consistente. TGI gestiona la memoria utilizando técnicas de Flash Attention 2 y batching continuo (<em>continuous batching</em>). Esto significa que puede procesar cálculos de atención de manera muy eficiente y mantener la GPU ocupada alimentándola constantemente con trabajo. El sistema puede mover partes del modelo entre CPU y GPU cuando sea necesario, lo que ayuda a manejar modelos más grandes.</p> <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/tgi/flash-attn.png" alt="Flash Attention"/> <blockquote class="tip"><p>Flash Attention es una técnica que optimiza el mecanismo de atención en modelos transformer al abordar los cuellos de botella del ancho de banda de la memoria. Como vimos anteriormente en el <a href="/course/chapter1/8">Capítulo 1.8</a>, el mecanismo de atención tiene una complejidad y un uso de memoria cuadráticos, lo que lo hace ineficiente para secuencias largas.</p> <p>La innovación clave radica en cómo gestiona las transferencias de memoria entre la memoria de alto ancho de banda (High Bandwidth Memory o HBM) y la memoria caché SRAM, que es más rápida. La atención tradicional transfiere repetidamente datos entre HBM y SRAM, creando cuellos de botella al dejar la GPU inactiva. Flash Attention carga los datos una sola vez en SRAM y realiza todos los cálculos allí, minimizando las costosas transferencias de memoria.</p> <p>Si bien los beneficios son más significativos durante el entrenamiento, el menor uso de VRAM y la mayor eficiencia de Flash Attention también lo hacen muy valioso para la inferencia, permitiendo servir LLMs de forma más rápida y escalable.</p><!----></blockquote><!----> <p><strong>vLLM</strong> adopta un enfoque diferente al utilizar PagedAttention. De manera similar a cómo una computadora gestiona su memoria mediante páginas, vLLM divide la memoria del modelo en bloques más pequeños. Este ingenioso sistema permite manejar solicitudes de diferentes tamaños con mayor flexibilidad y sin desperdiciar espacio de memoria. Es particularmente eficaz compartiendo memoria entre distintas solicitudes y reduce la fragmentación de la memoria, lo que hace que todo el sistema sea más eficiente.</p> <blockquote class="tip"><p>PagedAttention es una técnica que aborda otro cuello de botella crítico en la inferencia de LLMs: la gestión de la memoria del caché KV (<em>KV cache</em>). Como se discutió en el <a href="/course/chapter1/8">Capítulo 1.8</a>, durante la generación de texto, el modelo almacena las claves y valores de atención (caché KV) para cada token generado para reducir cálculos redundantes. El caché KV puede volverse gigantesco, especialmente con secuencias largas o múltiples solicitudes concurrentes.</p> <p>La innovación clave de vLLM radica en cómo gestiona este caché:</p> <ol><li><strong>Paginación de memoria</strong>: En lugar de tratar el caché KV como un único bloque grande, se divide en “páginas” de tamaño fijo (similar a la memoria virtual en los sistemas operativos).</li> <li><strong>Almacenamiento no contiguo</strong>: Las páginas no necesitan almacenarse de forma contigua en la memoria de la GPU, lo que permite una asignación de memoria más flexible.</li> <li><strong>Gestión de la tabla de páginas</strong>: Una tabla de páginas realiza un seguimiento de qué páginas pertenecen a qué secuencia, lo que permite una búsqueda y acceso eficientes.</li> <li><strong>Memoria compartida</strong>: Para operaciones como el muestreo paralelo, las páginas que almacenan el caché KV para el prompt pueden compartirse entre múltiples secuencias.</li></ol> <p>El enfoque de PagedAttention puede permitir un rendimiento hasta 24 veces mayor en comparación con los métodos tradicionales, convirtiéndolo en un cambio radical para los despliegues de LLMs en producción. Si deseas profundizar en cómo funciona PagedAttention, puedes leer la <a href="https://docs.vllm.ai/en/latest/design/kernel/paged_attention.html" rel="nofollow">guía de la documentación de vLLM</a>.</p><!----></blockquote><!----> <p><strong>llama.cpp</strong> es una implementación en C/C++ altamente optimizada, diseñada originalmente para ejecutar modelos LLaMA en hardware de consumo. Se enfoca en la eficiencia en CPU con aceleración opcional en GPU y es ideal para entornos con recursos limitados. llama.cpp utiliza técnicas de cuantización para reducir el tamaño del modelo y los requisitos de memoria mientras mantiene un buen rendimiento. Implementa kernels optimizados para varias arquitecturas de CPU y admite la gestión básica del caché KV para una generación eficiente de tokens.</p> <blockquote class="tip"><p>La cuantización en llama.cpp reduce la precisión de los pesos del modelo de punto flotante de 32 o 16 bits a formatos de menor precisión como enteros de 8 bits (INT8), 4 bits o incluso menos. Esto reduce significativamente el uso de memoria y mejora la velocidad de inferencia con una pérdida mínima de calidad.</p> <p>Las características clave de la cuantización en llama.cpp incluyen:</p> <ol><li><strong>Múltiples niveles de cuantización</strong>: Admite cuantización de 8 bits, 4 bits, 3 bits e incluso 2 bits</li> <li><strong>Formato GGML/GGUF</strong>: Utiliza formatos de tensores personalizados optimizados para inferencia cuantizada</li> <li><strong>Precisión mixta</strong>: Puede aplicar diferentes niveles de cuantización a distintas partes del modelo</li> <li><strong>Optimizaciones específicas del hardware</strong>: Incluye rutas de código optimizadas para varias arquitecturas de CPU (AVX2, AVX-512, NEON)</li></ol> <p>Este enfoque permite ejecutar modelos de miles de millones de parámetros en hardware de consumo con memoria limitada, haciéndolo perfecto para despliegues locales y dispositivos de borde (<em>edge devices</em>).</p><!----></blockquote><!----> <!--[2--><h3 class="relative group"><a id="despliegue-e-integración" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#despliegue-e-integración"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Despliegue e integración</span></h3><!--]--><!----> <p>Pasemos a las diferencias de despliegue e integración entre los frameworks.</p> <p><strong>TGI</strong> sobresale en despliegues a nivel empresarial gracias a sus características listas para producción. Incluye soporte integrado para Kubernetes y contiene todo lo necesario para ejecutarse en producción, como monitorización a través de Prometheus y Grafana, escalado automático y completas funciones de seguridad. El sistema también incluye registro (<em>logging</em>) de nivel empresarial y varias medidas de protección como filtrado de contenido y limitación de tasa (<em>rate limiting</em>) para mantener tu despliegue seguro y estable.</p> <p><strong>vLLM</strong> adopta un enfoque más flexible y amigable para desarrolladores. Está construido con Python en su núcleo y puede reemplazar fácilmente la API de OpenAI en tus aplicaciones existentes. El framework se enfoca en ofrecer el máximo rendimiento bruto y puede personalizarse para adaptarse a tus necesidades específicas. Funciona especialmente bien con Ray para gestionar clústeres, lo que lo convierte en una excelente opción cuando necesitas alto rendimiento y adaptabilidad.</p> <p><strong>llama.cpp</strong> prioriza la simplicidad y la portabilidad. Su implementación de servidor es ligera y puede ejecutarse en una amplia gama de hardware, desde potentes servidores hasta portátiles de consumo e incluso algunos dispositivos móviles de alta gama. Con dependencias mínimas y un núcleo simple de C/C++, es fácil de desplegar en entornos donde instalar frameworks de Python sería complicado. El servidor proporciona una API compatible con OpenAI a la vez que mantiene una huella de recursos mucho menor que otras soluciones.</p> <!--[1--><h2 class="relative group"><a id="primeros-pasos" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#primeros-pasos"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Primeros pasos</span></h2><!--]--><!----> <p>Exploremos cómo usar estos frameworks para desplegar LLMs, comenzando con la instalación y la configuración básica.</p> <!--[2--><h3 class="relative group"><a id="instalación-y-configuración-básica" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#instalación-y-configuración-básica"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Instalación y configuración básica</span></h3><!--]--><!----> <div class="flex space-x-2 items-center my-1.5 mr-8 h-7 !pl-0 -mx-3 md:mx-0"><!--[--><!--]--></div> <div class="language-select"><!---->&lt;hfoption value="tgi" label="TGI"> <p>TGI es fácil de instalar y usar, con una profunda integración en el ecosistema de Hugging Face.</p> <p>Primero, inicia el servidor TGI usando Docker:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-sh "><!---->docker run --gpus all \
--shm-size 1g \
-p 8080:80 \
-v ~/.cache/huggingface:/data \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id HuggingFaceTB/SmolLM2-360M-Instruct<!----></pre></div><!----> <p>Luego interactúa con él utilizando el <code>InferenceClient</code> de Hugging Face:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> InferenceClient
<span class="hljs-comment"># Inicializar cliente apuntando al endpoint de TGI</span>
client = InferenceClient(
model=<span class="hljs-string">&quot;http://localhost:8080&quot;</span>, <span class="hljs-comment"># URL al servidor TGI</span>
)
<span class="hljs-comment"># Generación de texto</span>
response = client.text_generation(
<span class="hljs-string">&quot;Tell me a story&quot;</span>,
max_new_tokens=<span class="hljs-number">100</span>,
temperature=<span class="hljs-number">0.7</span>,
top_p=<span class="hljs-number">0.95</span>,
details=<span class="hljs-literal">True</span>,
stop_sequences=[],
)
<span class="hljs-built_in">print</span>(response.generated_text)
<span class="hljs-comment"># Para formato de chat</span>
response = client.chat_completion(
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a helpful assistant.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Tell me a story&quot;</span>},
],
max_tokens=<span class="hljs-number">100</span>,
temperature=<span class="hljs-number">0.7</span>,
top_p=<span class="hljs-number">0.95</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)<!----></pre></div><!----> <p>Alternativamente, puedes usar el cliente de OpenAI:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> OpenAI
<span class="hljs-comment"># Inicializar cliente apuntando al endpoint de TGI</span>
client = OpenAI(
base_url=<span class="hljs-string">&quot;http://localhost:8080/v1&quot;</span>, <span class="hljs-comment"># Asegúrate de incluir /v1</span>
api_key=<span class="hljs-string">&quot;not-needed&quot;</span>, <span class="hljs-comment"># TGI no requiere una clave de API por defecto</span>
)
<span class="hljs-comment"># Completado de chat</span>
response = client.chat.completions.create(
model=<span class="hljs-string">&quot;HuggingFaceTB/SmolLM2-360M-Instruct&quot;</span>,
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a helpful assistant.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Tell me a story&quot;</span>},
],
max_tokens=<span class="hljs-number">100</span>,
temperature=<span class="hljs-number">0.7</span>,
top_p=<span class="hljs-number">0.95</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="llama.cpp" label="llama.cpp"> <p>llama.cpp es fácil de instalar y usar, requiere dependencias mínimas y admite inferencia tanto en CPU como en GPU.</p> <p>Primero, instala y compila llama.cpp:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-sh "><!----><span class="hljs-comment"># Clonar el repositorio</span>
git <span class="hljs-built_in">clone</span> https://github.com/ggerganov/llama.cpp
<span class="hljs-built_in">cd</span> llama.cpp
<span class="hljs-comment"># Compilar el proyecto</span>
make
<span class="hljs-comment"># Descargar el modelo SmolLM2-1.7B-Instruct-GGUF</span>
curl -L -O https://huggingface.co/HuggingFaceTB/SmolLM2-1.7B-Instruct-GGUF/resolve/main/smollm2-1.7b-instruct.Q4_K_M.gguf<!----></pre></div><!----> <p>Luego, inicia el servidor (con compatibilidad de API de OpenAI):</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-sh "><!----><span class="hljs-comment"># Iniciar el servidor</span>
./server \
-m smollm2-1.7b-instruct.Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8080 \
-c 4096 \
--n-gpu-layers 0 <span class="hljs-comment"># Configura un número mayor para usar GPU</span><!----></pre></div><!----> <p>Interactúa con el servidor usando el <code>InferenceClient</code> de Hugging Face:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> InferenceClient
<span class="hljs-comment"># Inicializar cliente apuntando al servidor llama.cpp</span>
client = InferenceClient(
model=<span class="hljs-string">&quot;http://localhost:8080/v1&quot;</span>, <span class="hljs-comment"># URL al servidor llama.cpp</span>
token=<span class="hljs-string">&quot;sk-no-key-required&quot;</span>, <span class="hljs-comment"># El servidor llama.cpp requiere este placeholder</span>
)
<span class="hljs-comment"># Generación de texto</span>
response = client.text_generation(
<span class="hljs-string">&quot;Tell me a story&quot;</span>,
max_new_tokens=<span class="hljs-number">100</span>,
temperature=<span class="hljs-number">0.7</span>,
top_p=<span class="hljs-number">0.95</span>,
details=<span class="hljs-literal">True</span>,
)
<span class="hljs-built_in">print</span>(response.generated_text)
<span class="hljs-comment"># Para formato de chat</span>
response = client.chat_completion(
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a helpful assistant.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Tell me a story&quot;</span>},
],
max_tokens=<span class="hljs-number">100</span>,
temperature=<span class="hljs-number">0.7</span>,
top_p=<span class="hljs-number">0.95</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)<!----></pre></div><!----> <p>Alternativamente, puedes usar el cliente de OpenAI:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> OpenAI
<span class="hljs-comment"># Inicializar cliente apuntando al servidor llama.cpp</span>
client = OpenAI(
base_url=<span class="hljs-string">&quot;http://localhost:8080/v1&quot;</span>,
api_key=<span class="hljs-string">&quot;sk-no-key-required&quot;</span>, <span class="hljs-comment"># El servidor llama.cpp requiere este placeholder</span>
)
<span class="hljs-comment"># Completado de chat</span>
response = client.chat.completions.create(
model=<span class="hljs-string">&quot;smollm2-1.7b-instruct&quot;</span>, <span class="hljs-comment"># El identificador de modelo puede ser cualquiera, ya que el servidor solo carga un modelo</span>
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a helpful assistant.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Tell me a story&quot;</span>},
],
max_tokens=<span class="hljs-number">100</span>,
temperature=<span class="hljs-number">0.7</span>,
top_p=<span class="hljs-number">0.95</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="vllm" label="vLLM"> <p>vLLM es fácil de instalar y usar, con compatibilidad de API de OpenAI y una interfaz nativa de Python.</p> <p>Primero, inicia el servidor de vLLM compatible con OpenAI:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-sh "><!---->python -m vllm.entrypoints.openai.api_server \
--model HuggingFaceTB/SmolLM2-360M-Instruct \
--host 0.0.0.0 \
--port 8000<!----></pre></div><!----> <p>Luego interactúa con él utilizando el <code>InferenceClient</code> de Hugging Face:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> InferenceClient
<span class="hljs-comment"># Inicializar cliente apuntando al endpoint de vLLM</span>
client = InferenceClient(
model=<span class="hljs-string">&quot;http://localhost:8000/v1&quot;</span>, <span class="hljs-comment"># URL al servidor vLLM</span>
)
<span class="hljs-comment"># Generación de texto</span>
response = client.text_generation(
<span class="hljs-string">&quot;Tell me a story&quot;</span>,
max_new_tokens=<span class="hljs-number">100</span>,
temperature=<span class="hljs-number">0.7</span>,
top_p=<span class="hljs-number">0.95</span>,
details=<span class="hljs-literal">True</span>,
)
<span class="hljs-built_in">print</span>(response.generated_text)
<span class="hljs-comment"># Para formato de chat</span>
response = client.chat_completion(
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a helpful assistant.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Tell me a story&quot;</span>},
],
max_tokens=<span class="hljs-number">100</span>,
temperature=<span class="hljs-number">0.7</span>,
top_p=<span class="hljs-number">0.95</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)<!----></pre></div><!----> <p>Alternativamente, puedes usar el cliente de OpenAI:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> OpenAI
<span class="hljs-comment"># Inicializar cliente apuntando al endpoint de vLLM</span>
client = OpenAI(
base_url=<span class="hljs-string">&quot;http://localhost:8000/v1&quot;</span>,
api_key=<span class="hljs-string">&quot;not-needed&quot;</span>, <span class="hljs-comment"># vLLM no requiere una clave de API por defecto</span>
)
<span class="hljs-comment"># Completado de chat</span>
response = client.chat.completions.create(
model=<span class="hljs-string">&quot;HuggingFaceTB/SmolLM2-360M-Instruct&quot;</span>,
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a helpful assistant.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Tell me a story&quot;</span>},
],
max_tokens=<span class="hljs-number">100</span>,
temperature=<span class="hljs-number">0.7</span>,
top_p=<span class="hljs-number">0.95</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)<!----></pre></div><!----> &lt;/hfoption><!----></div><!----> <!--[2--><h3 class="relative group"><a id="generación-básica-de-texto" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#generación-básica-de-texto"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Generación básica de texto</span></h3><!--]--><!----> <p>Veamos ejemplos de generación de texto con los frameworks:</p> <div class="flex space-x-2 items-center my-1.5 mr-8 h-7 !pl-0 -mx-3 md:mx-0"><!--[--><!--]--></div> <div class="language-select"><!---->&lt;hfoption value="tgi" label="TGI"> <p>Primero, despliega TGI con parámetros avanzados:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-sh "><!---->docker run --gpus all \
--shm-size 1g \
-p 8080:80 \
-v ~/.cache/huggingface:/data \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id HuggingFaceTB/SmolLM2-360M-Instruct \
--max-total-tokens 4096 \
--max-input-length 3072 \
--max-batch-total-tokens 8192 \
--waiting-served-ratio 1.2<!----></pre></div><!----> <p>Usa el <code>InferenceClient</code> para una generación de texto flexible:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> InferenceClient
client = InferenceClient(model=<span class="hljs-string">&quot;http://localhost:8080&quot;</span>)
<span class="hljs-comment"># Ejemplo de parámetros avanzados</span>
response = client.chat_completion(
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a creative storyteller.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Write a creative story&quot;</span>},
],
temperature=<span class="hljs-number">0.8</span>,
max_tokens=<span class="hljs-number">200</span>,
top_p=<span class="hljs-number">0.95</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)
<span class="hljs-comment"># Generación de texto sin formato</span>
response = client.text_generation(
<span class="hljs-string">&quot;Write a creative story about space exploration&quot;</span>,
max_new_tokens=<span class="hljs-number">200</span>,
temperature=<span class="hljs-number">0.8</span>,
top_p=<span class="hljs-number">0.95</span>,
repetition_penalty=<span class="hljs-number">1.1</span>,
do_sample=<span class="hljs-literal">True</span>,
details=<span class="hljs-literal">True</span>,
)
<span class="hljs-built_in">print</span>(response.generated_text)<!----></pre></div><!----> <p>O usa el cliente de OpenAI:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> OpenAI
client = OpenAI(base_url=<span class="hljs-string">&quot;http://localhost:8080/v1&quot;</span>, api_key=<span class="hljs-string">&quot;not-needed&quot;</span>)
<span class="hljs-comment"># Ejemplo de parámetros avanzados</span>
response = client.chat.completions.create(
model=<span class="hljs-string">&quot;HuggingFaceTB/SmolLM2-360M-Instruct&quot;</span>,
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a creative storyteller.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Write a creative story&quot;</span>},
],
temperature=<span class="hljs-number">0.8</span>, <span class="hljs-comment"># Más alto para mayor creatividad</span>
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="llama.cpp" label="llama.cpp"> <p>Para llama.cpp, puedes configurar parámetros avanzados al iniciar el servidor:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-sh "><!---->./server \
-m smollm2-1.7b-instruct.Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8080 \
-c 4096 \ <span class="hljs-comment"># Tamaño del contexto</span>
--threads 8 \ <span class="hljs-comment"># Hilos de CPU a usar</span>
--batch-size 512 \ <span class="hljs-comment"># Tamaño del lote para evaluación de prompts</span>
--n-gpu-layers 0 <span class="hljs-comment"># Capas en GPU (0 = solo CPU)</span><!----></pre></div><!----> <p>Usa el <code>InferenceClient</code>:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> InferenceClient
client = InferenceClient(model=<span class="hljs-string">&quot;http://localhost:8080/v1&quot;</span>, token=<span class="hljs-string">&quot;sk-no-key-required&quot;</span>)
<span class="hljs-comment"># Ejemplo de parámetros avanzados</span>
response = client.chat_completion(
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a creative storyteller.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Write a creative story&quot;</span>},
],
temperature=<span class="hljs-number">0.8</span>,
max_tokens=<span class="hljs-number">200</span>,
top_p=<span class="hljs-number">0.95</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)
<span class="hljs-comment"># Para generación directa de texto</span>
response = client.text_generation(
<span class="hljs-string">&quot;Write a creative story about space exploration&quot;</span>,
max_new_tokens=<span class="hljs-number">200</span>,
temperature=<span class="hljs-number">0.8</span>,
top_p=<span class="hljs-number">0.95</span>,
repetition_penalty=<span class="hljs-number">1.1</span>,
details=<span class="hljs-literal">True</span>,
)
<span class="hljs-built_in">print</span>(response.generated_text)<!----></pre></div><!----> <p>O usa el cliente de OpenAI para generación con control sobre los parámetros de muestreo:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> OpenAI
client = OpenAI(base_url=<span class="hljs-string">&quot;http://localhost:8080/v1&quot;</span>, api_key=<span class="hljs-string">&quot;sk-no-key-required&quot;</span>)
<span class="hljs-comment"># Ejemplo de parámetros avanzados</span>
response = client.chat.completions.create(
model=<span class="hljs-string">&quot;smollm2-1.7b-instruct&quot;</span>,
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a creative storyteller.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Write a creative story&quot;</span>},
],
temperature=<span class="hljs-number">0.8</span>, <span class="hljs-comment"># Más alto para mayor creatividad</span>
top_p=<span class="hljs-number">0.95</span>, <span class="hljs-comment"># Probabilidad del muestreo por núcleo (nucleus sampling)</span>
frequency_penalty=<span class="hljs-number">0.5</span>, <span class="hljs-comment"># Reduce la repetición de tokens frecuentes</span>
presence_penalty=<span class="hljs-number">0.5</span>, <span class="hljs-comment"># Reduce la repetición penalizando tokens ya presentes</span>
max_tokens=<span class="hljs-number">200</span>, <span class="hljs-comment"># Longitud máxima de generación</span>
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)<!----></pre></div><!----> <p>También puedes usar la biblioteca nativa de llama.cpp para un control aún mayor:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-comment"># Usando el paquete llama-cpp-python para acceso directo al modelo</span>
<span class="hljs-keyword">from</span> llama_cpp <span class="hljs-keyword">import</span> Llama
<span class="hljs-comment"># Cargar el modelo</span>
llm = Llama(
model_path=<span class="hljs-string">&quot;smollm2-1.7b-instruct.Q4_K_M.gguf&quot;</span>,
n_ctx=<span class="hljs-number">4096</span>, <span class="hljs-comment"># Tamaño de la ventana de contexto</span>
n_threads=<span class="hljs-number">8</span>, <span class="hljs-comment"># Hilos de CPU</span>
n_gpu_layers=<span class="hljs-number">0</span>, <span class="hljs-comment"># Capas en GPU (0 = solo CPU)</span>
)
<span class="hljs-comment"># Formatear el prompt de acuerdo al formato esperado por el modelo</span>
prompt = <span class="hljs-string">&quot;&quot;&quot;&lt;|im_start|&gt;system
You are a creative storyteller.
&lt;|im_end|&gt;
&lt;|im_start|&gt;user
Write a creative story
&lt;|im_end|&gt;
&lt;|im_start|&gt;assistant
&quot;&quot;&quot;</span>
<span class="hljs-comment"># Generar respuesta con control preciso de parámetros</span>
output = llm(
prompt,
max_tokens=<span class="hljs-number">200</span>,
temperature=<span class="hljs-number">0.8</span>,
top_p=<span class="hljs-number">0.95</span>,
frequency_penalty=<span class="hljs-number">0.5</span>,
presence_penalty=<span class="hljs-number">0.5</span>,
stop=[<span class="hljs-string">&quot;&lt;|im_end|&gt;&quot;</span>],
)
<span class="hljs-built_in">print</span>(output[<span class="hljs-string">&quot;choices&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;text&quot;</span>])<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="vllm" label="vLLM"> <p>Para un uso avanzado con vLLM, puedes usar el <code>InferenceClient</code>:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> InferenceClient
client = InferenceClient(model=<span class="hljs-string">&quot;http://localhost:8000/v1&quot;</span>)
<span class="hljs-comment"># Ejemplo de parámetros avanzados</span>
response = client.chat_completion(
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a creative storyteller.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Write a creative story&quot;</span>},
],
temperature=<span class="hljs-number">0.8</span>,
max_tokens=<span class="hljs-number">200</span>,
top_p=<span class="hljs-number">0.95</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)
<span class="hljs-comment"># Para generación directa de texto</span>
response = client.text_generation(
<span class="hljs-string">&quot;Write a creative story about space exploration&quot;</span>,
max_new_tokens=<span class="hljs-number">200</span>,
temperature=<span class="hljs-number">0.8</span>,
top_p=<span class="hljs-number">0.95</span>,
details=<span class="hljs-literal">True</span>,
)
<span class="hljs-built_in">print</span>(response.generated_text)<!----></pre></div><!----> <p>También puedes usar el cliente de OpenAI:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> OpenAI
client = OpenAI(base_url=<span class="hljs-string">&quot;http://localhost:8000/v1&quot;</span>, api_key=<span class="hljs-string">&quot;not-needed&quot;</span>)
<span class="hljs-comment"># Ejemplo de parámetros avanzados</span>
response = client.chat.completions.create(
model=<span class="hljs-string">&quot;HuggingFaceTB/SmolLM2-360M-Instruct&quot;</span>,
messages=[
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a creative storyteller.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Write a creative story&quot;</span>},
],
temperature=<span class="hljs-number">0.8</span>,
top_p=<span class="hljs-number">0.95</span>,
max_tokens=<span class="hljs-number">200</span>,
)
<span class="hljs-built_in">print</span>(response.choices[<span class="hljs-number">0</span>].message.content)<!----></pre></div><!----> <p>vLLM también proporciona una interfaz nativa de Python con control granular:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> vllm <span class="hljs-keyword">import</span> LLM, SamplingParams
<span class="hljs-comment"># Inicializar el modelo con parámetros avanzados</span>
llm = LLM(
model=<span class="hljs-string">&quot;HuggingFaceTB/SmolLM2-360M-Instruct&quot;</span>,
gpu_memory_utilization=<span class="hljs-number">0.85</span>,
max_num_batched_tokens=<span class="hljs-number">8192</span>,
max_num_seqs=<span class="hljs-number">256</span>,
block_size=<span class="hljs-number">16</span>,
)
<span class="hljs-comment"># Configurar parámetros de muestreo</span>
sampling_params = SamplingParams(
temperature=<span class="hljs-number">0.8</span>, <span class="hljs-comment"># Más alto para mayor creatividad</span>
top_p=<span class="hljs-number">0.95</span>, <span class="hljs-comment"># Considera el 95% superior de la masa de probabilidad</span>
max_tokens=<span class="hljs-number">100</span>, <span class="hljs-comment"># Longitud máxima</span>
presence_penalty=<span class="hljs-number">1.1</span>, <span class="hljs-comment"># Reduce la repetición</span>
frequency_penalty=<span class="hljs-number">1.1</span>, <span class="hljs-comment"># Reduce la repetición</span>
stop=[<span class="hljs-string">&quot;\n\n&quot;</span>, <span class="hljs-string">&quot;###&quot;</span>], <span class="hljs-comment"># Secuencias de parada</span>
)
<span class="hljs-comment"># Generar texto</span>
prompt = <span class="hljs-string">&quot;Write a creative story&quot;</span>
outputs = llm.generate(prompt, sampling_params)
<span class="hljs-built_in">print</span>(outputs[<span class="hljs-number">0</span>].outputs[<span class="hljs-number">0</span>].text)
<span class="hljs-comment"># Para interacciones de estilo chat</span>
chat_prompt = [
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;You are a creative storyteller.&quot;</span>},
{<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Write a creative story&quot;</span>},
]
formatted_prompt = llm.get_chat_template()(
chat_prompt
) <span class="hljs-comment"># Usa la plantilla de chat del modelo</span>
outputs = llm.generate(formatted_prompt, sampling_params)
<span class="hljs-built_in">print</span>(outputs[<span class="hljs-number">0</span>].outputs[<span class="hljs-number">0</span>].text)<!----></pre></div><!----> &lt;/hfoption><!----></div><!----> <!--[1--><h2 class="relative group"><a id="control-avanzado-de-generación" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#control-avanzado-de-generación"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Control avanzado de generación</span></h2><!--]--><!----> <!--[2--><h3 class="relative group"><a id="selección-de-tokens-y-muestreo" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#selección-de-tokens-y-muestreo"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Selección de tokens y muestreo</span></h3><!--]--><!----> <p>El proceso de generación de texto implica seleccionar el siguiente token en cada paso. Este proceso de selección se puede controlar mediante varios parámetros:</p> <ol><li><strong>Logits en crudo</strong>: Las probabilidades de salida iniciales para cada token</li> <li><strong>Temperatura</strong>: Controla la aleatoriedad en la selección (más alta = más creativa)</li> <li><strong>Muestreo Top-p (Nucleus)</strong>: Filtra los mejores tokens que componen el X% de la masa de probabilidad</li> <li><strong>Filtrado Top-k</strong>: Limita la selección a los k tokens más probables</li></ol> <p>Así es como se configuran estos parámetros:</p> <div class="flex space-x-2 items-center my-1.5 mr-8 h-7 !pl-0 -mx-3 md:mx-0"><!--[--><!--]--></div> <div class="language-select"><!---->&lt;hfoption value="tgi" label="TGI"> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!---->client.generate(
<span class="hljs-string">&quot;Write a creative story&quot;</span>,
temperature=<span class="hljs-number">0.8</span>, <span class="hljs-comment"># Más alto para mayor creatividad</span>
top_p=<span class="hljs-number">0.95</span>, <span class="hljs-comment"># Considera el 95% superior de la masa de probabilidad</span>
top_k=<span class="hljs-number">50</span>, <span class="hljs-comment"># Considera los 50 tokens superiores</span>
max_new_tokens=<span class="hljs-number">100</span>, <span class="hljs-comment"># Longitud máxima</span>
repetition_penalty=<span class="hljs-number">1.1</span>, <span class="hljs-comment"># Reduce la repetición</span>
)<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="llama.cpp" label="llama.cpp"> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-comment"># A través de compatibilidad con la API de OpenAI</span>
response = client.completions.create(
model=<span class="hljs-string">&quot;smollm2-1.7b-instruct&quot;</span>, <span class="hljs-comment"># Nombre del modelo (puede ser cualquier string para el servidor llama.cpp)</span>
prompt=<span class="hljs-string">&quot;Write a creative story&quot;</span>,
temperature=<span class="hljs-number">0.8</span>, <span class="hljs-comment"># Más alto para mayor creatividad</span>
top_p=<span class="hljs-number">0.95</span>, <span class="hljs-comment"># Considera el 95% superior de la masa de probabilidad</span>
frequency_penalty=<span class="hljs-number">1.1</span>, <span class="hljs-comment"># Reduce la repetición</span>
presence_penalty=<span class="hljs-number">0.1</span>, <span class="hljs-comment"># Reduce la repetición</span>
max_tokens=<span class="hljs-number">100</span>, <span class="hljs-comment"># Longitud máxima</span>
)
<span class="hljs-comment"># A través del acceso directo con llama-cpp-python</span>
output = llm(
<span class="hljs-string">&quot;Write a creative story&quot;</span>,
temperature=<span class="hljs-number">0.8</span>,
top_p=<span class="hljs-number">0.95</span>,
top_k=<span class="hljs-number">50</span>,
max_tokens=<span class="hljs-number">100</span>,
repeat_penalty=<span class="hljs-number">1.1</span>,
)<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="vllm" label="vLLM"> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!---->params = SamplingParams(
temperature=<span class="hljs-number">0.8</span>, <span class="hljs-comment"># Más alto para mayor creatividad</span>
top_p=<span class="hljs-number">0.95</span>, <span class="hljs-comment"># Considera el 95% superior de la masa de probabilidad</span>
top_k=<span class="hljs-number">50</span>, <span class="hljs-comment"># Considera los 50 tokens superiores</span>
max_tokens=<span class="hljs-number">100</span>, <span class="hljs-comment"># Longitud máxima</span>
presence_penalty=<span class="hljs-number">0.1</span>, <span class="hljs-comment"># Reduce la repetición</span>
)
llm.generate(<span class="hljs-string">&quot;Write a creative story&quot;</span>, sampling_params=params)<!----></pre></div><!----> &lt;/hfoption><!----></div><!----> <!--[2--><h3 class="relative group"><a id="control-de-repetición" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#control-de-repetición"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Control de repetición</span></h3><!--]--><!----> <p>Ambos frameworks proporcionan formas de prevenir la generación de texto repetitivo:</p> <div class="flex space-x-2 items-center my-1.5 mr-8 h-7 !pl-0 -mx-3 md:mx-0"><!--[--><!--]--></div> <div class="language-select"><!---->&lt;hfoption value="tgi" label="TGI"> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!---->client.generate(
<span class="hljs-string">&quot;Write a varied text&quot;</span>,
repetition_penalty=<span class="hljs-number">1.1</span>, <span class="hljs-comment"># Penaliza los tokens repetidos</span>
no_repeat_ngram_size=<span class="hljs-number">3</span>, <span class="hljs-comment"># Previene la repetición de 3-gramas</span>
)<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="llama.cpp" label="llama.cpp"> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-comment"># A través de la API de OpenAI</span>
response = client.completions.create(
model=<span class="hljs-string">&quot;smollm2-1.7b-instruct&quot;</span>,
prompt=<span class="hljs-string">&quot;Write a varied text&quot;</span>,
frequency_penalty=<span class="hljs-number">1.1</span>, <span class="hljs-comment"># Penaliza los tokens frecuentes</span>
presence_penalty=<span class="hljs-number">0.8</span>, <span class="hljs-comment"># Penaliza los tokens ya presentes</span>
)
<span class="hljs-comment"># A través de la biblioteca directa</span>
output = llm(
<span class="hljs-string">&quot;Write a varied text&quot;</span>,
repeat_penalty=<span class="hljs-number">1.1</span>, <span class="hljs-comment"># Penaliza los tokens repetidos</span>
frequency_penalty=<span class="hljs-number">0.5</span>, <span class="hljs-comment"># Penalización adicional por frecuencia</span>
presence_penalty=<span class="hljs-number">0.5</span>, <span class="hljs-comment"># Penalización adicional por presencia</span>
)<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="vllm" label="vLLM"> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!---->params = SamplingParams(
presence_penalty=<span class="hljs-number">0.1</span>, <span class="hljs-comment"># Penaliza la presencia de tokens</span>
frequency_penalty=<span class="hljs-number">0.1</span>, <span class="hljs-comment"># Penaliza la frecuencia de tokens</span>
)<!----></pre></div><!----> &lt;/hfoption><!----></div><!----> <!--[2--><h3 class="relative group"><a id="control-de-longitud-y-secuencias-de-parada" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#control-de-longitud-y-secuencias-de-parada"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Control de longitud y secuencias de parada</span></h3><!--]--><!----> <p>Puedes controlar la longitud de la generación y especificar cuándo detenerse:</p> <div class="flex space-x-2 items-center my-1.5 mr-8 h-7 !pl-0 -mx-3 md:mx-0"><!--[--><!--]--></div> <div class="language-select"><!---->&lt;hfoption value="tgi" label="TGI"> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!---->client.generate(
<span class="hljs-string">&quot;Generate a short paragraph&quot;</span>,
max_new_tokens=<span class="hljs-number">100</span>,
min_new_tokens=<span class="hljs-number">10</span>,
stop_sequences=[<span class="hljs-string">&quot;\n\n&quot;</span>, <span class="hljs-string">&quot;###&quot;</span>],
)<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="llama.cpp" label="llama.cpp"> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-comment"># A través de la API de OpenAI</span>
response = client.completions.create(
model=<span class="hljs-string">&quot;smollm2-1.7b-instruct&quot;</span>,
prompt=<span class="hljs-string">&quot;Generate a short paragraph&quot;</span>,
max_tokens=<span class="hljs-number">100</span>,
stop=[<span class="hljs-string">&quot;\n\n&quot;</span>, <span class="hljs-string">&quot;###&quot;</span>],
)
<span class="hljs-comment"># A través de la biblioteca directa</span>
output = llm(<span class="hljs-string">&quot;Generate a short paragraph&quot;</span>, max_tokens=<span class="hljs-number">100</span>, stop=[<span class="hljs-string">&quot;\n\n&quot;</span>, <span class="hljs-string">&quot;###&quot;</span>])<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="vllm" label="vLLM"> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!---->params = SamplingParams(
max_tokens=<span class="hljs-number">100</span>,
min_tokens=<span class="hljs-number">10</span>,
stop=[<span class="hljs-string">&quot;###&quot;</span>, <span class="hljs-string">&quot;\n\n&quot;</span>],
ignore_eos=<span class="hljs-literal">False</span>,
skip_special_tokens=<span class="hljs-literal">True</span>,
)<!----></pre></div><!----> &lt;/hfoption><!----></div><!----> <!--[1--><h2 class="relative group"><a id="gestión-de-memoria" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#gestión-de-memoria"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Gestión de memoria</span></h2><!--]--><!----> <p>Los frameworks implementan técnicas avanzadas de gestión de memoria para una inferencia eficiente.</p> <div class="flex space-x-2 items-center my-1.5 mr-8 h-7 !pl-0 -mx-3 md:mx-0"><!--[--><!--]--></div> <div class="language-select"><!---->&lt;hfoption value="tgi" label="TGI"> <p>TGI utiliza Flash Attention 2 y batching continuo:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-sh "><!----><span class="hljs-comment"># Despliegue con Docker y optimización de memoria</span>
docker run --gpus all -p 8080:80 \
--shm-size 1g \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id HuggingFaceTB/SmolLM2-1.7B-Instruct \
--max-batch-total-tokens 8192 \
--max-input-length 4096<!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="llama.cpp" label="llama.cpp"> <p>llama.cpp utiliza cuantización y una disposición de memoria optimizada:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-sh "><!----><span class="hljs-comment"># Servidor con optimizaciones de memoria</span>
./server \
-m smollm2-1.7b-instruct.Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8080 \
-c 2048 \ <span class="hljs-comment"># Tamaño del contexto</span>
--threads 4 \ <span class="hljs-comment"># Hilos de CPU</span>
--n-gpu-layers 32 \ <span class="hljs-comment"># Usa más capas en GPU para modelos más grandes</span>
--mlock \ <span class="hljs-comment"># Bloquea la memoria para evitar el intercambio (swapping)</span>
--cont-batching <span class="hljs-comment"># Habilita el batching continuo</span><!----></pre></div><!----> <p>Para modelos demasiado grandes para tu GPU, puedes usar descarga a CPU (<em>CPU offloading</em>):</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-sh "><!---->./server \
-m smollm2-1.7b-instruct.Q4_K_M.gguf \
--n-gpu-layers 20 \ <span class="hljs-comment"># Mantiene las primeras 20 capas en GPU</span>
--threads 8 <span class="hljs-comment"># Usa más hilos de CPU para las capas en CPU</span><!----></pre></div><!----> &lt;/hfoption>
&lt;hfoption value="vllm" label="vLLM"> <p>vLLM utiliza PagedAttention para una gestión óptima de la memoria:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copied</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> vllm.engine.arg_utils <span class="hljs-keyword">import</span> AsyncEngineArgs
engine_args = AsyncEngineArgs(
model=<span class="hljs-string">&quot;HuggingFaceTB/SmolLM2-1.7B-Instruct&quot;</span>,
gpu_memory_utilization=<span class="hljs-number">0.85</span>,
max_num_batched_tokens=<span class="hljs-number">8192</span>,
block_size=<span class="hljs-number">16</span>,
)
llm = LLM(engine_args=engine_args)<!----></pre></div><!----> &lt;/hfoption><!----></div><!----> <!--[1--><h2 class="relative group"><a id="recursos" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#recursos"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span>Recursos</span></h2><!--]--><!----> <ul><li><a href="https://huggingface.co/docs/text-generation-inference" rel="nofollow">Documentación de Text Generation Inference</a></li> <li><a href="https://github.com/huggingface/text-generation-inference" rel="nofollow">Repositorio de GitHub de TGI</a></li> <li><a href="https://vllm.readthedocs.io/" rel="nofollow">Documentación de vLLM</a></li> <li><a href="https://github.com/vllm-project/vllm" rel="nofollow">Repositorio de GitHub de vLLM</a></li> <li><a href="https://arxiv.org/abs/2309.06180" rel="nofollow">Artículo de PagedAttention</a></li> <li><a href="https://github.com/ggerganov/llama.cpp" rel="nofollow">Repositorio de GitHub de llama.cpp</a></li> <li><a href="https://github.com/abetlen/llama-cpp-python" rel="nofollow">Repositorio de llama-cpp-python</a></li></ul> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/course/blob/main/chapters/es/chapter2/8.mdx" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg><!----> <span><span class="underline">Update</span> on GitHub</span></a><!----> <p></p><!--]--><!----><!--]--><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
<script>
{
__sveltekit_10afzkk = {
base: "/docs/course/pr_1349/es",
assets: "/docs/course/pr_1349/es"
};
const element = document.currentScript.parentElement;
Promise.all([
import("/docs/course/pr_1349/es/_app/immutable/entry/start.i8cfvJdK.js"),
import("/docs/course/pr_1349/es/_app/immutable/entry/app.ChbcDIvp.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 17],
data: [null,null],
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
112 kB
·
Xet hash:
9578be95f89b2f927c8aaede1dfd2af21d5f1ece5457f0e407fcb4626f999a01

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.