☰
lev安装教程-windows篇
2026/10/3 16:53:23 网站建设 项目流程

在 Windows 上把 lev 跑起来

前提:显卡10G显存, 系统里已有uv。目标是本机加载发布权重interfaze-ai/lev,提供http://127.0.0.1:8000/v1/systemone。
官方docs/SETUP.md把本机限定成跑测试,把 GPU 服务放在 Modal 的 H100 上。下面的镜像、CUDA 轮子和离线启动,是这台机器上实际走通的路径,不在那份文档里。

装好的是lev(Qwen3.5-4B + LoRA)。权重落在用户目录的 Hugging Face 缓存:基座约 8.7GB,适配器约 170MB。

1. 进入仓库再装依赖

所有命令都在仓库目录里执行。在C:\Users\123里跑uv,用的不是这个项目的.venv,会报找不到torch。

cd D:\work\opensource\lev uv sync--extra serve

serve额外依赖会装上 torch、transformers 和 HTTP 服务。

2. CUDA 版 PyTorch

驱动是 610.88,对应 CUDA 13.0 的官方轮子,大约 1.9GB:

cd D:\work\opensource\lev uv pip install--reinstall"torch==2.14.0"--index-url https://download.pytorch.org/whl/cu130 uv run python-c"import torch; print(torch.__version__, torch.cuda.is_available(), torch.cuda.get_device_name(0))"

成功时打印:

2.14.0+cu130 True NVIDIA GeForce RTX 5070

hardlink 警告可以忽略,不影响使用。

3. 用镜像下载权重

机器访问huggingface.co如果超时(WinError 10060),https://hf-mirror.com可以打开。适配器里大约 171MB 的文件默认走 Xet(cas-server.xethub.hf.co),镜像对这个地址返回 401。关掉 Xet,让它走普通下载。

这两个变量只对当前 PowerShell 窗口有效:

$env:HF_ENDPOINT ="https://hf-mirror.com"$env:HF_HUB_DISABLE_XET ="1"uv run lev serve--checkpoint interfaze-ai/lev--port 8000

第一次启动会下载 Qwen3.5-4B 基座(约 8GB)和interfaze-ai/lev的 LoRA。下载完之前服务不会就绪。Windows 缓存若提示无法创建 symlink,只是警告,不是退出原因。

缓存目录:

  • %USERPROFILE%\.cache\huggingface\hub\models--Qwen--Qwen3.5-4B
  • %USERPROFILE%\.cache\huggingface\hub\models--interfaze-ai--lev

4. 权重已在本地时,离线启动

基座和适配器都下完之后,启动仍可能向hf-mirror.com发确认请求。这个请求超时后会重试(Retry 1/5),五次都失败服务就退出。停掉这次启动(Ctrl+C),改用缓存:

cd D:\work\opensource\lev$env:HF_HUB_OFFLINE ="1"$env:HF_ENDPOINT ="https://hf-mirror.com"$env:HF_HUB_DISABLE_XET ="1"uv run lev serve--checkpoint interfaze-ai/lev--port 8000

等到日志里出现这两行再发请求:

Application startup complete Uvicorn running on http://127.0.0.1:8000

Waiting for application startup是在把约 8GB 权重读进显卡,第一次比 CPU 启动更久。

bf16 权重大约 8GB,腾出显存后再开。

浏览器打开http://127.0.0.1:8000时日志里的404是正常的:这个服务没有网页,也没有favicon.ico。

5. 确认服务

另开一个 PowerShell 窗口:

Invoke-RestMethodhttp://127.0.0.1:8000/health

应返回status为ok。然后发一条决策:

$body= @{state ="Hi, I was charged twice for my order #4471 and I want a refund."questions = @{intent = @{type="choice"instructions ="What does the customer want?"criteria = @{refund ="wants money back";cancel =$null;track =$null;other =$null}}urgent = @{type="noul";instructions ="Does this need a human within the hour?"}}}|ConvertTo-Json-Depth 6Invoke-RestMethodhttp://127.0.0.1:8000/v1/systemone-Method Post-Body$body-ContentType"application/json"

发请求的窗口可以关掉。留着uv run lev serve的那个窗口,按Ctrl+C才会停服务。

choice返回选中的选项名和confidence。noul是「是」的概率,越接近 1 越倾向于是。score从0 档起算,是各档下标的概率加权平均,不是百分制。

若请求要等很久,而nvidia-smi里没有这个进程、GPU 利用率是 0%,说明还在用 CPU 版 PyTorch。回到第 2 步换成+cu130,再重启服务。

6. 发中文

ConvertTo-Json再交给Invoke-RestMethod时,中文可能不是 UTF-8。用字节发送:

functionAsk-Lev($state,$questions){$json= @{state =$state;questions =$questions}|ConvertTo-Json-Depth 8$bytes=[System.Text.Encoding]::UTF8.GetBytes($json)$r=Invoke-RestMethodhttp://127.0.0.1:8000/v1/systemone-Method Post-Body$bytes-ContentType"application/json; charset=utf-8"$r.answers.PSObject.Properties|ForEach-Object{$a=$_.Valueswitch($a.type){"choice"{"{0}: {1} (confidence {2:N2})"-f$_.Name,$a.choice,$a.confidence}"noul"{"{0}: P(yes)={1:N2}"-f$_.Name,$a.noul}"score"{"{0}: {1:N2} (confidence {2:N2})"-f$_.Name,$a.score,$a.confidence}}}""}Ask-Lev"每次打开设置应用就崩溃。安卓 14,昨天更新之后开始的。"@{team = @{type="choice";instructions ="这个问题该由哪个团队处理?";criteria = @{billing ="账单和退款";technical ="程序故障";account ="账号和登录"}}bug = @{type="noul";instructions ="这是不是一个程序故障报告?"}severity = @{type="score";instructions ="严重程度如何?";criteria = @("只是外观问题","有替代办法","功能用不了","应用完全无法使用")}}

发布说明把适用范围写成英文:微调和校准数据来自英文任务。基座能读中文,但这些概率没有在中文上校准过。短句路由可以试,不能当成中文评测。严重度四档是 0 外观、1 有替代办法、2 功能用不了、3 完全无法使用,所以2.27不是满分 5 里的 2.27 分。

下次启动

权重已经在缓存里时,只需要:

cd D:\work\opensource\lev$env:HF_HUB_OFFLINE ="1"$env:HF_ENDPOINT ="https://hf-mirror.com"$env:HF_HUB_DISABLE_XET ="1"uv run lev serve--checkpoint interfaze-ai/lev--port 8000

先确认仍是 CUDA 版:

uv run python-c"import torch; print(torch.__version__, torch.cuda.is_available())"

应是2.14.0+cu130 True。若变回+cpu,重做第 2 步,不要先uv sync。

和官方文档的对应关系

这里用的命令出处
uv sync --extra serveMakefile的setup-serve;packages/lev/src/lev/release.py
lev serve --checkpoint interfaze-ai/lev --port 8000根目录README.md的 Quickstart。原文还有--host 0.0.0.0
uv run依赖在仓库的.venv里,不在系统 Python 里

docs/TRAINING.md里同一条uv sync --extra serve后面跟的是未微调基座Qwen/Qwen3.5-4B,不是发布权重。本机要跑的是--checkpoint interfaze-ai/lev。

系列文章:

判断模型SystemOne的对比, lev、Jev、JevK5、decider、laya 与 kev

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询