2026-03-18

03月18日

一、今日完成情况

  • 完成服务器大语言模型的部署和简单使用(局域网下其他设备的调用)
  • 看《金瓶梅》
  • 规划一下当助教的思路和未来需要完成的工作,思考是否可以用AI的方法,帮我监控邮箱。

二、今日感悟

  • 核心业务数据​:
    • 大模型的部署,不断的报错和解决,最后还是打通了,回过头来发现,错误非常可爱。
    • 和张芷宸同步实验室工作和未来的计划
    • 和许智乔同步未来工作的实习准备,非常深入。挺巧到是,今天遇到的都是辩论赛一起打过的,没什么距离。
    • 和粟璨同步了他的近况,可以看出来他挺闲的,比我要闲的多。
  • ​今日工作总结:​
    • 工作量其实一般,昨晚睡了6h,中午也没睡着,挺累的,晚上干不动了,看看书得了。
    • 三大害无处不在,今天总算让我抓住一个陷阱了,可惜无法做实验。
  • ​明日工作计划:
    • vllm原理学习
    • 并发使用大语言模型学习
    • vsocde远程登录服务器任务尽快完成
    • 助教申请表格填写,让老师签字,辅导员盖章
  • ​今日学习成长:​
    • 和老朋友同步一下近况挺好的,而且不同于师兄,他们没有直接的工作关系,其实会更纯洁一些。
    • 关于服务器ssh打通虚拟账户的端口还是挺神奇的,看来虚拟空间也不是一无是处嘛。

三、备注

  • 预定–完成GLM和KiMi模型 opencode相关CLI的测试,查看其效果/codex openai 产品business尝试,对比效果。 截止日期:无
  • 预定–华尔街AI发展推演没有系统化了解,导出为图谱的形式,导出笔记,进行理解。 截止日期:3月20日 预计时间:1h
  • 预定–老大的论文阅读还是没有完成,这里需要花点时间梳理其算法逻辑。 截止日期:3月22日 预计时间:~~
  • 已完成–数据科学数据预处理,完成两部分,实验和实验报告纸质版 截止日期:3月22日 预计时间:20min
  • 正在完成–vscode remote ssh 实验室服务登录、vscode github账户配置一步到位 预计时间:30min
  • 已完成–服务器上面部署AI的接口,然后就是大语言模型的部署,这个可以了解一下,查看是否麻烦。 截止日期:3月20日

四、千问模型启动

 CUDA_VISIBLE_DEVICES=1 python -m vllm.entrypoints.openai.api_server \
    --model /root/models/Qwen3-30B-A3B-Instruct-2507 \
    --tensor-parallel-size 1 \
    --gpu-memory-utilization 0.9 \
    --max-model-len 4096 \
    --trust-remote-code

指令介绍如下:

Pasted image 20260318145712

当前显卡占用,可以发现,第一张显卡的占用还是挺少的,基本是空闲状态。

Pasted image 20260318145814

1、问题解决1–无法检测到模型

现在的问题是,我成功启动了,没有任何报错,可是在另一个终端商,使用curl也好,使用python也好进行API测试,始终没有任何反应:

(base) root@d58125c354a4:~/Documents/code/python# curl http://localhost:8000/v1/models
(base) root@d58125c354a4:~/Documents/code/python# curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen3",
        "messages": [
            {"role": "system", "content": "你是一个部署在 A100 服务器上的高性能 AI 助手。"},
            {"role": "user", "content": "你好,请确认你的模型名称,并解释一下为什么 30B 模型需要占用 70GB 显存?"}
        ],
        "temperature": 0.7
    }'
(base) root@d58125c354a4:~/Documents/code/python# curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3",
    "prompt": "Hello",
    "max_tokens": 5
  }'
(base) root@d58125c354a4:~/Documents/code/python# curl http://localhost:8000/health

因此需要查看哪里存在问题,Gemini的解释是,

原因 A:网络监听地址问题

你启动时如果没写 --host,默认可能是 localhost对策:尝试把 curl 里的 localhost 换成 127.0.0.1 或者机器的内网 IP。

