Continuando la serie de ejecución de LLMs en local, en este post veremos una alternativa a Ollama también extendida en el mercado para poder hacernos una idea de sus diferencias y similitudes. En este caso hablaremos de LM Studio y su funcionamiento.

¿Quieres echarle un vistazo a los posts anteriores de la serie?

¿Qué es LM Studio?

Igual que Ollama, LM Studio es una aplicación para gestionar LLMs de forma local, pudiendo instalarlo en los distintos sistemas operativos (macOS, Linux y Windows) con los correspondientes requisitos mínimos del sistema. Entre sus funcionalidades clave se encuentran:

Instalación

En este caso ejecutamos LMStudio con la instalación de Linux. Una vez descargado el programa (puede ser necesario descargar Chrome y darle los permisos adecuados al instalable con el comando chmod +x LM-Studio-0.3.23-3-x64.AppImage), se ejecutará el siguiente comando:

./LM-Studio-0.3.23-3-x64.AppImage --no-sandbox

Con él, ya se desplegará la aplicación:

LM Studio desplegado
LM Studio desplegado

Siguiendo los pasos del instalador, se podrá seleccionar el nivel de personalización que queramos:

Nivel de personalización en LM Studio
Nivel de personalización en LM Studio

Y seguidamente, nos encontraremos con la interfaz de chat (en caso de aparecer un paso para descargar un modelo directamente, se puede omitir):

Interfaz de chat en LM Studio
Interfaz de chat en LM Studio

Además de poder buscar modelos en la sección correspondiente del propio programa, dentro de la página de LMStudio también se puede encontrar un listado de modelos disponibles con su descripción y posibles configuraciones:

Modelos disponibles en LM Studio
Modelos disponibles en LM Studio

Comandos CLI

LM Studio proporciona una CLI para interactuar con los modelos por comandos. La CLI es una de las secciones que se incluyen en la interfaz gráfica:

CLI en LM Studio
CLI en LM Studio

Otra de las opciones es instalar la CLI directamente en nuestro sistema para poder ejecutarla desde la terminal. Esta es la opción que seguiremos en este artículo a través del sistema operativo Ubuntu. Para ello se deberá ejecutar el comando:

npx lmstudio install-cli
Comandos CLI

Los comandos disponibles en LM Studio son:

  1. LOAD

Comando que carga un modelo en memoria. Se le pueden informar parámetros como la longitud de contexto, la desactivación de la GPU o el TTL. Hay que indicar que no existe un comando de interacción directa con el modelo cargado a través de la CLI, sino que se carga dicho modelo para que esté disponible de cara a la interacción en la interfaz gráfica.

lms load google/gemma-3-1b

lms load google/gemma-3-1b --context-length 4096 

lms load google/gemma-3-1b --gpu off

lms load google/gemma-3-1b --ttl 3600
Comandos CLI: load
Comandos CLI: load context length
Comandos cli: load gpu off
  1. UNLOAD

Comando que descarga un modelo en memoria. Se le puede indicar la opción “--all” para descargar todos los modelos.

lms unload google/gemma-3-1b

lms unload --all
Comandos CLI: unload
  1. GET

Comando para buscar y descargar modelos de los repositorios remotos. Si no se indica el nombre del modelo, se muestran algunos modelos recomendados. Los modelos descargados habitualmente se encuentran en el directorio ~/.cache/lm-studio/ o ~/.lm-studio/models.

lms get google/gemma-3-1b

lms get --mlx #filtrado por el formato del modelo mlx

lms get --gguf #filtrado por el formato del modelo gguf

lms get --limit 5 #limitar los resultados
Comandos CLI: get
Comandos CLI: get mlx
Comandos CLI: get gguf
Comandos CLI: get limit 5
  1. SERVER START

Comando para iniciar el servidor local de LM Studio, pudiendo especificar el puerto y habilitar el soporte para CORS.

lms server start

lms server start --port 3000

lms server start --cors
Comandos CLI: server start
  1. SERVER STATUS

Comando que indica el estado actual del servidor local de LM Studio además de su configuración.

lms server status

lms server status --verbose

lms server status --quiet

lms server status --log-level debug
Comandos CLI: server status
  1. SERVER STOP

Comando para parar el servidor local.

lms server stop
Comandos CLI: server stop
  1. LS

Comando que muestra los modelos descargados en local con información como el tamaño, arquitectura y parámetros.

lms ls

lms ls --llm #solo muestra los modelos de tipo LLM

lms ls --embedding #solo muestra los modelos de tipo embedding

lms ls --detailed

lms ls --json
Comandos CLI: LS
Comandos CLI: LS LLM
Comandos CLI: LS JSON
  1. PS

Comando que lista los modelos cargados en memoria.

lms ps

lms ps --json
Comandos CLI: PS
Comandos CLI: PS JSON
  1. CLONE

Comando para descargar los ficheros model.yaml (este fichero se comenta con más detalle en una sección posterior), README y otros ficheros de metadatos (no descarga los pesos del modelo).

