在无图形界面的服务器上运行 LM Studio

LM Studio 是一个强大的本地大模型管理和运行工具,但它本身是一个图形化(GUI)应用。本文将详细介绍如何在只有命令行的无头(Headless)服务器上,通过一些技巧成功运行 LM Studio 并使用其命令行工具(CLI)进行模型的下载、加载和交互。

官方网站: https://lmstudio.ai/

第一步:环境准备与依赖安装

首先,需要安装 LM Studio 运行所需的依赖库。这些库主要用于支持其底层的 AppImage 应用以及创建一个虚拟显示环境来“骗过”GUI检测。

# 更新系统的软件包列表
sudo apt update && sudo apt install -y \
    libfuse2 \
    xvfb \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libgtk-3-0 \
    libnss3 \
    libcups2 \
    libxss1 \
    libgdk-pixbuf2.0-0 \
    libasound2 \
    libasound2t64 \
    nodejs \
    npm

第二步:下载并运行 LM Studio 主程序

由于服务器没有图形界面,需要启动一个虚拟的 X Server 显示环境(Xvfb),并将 LM Studio 应用指向这个虚拟屏幕。

  1. 下载 LM Studio 的 AppImage 文件 注意:请根据需要从官网获取最新的版本链接,此处以 0.3.14-5 为例。
   wget https://installers.lmstudio.ai/linux/x64/0.3.14-5/LM-Studio-0.3.14-5-x64.AppImage
  1. 赋予文件执行权限
   chmod +x LM-Studio-0.3.14-5-x64.AppImage
  1. 启动虚拟屏幕 这条命令会在后台启动一个编号为 :1 的虚拟屏幕,分辨率为 1024x768
   Xvfb :1 -screen 0 1024x768x16 &
  1. 在虚拟屏幕上运行 LM Studio 为了让后续的命令行工具能够连接,必须先将 LM Studio 的主程序作为后台服务运行起来。

    • 打开一个新的终端会话 或使用 screen/tmux

    • 导入虚拟屏幕的环境变量,告知后续程序在哪个屏幕上运行。

     export DISPLAY=:1
    
    • 在后台启动 LM Studio 主程序--no-sandbox 参数用于解决在某些环境下可能出现的权限问题。 bash ./LM-Studio-0.3.14-5-x64.AppImage --no-sandbox &

至此,LM Studio 的核心服务已经在后台成功运行。

第三步:安装与配置 lms 命令行工具

LM Studio 内置了一个名为 lms 的命令行工具,用于控制后台的主程序。

官方文档: https://lmstudio.ai/docs/cli

lms:一个控制器

最重要的一点是:lms 工具本身不直接处理模型,它是一个控制器必须先确保 LM Studio 主程序已在后台运行,lms 才能连接并控制它。

  1. 安装 lms 到系统路径 LM Studio 已经内置了 lms,只需运行一个引导命令,即可将其链接到系统路径下,方便全局调用。
   ~/.lmstudio/bin/lms bootstrap
  1. 验证安装 必须打开一个新的终端窗口/SSH会话,或者运行 source ~/.bashrc (或 source ~/.zshrc) 来刷新环境。然后运行:
   lms

如果看到 lms 的帮助信息,说明安装成功。使用 lms status 可以检查 CLI 与后台服务的连接状态。

   lms status

第四步:核心工作流程:使用 lms 管理模型

以下是在命令行中从零开始运行一个模型的核心步骤:

  1. 搜索并下载模型 使用 lms get 命令可以从 Hugging Face Hub 搜索并下载模型。
   # 1. 搜索模型,找到它的标识符 (Identifier)
   # 例如,搜索 "Mistral 7B Instruct GGUF"
   lms get "Mistral 7B Instruct GGUF"
   
   # 2. 使用完整的标识符下载指定模型
   # 例如,下载 TheBloke 的 Mistral-7B-Instruct GGUF 格式模型
   lms get "TheBloke/Mistral-7B-Instruct-v0.2-GGUF"
  1. 查看已下载的模型 使用 lms ls (ls = list) 命令,查看本地所有可用的模型,并获取加载模型时需要使用的完整路径
   lms ls
  1. 加载模型 这是最关键的一步。使用 lms load 命令将指定的模型文件加载到内存或显存中。
   # 基本加载 (请将路径替换为 `lms ls` 输出的实际路径)
   lms load "TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf"

高级选项(非常有用):

  • GPU 加速:使用 --gpu 参数。max 表示尝试将所有层都卸载到 GPU。
  • 自定义别名:使用 --identifier 为模型设置一个简短、好记的别名,方便后续调用。

组合示例:

   lms load "TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf" --gpu=max --identifier="model"
  1. 确认模型已加载 使用 lms ps (ps = processes) 命令,查看当前正在运行的模型。
   lms ps

此时应该能看到别名为 my-mistral 的模型正在运行。

第五步:与模型交互

模型加载后,有两种主要方式与其互动。

方法一:直接在终端对话 (CLI Chat)

使用 lms chat 命令,可以直接在终端里开始对话。

# --model 参数指定要对话的模型别名
lms chat --model "my-mistral"

之后就可以输入文本并看到模型回复了。按 Ctrl+C 退出对话模式。

方法二:启动 API 服务器

若要让其他代码或应用来调用模型,可以启动一个兼容 OpenAI 规范的 API 服务器。

  1. 启动服务器:
   lms server start

服务器默认监听在 1234 端口。

  1. 在另一个终端中使用 curl 调用: 注意 model 字段可以直接使用之前设置的别名 my-mistral
   curl http://localhost:1234/v1/chat/completions \
   -H "Content-Type: application/json" \
   -d '{
     "model": "my-mistral",
     "messages": [
       { "role": "user", "content": "你好,请介绍一下你自己" }
     ],
     "temperature": 0.7
   }'

第六步:清理与停止

  • 卸载模型:当不再需要某个模型时,可以将其从内存中卸载以释放资源。
  # 卸载指定别名的模型
  lms unload "my-mistral"
  
  # 卸载所有已加载的模型
  lms unload --all
  • 停止 API 服务器
  lms server stop
  • 查看状态:可以随时使用 lms status 检查服务器和模型的整体状态。

注意如果想在指定端口运行api server服务可以增加 --port参数