原因 B:vLLM V1 版本的兼容性问题

从你之前的报错日志看,你似乎在使用 vLLM V1(这是 vLLM 最近推出的实验性架构)。V1 架构在某些 Python 3.13 环境下可能存在异步死锁。 对策:尝试在启动命令中强制指定 V0 架构(如果你的版本支持):

肯定不是原因1的问题,现在修改版本,重新启动尝试。重新启动依然无法查看到任何信息,也就是我无法检测当前是什么模型,可是通过nvidia-smi查看,也看不到任何的异常,显卡还是在运行的。

(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/health

curl: (52) Empty reply from server

(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/v1/models

(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/v1/completions   -H "Content-Type: application/json"   -d '{
    "model": "qwen3",
    "prompt": "Hello",
    "max_tokens": 5                                                                   

  }'

(base) root@d58125c354a4:~/Documents/code/python#

按道理,这里是需要显示出模型的类别的,现在我的思路是,是不是因为我在容器当中的关系,这里开启的8000端口,是否是服务器的8000端口,导致无法访问(容器中)下面我将尝试看一下容器当中的通讯和模型的通讯是否可以打通。

第一步:检查网络监听与进程匹配度
第二步:检查环境变量冲突 (针对 API 阻塞)

# 1. 查看 8000 端口的具体绑定情况 
netstat -tunlp | grep :8000 
# 2. 确认 vLLM 相关进程的存活状态(查看父子进程关系) 
ps -ef | grep vllm | grep -v grep 
# 3. 检查容器内的本地回环是否正常 
ping -c 3 127.0.0.1

# 1. 检查环境变量中是否有代理设置 
env | grep -iE "proxy|http|https" 

# 2. 检查防火墙规则(虽然在容器内较少见,但部分科研镜像有定制) 
iptables -L -n | grep 8000
Pasted image 20260318154450

可以看到,我开启了代理,因此我终端的端口访问,自动会被映射到代理的服务器当中,而不是本地的自己服务器,下面我再次调试,便打通了。

(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/v1/models
{"object":"list","data":[{"id":"qwen3","object":"model","created":1773819403,"owned_by":"vllm","root":"/root/models/Qwen3-30B-A3B-Instruct-2507","parent":null,"max_model_len":8192,"permission":[{"id":"modelperm-88b108f0e8521985","object":"model_permission","created":1773819403,"allow_create_engine":false,"allow_sampling":true,"allow_logprobs":true,"allow_search_indices":false,"allow_view":true,"allow_fine_tuning":false,"organization":"*","group":null,"is_blocking":false}]}]}(base) root@d58125c354a4:~/Documents/code/python# curl http://127.0.0.1:8000/v1/completions   -H "Content-Type: application/json"(base) root@d58125c354a4:~/Documents/code/python#             localhost:8000/v1/chat/completions     -H "Content-Type: application/json"     -d '{
        "model": "qwen3",
        "messages": [
            {"role": "system", "content": "你是一个部署在 A100 服务器上的高性能 AI 助手。"},
            {"role": "user", "content": "你好,请确认你的模型名称,并解释一下为什么 30B 模型需要占用 70GB 显存?"}
        ],
        "temperature": 0.7
    }'
{"id":"chatcmpl-a5584f479594f272","object":"chat.completion","created":1773819428,"model":"qwen3","choices":[{"index":0,"message":{"role":"assistant","content":"你好!我是 Qwen3,是通义实验室推出的大规模语言模型。关于你提到的“30B 模型需要占用 70GB 显存”的问题,我来为你详细解释一下。\n\n### 一、模型名称确认\n我(Qwen3)是通义千问系列中的最新版本,属于超大规模语言模型。虽然我有多个版本(如 Qwen-Max、Qwen-Plus、Qwen-Turbo 等),但我的参数量级通常在 **70B** 左右(例如 Qwen-Max),而并非 30B。不过,你提到的“30B 模型”可能是其他厂商或开源模型(如 Llama-3-30B、Mixtral-8x22B 等)的参数规模,因此我们以通用逻辑来解释显存占用问题。\n\n---\n\n### 二、为什么 30B 模型需要约 70GB 显存?\n\n这是一个非常典型的问题。简单来说:**30B 模型的参数本身仅占约 60GB,但实际运行时显存远超这个数值,因此需要约 70GB 或更多**。以下是具体原因:\n\n#### 1. **参数存储(约 60GB)**\n- 模型参数以 **FP16(16位浮点)** 存储时,每个参数占 2 字节。\n- 300亿(30B)参数 × 2 字节 = **60 GB**。\n- 这是显存占用的“基础部分”。\n\n#### 2. **优化器状态(Optimizer States)——额外 60GB(训练阶段)**\n- 在**训练**阶段,优化器(如 Adam)需要为每个参数存储:\n  - 一阶动量(momentum)\n  - 二阶动量(variance)\n- 每个参数需要额外 4 字节 × 2 = 8 字节。\n- 30B × 8 字节 = **240 GB**(非常夸张!)\n- 但通过**混合精度训练 + 优化器状态分片**(如 ZeRO-3),可压缩到 60~80GB。\n\n> ⚠️ 所以:**训练 30B 模型需要 100GB+ 显存**,但你提到的“70GB”更可能是指**推理阶段**。\n\n#### 3. **推理阶段的显存占用(约 70GB)**\n在**推理**(inference)阶段,显存主要来自以下几部分:\n\n| 显存来源 | 占用估算 |\n|--------|--------|\n| 模型参数(FP16) | 30B × 2 = 60 GB |\n| 激活值(Activations) | 5~10 GB(取决于上下文长度) |\n| KV Cache(Key-Value Cache) | 5~15 GB(尤其在长文本生成时) |\n| 临时缓冲区 & 内存碎片 | 2~5 GB |\n\n✅ **合计:约 70~80 GB**\n\n> 🔥 关键点:**KV Cache 是推理显存膨胀的主要原因**。  \n> 例如,当生成 4096 个 token 的文本时,每层的 Key 和 Value 缓存会不断累积,导致显存占用显著上升。\n\n---\n\n### 三、如何降低显存占用?\n\n1. **使用 INT8 量化**(如 GGUF、GPTQ):\n   - 参数从 FP16 → INT8(1 字节),显存降至约 30GB。\n   - 推理速度更快,精度损失较小。\n\n2. **使用 PagedAttention / FlashAttention**:\n   - 优化 KV Cache 管理,减少内存碎片。\n   - 显存占用可降低 20%~30%。\n\n3. **模型并行 + 分片加载**:\n   - 使用多 GPU(如 8×A100 80GB)分摊显存压力。\n\n---\n\n### 总结\n\n| 项目 | 显存占用 |\n|------|---------|\n| 30B 模型参数(FP16) | ~60 GB |\n| 推理显存(含 KV Cache、激活值) | ~70 GB |\n| 训练显存(含优化器状态) | ~100+ GB |\n\n👉 所以,**30B 模型在推理时占用约 70GB 显存是合理且常见的**,主要由参数 + KV Cache + 激活值共同导致。\n\n---\n\n如果你有具体的模型名称(如 Llama-3-30B、Mixtral-8x22B 等),我可以为你提供更精确的显存分析。欢迎继续提问!","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning":null},"logprobs":null,"finish_reason":"stop","stop_reason":null,"token_ids":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":57,"total_tokens":1124,"completion_tokens":1067,"prompt_tokens_details":null},"prompt_logprobs":null,"prompt_token_ids":null,"kv_transfer_params":null}

下面我将把这个测试的python 通用规范模板写下来:

待定

2、局域网mac远程访问

现在是这样的,我ssh配置过,因此我在ssh端可以直接访问服务器,现在AI告诉我远程访问模型的非常好玩的方法,直接用ssh打通隧道,来到我的容器当中所映射的8000端口上。

A、背景

在 MacBook 上配置过 SSH 免密登录(可能是通过 ssh-copy-id 将公钥放到了容器的 ~/.ssh/authorized_keys 中)。 当你执行 ssh -L 8000:127.0.0.1:8000 ... 时:

  1. 身份验证:SSH 自动使用了你 MacBook 上的私钥完成握手,所以没跳出密码提示。
  2. 隧道建立-L 8000:127.0.0.1:8000 告诉 SSH:“请在我的 MacBook 上监听 8000 端口。一旦有流量进入,就通过这个加密连接,转发到远程容器内部的 127.0.0.1:8000。”
  3. 结果:只要这个 SSH 窗口不关闭,你的 MacBook 就像是直接插在了容器的 8000 端口上

因此在打通之后,可以直接在MacBook端,使用vscode 编写python代码,使用远程启动的大模型了。

ssh -L 8000:127.0.0.1:8000 root@121.48.163.69 -p 45618
Pasted image 20260318160323

开一个终端,或者zellij,这里直接打通,然后就挂在这里不用管,这个指令已经完成了端口的映射了。在另一个端口发送数据,访问模型进行尝试:

 curl http://127.0.0.1:8000/v1/models
(base) kipley@kipleys-MacBook-Air ~ % curl http://127.0.0.1:8000/v1/models
{"object":"list","data":[{"id":"qwen3","object":"model","created":1773820786,"owned_by":"vllm","root":"/root/models/Qwen3-30B-A3B-Instruct-2507","parent":null,"max_model_len":8192,"permission":[{"id":"modelperm-905e179a26f1dbea","object":"model_permission","created":1773820786,"allow_create_engine":false,"allow_sampling":true,"allow_logprobs":true,"allow_search_indices":false,"allow_view":true,"allow_fine_tuning":false,"organization":"*","group":null,"is_blocking":false}]}]}%

五、无视警告继续安装

笑死我了!!! 事情是这样的,我在伊朗最新样式官方视频下面的评论区,看到了一个b站视频的链接,出于好奇,我就点进去了。

Screenshot_2026-03-18-23-25-44-79_149003a2d400f6a

点进去之后,这个B站的视频下面评论区就三条消息,其中两条是一个网址,激发了我的好奇心,于是我复制网址,来到浏览器打开。

Screenshot_2026-03-18-23-25-49-69_149003a2d400f6a

一开始我反的选,就是说,我没满25岁,没有这个需求,他还很诚实的,说我不符合条件,然后我重新选了一次,我就进到了下面的页面,下面的页面有许多黄色的内容,一看就是专门为没有资源的中年大叔准备的,而且质量还行吧。

Screenshot_2026-03-18-23-28-13-48_40deb401b9ffe8e

页面是一个下载软件的页面,向下滑是污言秽语之黄色图片,就暂作不提,于是我本来想退出的,可是好奇心害死猫,我看看这个软件是什么,于是我下载了apk文件。

我其实知道,这类软件是公安监视的,其实我们手机安装,他们后台是可以看到的,然后可能会打电话约谈做反诈宣传。

Screenshot_2026-03-18-23-30-13-22_40deb401b9ffe8e

我下载安装,我其实没有完全安装,就是手机会扫描这个软件使用了什么权限,于是我当然会看一下,不看不知道,一看吓一跳,这个权限差点直接把我手机内容共享了。这要是同意,手机可能都不是我自己的了,甚至这个软件的权限,可能是诈骗,因为正规的YP软件,不需要你手机这么多权限的呀,敏感权限如下图所示:

1 2 3
Screenshot_2026-03-18-23-34-36-51_d0f6572af797fe1 Screenshot_2026-03-18-23-34-52-31_d0f6572af797fe1 Screenshot_2026-03-18-23-34-59-45_d0f6572af797fe1
简单翻译一下:读取我SD卡当中所有的文件,读取我的相册,读取我的通讯录,运行软件控制手机打电话且不经过我的允许,获得我的精确位置,录取音频,获得我的通话记录,允许我的手机拍照和视频,允许获取我自己的电话号码……

这里只是敏感权限,下面还有十几个相对不敏感权限,可是很多也是有问题的。

我非常懊恼,自己为什么没有一个空白的备用安卓手机用来做测试,可以仿制一个通讯录,甚至可以配置一下虚拟定位地址等,太可惜了哎,自己的手机我肯定不敢做测试的,真的要被爆通讯录的。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com
Obsidian