lms clone google/gemma-3-1b
Comandos CLI: clone
  1. LOG STREAM

Comando que permite visualizar los prompts que se envían exactamente al modelo.

lms log stream
Comandos CLI: log stream
  1. PUSH

Comando que empaqueta el contenido del directorio actual y lo sube al Hub de LM Studio para poder compartir modelos con los demás usuarios.

lms push

API

Como en otras herramientas, nos encontramos con dos tipos de endpoints API: los compatibles con OpenAI y los propios. Esta funcionalidad es importante especialmente desde el punto de vista de un perfil de desarrollo para poder realizar integraciones con las aplicaciones.

Endpoints compatibles con OpenAI

En este caso, los endpoints disponibles son:

/v1/models
/v1/models
/v1/chat/completions
/v1/chat/completions
/v1/embeddings
/v1/embeddings
/v1/completions
/v1/completions

Endpoints propios

Es importante remarcar que esta es una funcionalidad en fase beta y que requiere una versión de LM Studio superior a la 0.3.6. Los endpoints disponibles son:

/api/v0/models
/api/v0/models
/api/v0/models/{model}
/api/v0/models/{model}
/api/v0/chat/completions
/api/v0/chat/completions
/api/v0/completions
/api/v0/completions
/api/v0/embeddings
/api/v0/embeddings

Además de las formas de interacción vistas anteriormente (interfaz, CLI y API), existen sdks para Python y Typescript para poder realizar llamadas directamente a LMStudio a través de métodos y funciones preconfigurados.

Model.yaml

LM Studio también está construyendo (todavía en fase borrador) su forma centralizada y estandarizada de gestionar los distintos modelos. En este caso, lo hace a través de un fichero en formato yaml, permitiendo describir un modelo y todas sus variantes, metadatos personalizados o incluso una lógica personalizada. De esta forma consigue delegar la responsabilidad al runtime para que seleccione cuál es la variante del modelo adecuada para descargar y ejecutar.

Existen varias secciones para la construcción de un model.yaml:

model: google/gemma-3-1b
base:
  - key: lmstudio-community/gemma-3-1B-it-QAT-GGUF
    sources:
      - type: huggingface
        user: lmstudio-community
        repo: gemma-3-1B-it-QAT-GGUF
  - key: mlx-community/gemma-3-1b-it-qat-4bit
    sources:
      - type: huggingface
        user: mlx-community
        repo: gemma-3-1b-it-qat-4bit
metadataOverrides:
  domain: llm
  architectures:
    - gemma3
  compatibilityTypes:
    - gguf
    - safetensors
  paramsStrings:
    - 1B
  minMemoryUsageBytes: 754974720
  trainedForToolUse: false
  vision: false
config:
  operation:
    fields:
      - key: llm.prediction.topKSampling
        value: 20
      - key: llm.prediction.minPSampling
        value:
          checked: true
          value: 0
customFields:
  - key: enableThinking
    displayName: Enable Thinking
    description: Controls whether the model will think before replying
    type: boolean
    defaultValue: true
    effects:
      - type: setJinjaVariable
        variable: enable_thinking

Para que este ejemplo funcione, la plantilla jinja debe tener definida la variable enable_thinking.

suggestions:
  - message: The following parameters are recommended for thinking mode
    conditions:
      - type: equals
        key: $.enableThinking
        value: true
    fields:
      - key: llm.prediction.temperature
        value: 0.6

Comparto aquí un ejemplo de fichero completo.

Es importante indicar que, hasta el momento de la escritura de este post, el model.yaml está enfocado en la personalización de modelos para publicarlos en el Hub de LM Studio y posteriormente poder descargarlos (mediante el comando lms get) y usarlos.

Como por el momento está marcada como una función beta, es posible que en un tiempo esta característica funcione de una forma similar a la ofrecida por Ollama y sus Modelfiles para poder crear y ejecutar dichos modelos personalizados desde el propio pc, sin necesidad de subirlos a un registry o Hub.

Importando modelos externos

También en una fase experimental, LM Studio permite importar modelos en formato GGUF descargados fuera del ámbito del propio LM Studio. Para hacer uso de estos modelos, primero ejecutamos el comando de importación:

lms import ./llama-3.2-1b-instruct-q4_k_m.gguf

Y luego ya podemos ejecutarlo como otro modelo más existente en el sistema.

Importando modelos externos en LM Studio

Conclusiones

Continuando la serie de ejecución de LLMs en local, hemos visto LM Studio como una alternativa a Ollama. LM Studio tiene una serie de funcionalidades muy parecidas a Ollama, además de proporcionar una interfaz de usuario para la interacción y gestión de los modelos, lo que la convierte en una buena opción para ejecutar LLMs en local.

En el próximo post hablaremos sobre una tercera opción: Llamafile. ¡Te leo en comentarios!

Referencias

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete