返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

单卡RTX4090部署R1满血版之KTransformers篇

[复制链接]
链载Ai 显示全部楼层 发表于 3 小时前 |阅读模式 打印 上一主题 下一主题
2025开年龙蛇之交,Deepseek 横空出世火遍全球。从下面这张图可见一斑:

(节选自AI产品榜)

图中和Deepseek做对比的可都是最流行的全球超级APP们。这是产品领域的体感。再看另一张图:

乍看这张图你还以为是说dify的star增长很快,超过了openai-cookbook,但是再细看有点儿不对,边上那条蓝色的竟然也是根线,是 Deepseek-R1 的star增长曲线,差点儿被当成了坐标轴! 因为很多统计图是双坐标轴,右边也有一根坐标轴的。这增速简直逆天了,增长曲线跑出了一支穿云箭,千军万马来相见的气势。这是研发领域的体感。

产品和研发领域两者都还算技术圈内。直到春节过后,Deepseek从国外火到国内,再引发全民疯狂。连上个世纪建立的老制造业工厂领导讲话时都提到 Deepseek;连老岳父家庭群里发的早安图片都换成了Deepseek。这才是真正的火出圈。

于是各行各业大厂小厂争相接入Deepseek,个人也跃跃欲试。有人角落里吃灰了多年带有显卡的老台式机,也拿出来想跑跑 Deepseek。而最近疯传清华大学的 KTransformers 项目能在消费级显卡上部署 Deepseek 满血版了。正好有个客户也很关心这个事情,Deepseek满血版之前可是只能在16卡H100等,动辄百万起步的硬件上才能跑起来的。在这个AI从研究到应用百花齐放,进展日新月异,真假信息满天飞的时期,真实情况到底是什么样的呢?正好我前几天刚在RTX 4090显卡上使用 KTransformers 跑通过 Deepseek 满血版,本文就分享下这次的实操过程。

实操过程主要参考了这篇官方文档: [Installation Guide - Ktransformers] https://kvcache-ai.github.io/ktransformers/en/install.html

模型下载

官方文档中列出了 KTransformers 支持的 DeepSeek 模型:

ModelName	ModelSize	VRAM	MinimumDRAM	RecommendedDRAMDeepSeek-R1-q4_k_m	377G	14G	382G	512GDeepSeek-V3-q4_k_m	377G	14G	382G	512GDeepSeek-V2-q4_k_m	133G	11G	136G	192GDeepSeek-V2.5-q4_k_m	133G	11G	136G	192GDeepSeek-V2.5-IQ4_XS	117G	10G	107G	128G

我们选择 DeepSeek-R1-q4_k_m 这个模型,这是INT4量化之后的模型。 在huggingface的 unsloth 组织中可以找到这个模型,下载地址:https://huggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-Q4_K_M

下载命令:

nohuphuggingface-clidownloadunsloth/DeepSeek-R1-GGUF\--revisionmain--include"DeepSeek-R1-Q4_K_M/*"\--local-dirdeepseek-ai>download-R1-Q4_K_M.log2>&1&

另外因为 DeepSeek-R1-Q4_K_M 中只包含了 gguf 文件,推理还需要下载 DeepSeek-R1 原始模型中的配置文件,下载地址:

https://huggingface.co/deepseek-ai/DeepSeek-R1/tree/main

注意只需下载其中除了 .safetensors 模型权重文件之外的所有小文件,后面推理 DeepSeek-R1-Q4_K_M 时要用到。

下载好后,查看模型目录应该如下所示:

# ll/data/ai/models/deepseek-ai/DeepSeek-R1-Q4_K_Mtotal 394951472-rw-r--r-- 1 root root 48339779936 Feb 20 02:55 DeepSeek-R1-Q4_K_M-00001-of-00009.gguf-rw-r--r-- 1 root root 49429396320 Feb 20 03:02 DeepSeek-R1-Q4_K_M-00002-of-00009.gguf-rw-r--r-- 1 root root 49527312640 Feb 20 03:19 DeepSeek-R1-Q4_K_M-00003-of-00009.gguf-rw-r--r-- 1 root root 48272509536 Feb 20 02:08 DeepSeek-R1-Q4_K_M-00004-of-00009.gguf-rw-r--r-- 1 root root 49422027488 Feb 20 02:17 DeepSeek-R1-Q4_K_M-00005-of-00009.gguf-rw-r--r-- 1 root root 48272509536 Feb 20 03:16 DeepSeek-R1-Q4_K_M-00006-of-00009.gguf-rw-r--r-- 1 root root 49429396320 Feb 20 08:33 DeepSeek-R1-Q4_K_M-00007-of-00009.gguf-rw-r--r-- 1 root root 46938773696 Feb 20 15:15 DeepSeek-R1-Q4_K_M-00008-of-00009.gguf-rw-r--r-- 1 root root 14798482144 Feb 20 02:53 DeepSeek-R1-Q4_K_M-00009-of-00009.gguf
# ll /data/ai/models/deepseek-ai/DeepSeek-R1-rw-r--r--1root root 1729Feb2103:41config.json-rw-r--r--1root root 10556Feb2103:41configuration_deepseek.py-rw-r--r--1root root 171Feb2103:41generation_config.json-rw-r--r--1root root 75769Feb2103:41modeling_deepseek.py-rw-r--r--1root root8898324Feb2103:41model.safetensors.index.json-rw-r--r--1root root 3584Feb2103:41tokenizer_config.json-rw-r--r--1root root7847602Feb2103:41tokenizer.json

镜像构建

将如下内容:

# 基础镜像是Python3.11.10FROMpytorch/pytorch:2.5.1-cuda12.1-cudnn9-devel
# 复制 ktransformers 工程代码(包含三方依赖)到镜像中COPY ktransformers /home/ktransformers
# 设置工作目录WORKDIR /home/ktransformers
# 设置pip源为阿里云pip源ENV PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/
# 安装基础工具RUN--mount=type=cache,target=/var/cache/apt \ apt update&&\ apt install-y apt-utils cmake build-essential ninja-build&&\ apt install-y vim net-tools telnet curl wget netcat lsof git&&\ apt install-y libstdc++6
# pip3 install torch torchvision torchaudio--index-url https://download.pytorch.org/whl/cu126# pip3 install packaging ninja cpufeature numpyRUN --mount=type=cache,target=/root/.cache/pip ls -l /root/.cache/pip && \ # 其他的基础镜像中已经有了 pip3 install cpufeature && \ pip3 install flash-attn --no-build-isolation # pip install flash_attn-2.7.4.post1+cu12torch2.5cxx11abiTRUE-cp311-cp311-linux_x86_64.whl
# 安装 ktransformers# 设置 CUDA 的路径ENV CUDA_HOME=/usr/local/cudaENV PATH=/usr/local/cuda/bin{PATH}ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64{LD_LIBRARY_PATH}ENV CUDA_PATH=/usr/local/cuda{CUDA_PATH}## import torch# device = torch.cuda.current_device()# major, minor = torch.cuda.get_device_capability(device)# print(f"当前GPU的计算能力: {major}.{minor}")# RTX4090 是 8.9ENV TORCH_CUDA_ARCH_LIST="8.9"
# RUN export USE_NUMA=1 bash install.shRUN bash install.sh
# 清空父镜像的 ENTRYPOINTENTRYPOINT []CMD []

保存为 ktransformers.dockerfile;没错,我们还是通过 docker 容器来部署,因为容器能完美隔离测试环境,还可以一次制作,随时复用。

如上dockerfile之所以这么写,有几点需要说明下:

第1:选择pytorch/pytorch:2.5.1-cuda12.1-cudnn9-devel作为基础镜像是为了和我环境的 nvidia/cuda 驱动兼容。读者可以根据自己环境的驱动,选择这个系列镜像的不同版本。

第2:注意其中的 apt install -y libstdc++6 与官网文档中提到的:

condainstall-cconda-forgelibstdcxx-ng#Anacondaprovidesapackagecalled`libstdcxx-ng`thatincludesanewerversionof`libstdc++`,whichcanbeinstalledvia`conda-forge`.

并不相同,因为 libstdcxx-ng 是 conda-forge 提供的一个包名,而系统包管理器(例如 apt)中对应的包名是 libstdc++6。两者的主要区别在于:

  • 包来源与管理方式:conda 包管理器维护自己的软件包及依赖,libstdcxx-ng 是它提供的一个版本,通常经过编译优化和适配,以确保在 conda 环境中各种包的兼容性;而在 Debian/Ubuntu 等系统中,apt 使用官方软件仓库中维护的版本,这个包通常命名为 libstdc++6。

  • 版本与更新频率:libstdcxx-ng 往往提供的是更新的、支持更多新特性的 GNU 标准 C++ 库版本。对于一些依赖较新 C++ 特性的应用来说,这个版本可能更适合;而系统仓库中的 libstdc++6 版本更新周期受限于发行版的稳定性要求,可能较旧。

第3:镜像构建到 pip3 install flash-attn --no-build-isolation 这一步时会特别慢,要等待很久才能完成:

#918.82Requirementalreadysatisfied:MarkupSafe>=2.0in/opt/conda/lib/python3.11/site-packages(fromjinja2->torch->flash-attn)(3.0.2)#918.82Buildingwheelsforcollectedpackages:flash-attn#这里会卡很久没有输出#918.82Buildingwheelforflash-attn(setup.py):started#98603.3Buildingwheelforflash-attn(setup.py):stillrunning...#99028.1Buildingwheelforflash-attn(setup.py):stillrunning......#99885.2Createdwheelforflash-attn:filename=flash_attn-2.7.4.post1-cp311-cp311-linux_x86_64.whlsize=187620450sha256=68d5a9bf12ffdd88f72304ed9d082f4b4cbef3f7566189b097320976a6fc2da5#99885.2Storedindirectory:/root/.cache/pip/wheels/be/a6/20/b07aa001ad33e149303e10dce671e5a6018ee17976b1f3661f#99885.2Successfullybuiltflash-attn#99885.3Installingcollectedpackages:einops,flash-attn#99888.1Successfullyinstalledeinops-0.8.1flash-attn-2.7.4.post1#99888.1WARNING:Runningpipasthe'root'usercanresultinbrokenpermissionsandconflictingbehaviourwiththesystempackagemanager,possiblyrenderingyoursystemunusable.Itisrecommendedtouseavirtualenvironmentinstead:https://pip.pypa.io/warnings/venv.Usethe--root-user-actionoptionifyouknowwhatyouaredoingandwanttosuppressthiswarning.#9DONE9890.6s

可见这次构建这个步骤(包含所有的pip install)用时有 2 小时 45 分钟,主要耗时就在 flash-attn 安装上,主要问题应该还是网速。

如果要加快这个镜像构建过程,可以手工下载好 flash-attn 的 whl 包。最好的方法是先在境外服务器下载好(只需2.2秒,境内能慢到10个小时左右),然后再传回构建服务器。下载地址:https://github.com/Dao-AILab/flash-attention/releases 这里需要根据自己的环境选择。根据我的环境实测选择

  • flash_attn-2.7.4.post1+cu12torch2.5cxx11abiTRUE-cp311-cp311-linux_x86_64.whl

这个包可以成功安装。将包下载到 ktransformers 源码目录下,再将 dockerfile 中的

pip3installflash-attn--no-build-isolation

替换为:

pipinstallflash_attn-2.7.4.post1+cu12torch2.5cxx11abiTRUE-cp311-cp311-linux_x86_64.whl

即可快速构建成功。可节约近3个小时构建时间。

然后在 ktransformers.dockerfile 同级目录下,下载 ktransformers 源码:

# git clone https://github.com/kvcache-ai/ktransformers.git# cd ktransformers/
# git submodule initSubmodule'third_party/llama.cpp'(https://github.com/ggerganov/llama.cpp.git) registeredforpath'third_party/llama.cpp'Submodule'third_party/pybind11'(https://github.com/pybind/pybind11.git) registeredforpath'third_party/pybind11'
# git submoduleupdateCloninginto'/root/githubs/ktransformers/third_party/llama.cpp'...Cloninginto'/root/githubs/ktransformers/third_party/pybind11'...Submodule path'third_party/llama.cpp': checkedout'a94e6ff8774b7c9f950d9545baf0ce35e8d1ed2f'Submodule path'third_party/pybind11': checkedout'bb05e0810b87e74709d9f4c4545f1f57a1b386f5'
# ll third_party/drwxr-xr-x24root root4096Feb1913:52llama.cpp/drwxr-xr-x 2root root4096Feb1913:51llamafile/drwxr-xr-x 8root root4096Feb1913:52pybind11/

回到 ktransformers.dockerfile 所在目录,可以看到如下层次结构:

├───ktransformers│...│└──third_party│├──llama.cpp│├──llamafile│└──pybind11└──ktransformers.dockerfile

执行构建命令:

nohupdockerbuild-fktransformers.dockerfile-tktransformers:20250220_cu121.>build.log2>&1&tail-100fbuild.log

启动容器

用构建好的镜像启动容器:

dockerrun--namektransformers-itd--gpus'"device=7"'-p10002:10002-v/data/ai/models:/models-v/data/ai/datasets:/datasets-v/data/ai/workspace/ktransformers:/workspacektransformers:20250220_cu121bash

其中

  • --gpus '"device=7"' 指定第8张GPU卡挂载到容器中。卡的编号和 host 机器上 nvidia-smi 看到的一致

  • -v 挂载的 /data/ai/models 、/data/ai/datasets 、/data/ai/workspace/ktransformers 三个目录分别是我本地的模型目录,数据集目录和ktransformers工作目录。可以换成你自己的。

  • -p 10002:10002 将容器中的10002端口暴露到 host 上的相同端口

启动容器后用 docker exec 命令进入容器,查看主要依赖包版本:

#dockerexec-itktransformersbashroot@3baa1be463fc:/home/ktransformers#piplist|grep-E'torch|transfor|cpufeature|packaging|ninja|cpufeature|numpy|flash|triton'cpufeature0.2.1flash_attn2.7.4.post1ktransformers0.2.1.post1+cu121torch25avx2ninja1.11.1.1numpy1.26.4packaging24.1torch2.5.1+cu121torchaudio2.5.1+cu121torchelastic0.2.2torchvision0.20.1+cu121transformers4.43.2triton3.1.0

启动推理

因为我们的 /data/ai/models 目录挂载到容器中的 /models 目录了,所以容器中的模型地址变为:

  • 量化后的gguf模型路径:/models/deepseek-ai/DeepSeek-R1-Q4_K_M

  • 原始模型的路径:/models/deepseek-ai/DeepSeek-R1

直接本地命令行对话(不推荐,当前shell退出就结束了,只用于测试):

python-mktransformers.local_chat--model_path/models/deepseek-ai/DeepSeek-R1--gguf_path/models/deepseek-ai/DeepSeek-R1-Q4_K_M--cpu_infer96

启动推理服务:(没有web界面)

nohupktransformers--model_path/models/deepseek-ai/DeepSeek-R1--gguf_path/models/deepseek-ai/DeepSeek-R1-Q4_K_M--cpu_infer96--port10002>ktransformers.log2>&1&

启动推理服务,同时启动 web 界面:

nohupktransformers--model_path/models/deepseek-ai/DeepSeek-R1--gguf_path/models/deepseek-ai/DeepSeek-R1-Q4_K_M--cpu_infer96--port10002--webTrue>ktransformers.log2>&1&

最后这个命令需要先按文档:https://kvcache-ai.github.io/ktransformers/en/api/server/website.html,安装好web的依赖库后才能用。因为webui的依赖比较多,就不实验了。

直接启动本地推理的日志:

root@cf9c7d743f44:/workspace# python -m ktransformers.local_chat --model_path /models/deepseek-ai/DeepSeek-R1--gguf_path /models/deepseek-ai/DeepSeek-R1-Q4_K_M--cpu_infer96flashinfer not found, use tritonforlinuxusing custom modeling_xxx.py.using default_optimize_ruleforDeepseekV3ForCausalLMInjectingmodelasktransformers.operators.models.KDeepseekV2ModelInjectingmodel.embed_tokensasdefaultInjectingmodel.layersasdefaultInjectingmodel.layers.0asdefaultInjectingmodel.layers.0.self_attnasktransformers.operators.attention.KDeepseekV2AttentionInjectingmodel.layers.0.self_attn.q_a_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.0.self_attn.q_a_layernormasdefaultInjectingmodel.layers.0.self_attn.q_b_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.0.self_attn.kv_a_proj_with_mqaasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.0.self_attn.kv_a_layernormasdefaultInjectingmodel.layers.0.self_attn.kv_b_projasdefaultInjectingmodel.layers.0.self_attn.o_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.0.self_attn.rotary_embasktransformers.operators.RoPE.YarnRotaryEmbeddingV3Injectingmodel.layers.0.mlpasdefaultInjectingmodel.layers.0.mlp.gate_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.0.mlp.up_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.0.mlp.down_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.0.mlp.act_fnasdefaultInjectingmodel.layers.0.input_layernormasdefaultInjectingmodel.layers.0.post_attention_layernormasdefault...Injectingmodel.layers.60asdefaultInjectingmodel.layers.60.self_attnasktransformers.operators.attention.KDeepseekV2AttentionInjectingmodel.layers.60.self_attn.q_a_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.60.self_attn.q_a_layernormasdefaultInjectingmodel.layers.60.self_attn.q_b_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.60.self_attn.kv_a_proj_with_mqaasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.60.self_attn.kv_a_layernormasdefaultInjectingmodel.layers.60.self_attn.kv_b_projasdefaultInjectingmodel.layers.60.self_attn.o_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.60.self_attn.rotary_embasktransformers.operators.RoPE.YarnRotaryEmbeddingV3Injectingmodel.layers.60.mlpasktransformers.operators.experts.KDeepseekV3MoEInjectingmodel.layers.60.mlp.expertsasktransformers.operators.experts.KTransformersExpertsInjectingmodel.layers.60.mlp.gateasktransformers.operators.gate.KMoEGateInjectingmodel.layers.60.mlp.shared_expertsasdefaultInjectingmodel.layers.60.mlp.shared_experts.gate_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.60.mlp.shared_experts.up_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.60.mlp.shared_experts.down_projasktransformers.operators.linear.KTransformersLinearInjectingmodel.layers.60.mlp.shared_experts.act_fnasdefaultInjectingmodel.layers.60.input_layernormasdefaultInjectingmodel.layers.60.post_attention_layernormasdefaultInjectingmodel.normasdefaultInjectinglm_headasdefaultloading token_embd.weightto cpuloading token_embd.weightwithCPU/opt/conda/lib/python3.11/site-packages/ktransformers/util/custom_gguf.py:523:UserWarning:ThegivenNumPyarray is not writable, andPyTorchdoes not support non-writable tensors.Thismeans writing tothistensor will resultinundefinedbehavior.Youmay want to copy the array to protect its data or make it writable before converting it to a tensor.Thistypeofwarning will be suppressedforthe restofthisprogram. (Triggeredinternally at ../torch/csrc/utils/tensor_numpy.cpp:206.) data = torch.from_numpy(data)loading blk.0.attn_q_a_norm.weighttocuda:0loading blk.0.attn_kv_a_norm.weighttocuda:0loading blk.0.attn_kv_b.weighttocuda:0loading blk.0.attn_norm.weighttocuda:0loading blk.0.ffn_norm.weighttocuda:0...loading blk.60.attn_q_a_norm.weighttocuda:0loading blk.60.attn_kv_a_norm.weighttocuda:0loading blk.60.attn_kv_b.weighttocuda:0loading blk.60.attn_norm.weighttocuda:0loading blk.60.ffn_norm.weighttocuda:0loading output_norm.weighttocuda:0loading output.weighttocuda:0Chat: 你是谁?
loc("/opt/conda/lib/python3.11/site-packages/ktransformers/operators/triton_attention.py":95:16):error: operation scheduled before its operands<think>
</think>
您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。prompt eval count: 5 token(s)prompt eval duration: 75.26080298423767sprompt eval rate: 0.066435645139837 tokens/sevalcount: 42token(s)evalduration: 196.99316954612732sevalrate: 0.2132053618750746tokens/s

系统资源情况:

ATOP-my4090host-1                      2025/02/2107:57:12                        --------------                         10s elapsedPRC|sys  1m53s |user  5m59s |      |       |#proc 1999|#trun  29|#tslpi 12e3| #tslpu  69| #zombie  1|clones 1103|      |       | #exit  320|CPU|sys  928%|user 3570%|irq   5%|       |idle 5952%|wait 2351%|steal  0%| guest  0%|       |ipc  0.79|cycl1.12GHz| curf2.93GHz| curscal ?%|CPL|avg1 89.71|       |avg5 66.40| avg15 35.28|       |       |csw 1294839|       | intr1454401|       |      | numcpu 128|       |MEM|tot 503.7G |free  4.3G |cache433.7G| dirty 0.1M|buff  2.1G |slab 16.1G |slrec 12.3G| shmem 7.2G| shrss 0.0M|shswp 0.0M |vmbal 0.0M| hptot 0.0M| hpuse 0.0M|SWP|tot  0.0M |free  0.0M |      |       |       |       |      |       |       |       |vmcom151.6G|       | vmlim251.9G|PAG|scan2253726|steal1382e3|      | stall   0|       |       |      |       |       |       |swin   0|       | swout   0|PSI|cs  3/2/2|       |ms  0/0/0| mf  0/0/0|       |is24/23/16|if24/23/16|       |       |       |      |       |       |LVM|   vg0-lv0 |busy  74%|      | read 23230|write  426|KiB/r   96 | KiB/w   4|       |MBr/s 218.2 | MBw/s  0.2|avq  41.38|       | avio0.30ms|LVM|tu--vg-lv--0|busy   3%|      | read   0|write 1462|KiB/r   0 | KiB/w  10|       |MBr/s  0.0 | MBw/s  1.4|avq  10.46|       | avio0.20ms|DSK|     sdb |busy  63%|      | read 15757|write  30|KiB/r  114 | KiB/w   2|       |MBr/s 176.3 | MBw/s  0.0|avq  26.62|       | avio0.39ms|DSK|     sda |busy  14%|      | read  3259|write  136|KiB/r  131 | KiB/w  12|       |MBr/s  42.0 | MBw/s  0.2|avq  29.75|       | avio0.39ms|DSK|     sdc |busy   3%|      | read   0|write 1217|KiB/r   0 | KiB/w  12|       |MBr/s  0.0 | MBw/s  1.4|avq  10.36|       | avio0.24ms|NFM|7dda8ef80f88 |srv10.9.30. |read   0K| write   0K|nread 23489K |nwrit   0K |dread   0K| dwrit   0K|       |mread   0K |mwrit   0K|       |       |NFM|5d556ec18a64 |srv10.9.30. |read   0K| write   0K|nread 23489K |nwrit   0K |dread   0K| dwrit   0K|       |mread   0K |mwrit   0K|       |       |NFC|rpc   20|read   0|      | write   0|retxmit  0|autref  20|      |       |       |       |      |       |       |NFS|rpc   20|cread   0|cwrit   0|MBcr/s  0.0 | MBcw/s 0.0|nettcp  20|netudp  0| rchits  0| rcmiss  0|rcnoca  20|badfmt  0| badaut  0| badcln  0|NET|transport  |tcpi  3600|tcpo  3753| udpi   16|udpo   16|tcpao  71|tcppo  26|       | tcprs   0|tcpie   0|tcpor  18| udpnp   0| udpie   0|NET|network   |ipi  5325|      | ipo  5333|ipfrw 1185|deliv 3617|      |       |       |       |icmpi   1|       | icmpo   0|NET|cali205 0%|pcki  142|pcko  150| sp  10Gbps|si 487Kbps|so 1139Kbps|      | coll   0| mlti   0|erri   0|erro   0| drpi   0| drpo   0|NET|cali663 0%|pcki  149|pcko  126| sp  10Gbps|si 1135Kbps|so  63Kbps|      | coll   0| mlti   0|erri   0|erro   0| drpi   0| drpo   0|

进程情况:

NPROCSSYSCPUUSRCPUVSIZERSIZEPSIZESWAPSZRDDSKWRDSKRNETSNETCPUCMD1/9132.42s5m23s415.3G224.0G0K0K2.3G0K003603%python125.86s8.53s49.1G205.6M0K0K0K0K00348%kubelet11.29s6.95s954.4M66128K0K0K0K0K0083%cri-dockerd11.49s5.29s18.2G298.1M0K0K0K60K0069%dockerd1171.07s0.65s138.2G1.2G0K0K0K20K0017%containerd-shi10.82s0.33s1.2G18796K0K0K0K0K0012%node_exporter11.00s0.00s0K0K0K0K0K0K0010%kswapd110.98s0.00s0K0K0K0K0K0K0010%kcompactd1

换成启动推理API服务,使用96核CPU:

root@e2a9f48fba71:/workspace#nohupktransformers--model_path/models/deepseek-ai/DeepSeek-R1--gguf_path/models/deepseek-ai/DeepSeek-R1-Q4_K_M--cpu_infer96--port10002>ktransformers.log2>&1&[1]25root@e2a9f48fba71:/workspace#tail-fktransformers.lognohup:ignoringinput2025-02-2111:19:56,043INFO/opt/conda/lib/python3.11/site-packages/ktransformers/server/main.py[29]:CreatingSQLtables2025-02-2111:19:56,064INFO/opt/conda/lib/python3.11/site-packages/ktransformers/server/api/openai/assistants/assistants.py[75]:Creatingdefaultassistantflashinfernotfound,usetritonforlinuxInjectingmodelasktransformers.operators.models.KDeepseekV2ModelInjectingmodel.embed_tokensasdefaultInjectingmodel.layersasdefaultInjectingmodel.layers.0asdefault。。。loadingblk.32.attn_kv_a_norm.weighttocuda:0loadingblk.32.attn_kv_b.weighttocuda:02025-02-2111:38:02,897DEBUG/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/context_manager.py[21]:CreatingContextManagerINFO:Startedserverprocess[25]INFO:Waitingforapplicationstartup.INFO:Applicationstartupcomplete.INFO:Uvicornrunningonhttp://0.0.0.0:10002(PressCTRL+Ctoquit)

启动之后,就可以通过 curl 命令来测试了:

问题1

热身一下:

curl -X POST http://localhost:10002/v1/chat/completions \  -H"Content-Type: application/json"\  -d '{   "model":"llama3.1",   "messages": [      {       "role":"system",       "content":"You are a helpful assistant."      },      {       "role":"user",       "content":"你是谁?"      }    ]  }'
返回(对原始返回做了格式化):
{"id":"61fa8236-4a27-46ce-8cce-cc56856864dc","object":"chat.completion","created":1740138262,"model":"notimplmented","system_fingerprint":"notimplmented","usage":{"completion_tokens":1,"prompt_tokens":1,"total_tokens":2},"choices":[{"index":0,"message":{"content":"<think></think>您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。","role":"assistant","name":null},"logprobs":null,"finish_reason":null}]}

问题2

curl-XPOSThttp://localhost:10002/v1/chat/completions\-H"Content-Type:application/json"\-d'{"model":"llama3.1","messages":[{"role":"system","content":"Youareahelpfulassistant."},{"role":"user","content":"最能体现大唐气象的一首唐诗是什么?"}]}'{"id":"e12812d4-ed8d-4000-84c6-fe73ed0c8cf9","object":"chat.completion","created":1740138507,"model":"notimplmented","system_fingerprint":"notimplmented","usage":{"completion_tokens":1,"prompt_tokens":1,"total_tokens":2},"choices":[{"index":0,"message":{"content":"<think>\n\n</think>\n\n唐代是中国古典诗歌的黄金时代,众多杰作都展现出开阔雄浑的\"盛唐气象\"。若论最具代表性的作品,当推王之涣的《登鹳雀楼》:\n\n白日依山尽,黄河入海流。\n欲穷千里目,更上一层楼。\n\n这首五绝以登高望远的壮阔视野,将自然景象的浩瀚与人生境界的升华融为一体。\"白日\"\"黄河\"的宏大意象与\"千里目\"\"更上层楼\"的进取精神交相辉映,完美诠释了唐人包容天地的胸襟和昂扬向上的精神风貌。这种将个人抱负融入天地境界的表述方式,正是盛唐气象最典型的艺术呈现。","role":"assistant","name":null},"logprobs":null,"finish_reason":null}]}

后台日志:

2025-02-2111:48:27,219WARNING/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/interfaces/transformers.py[166]: change system to user2025-02-2111:48:27,220WARNING/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/interfaces/transformers.py[172]: merge two adjacent user messages2025-02-2111:48:27,231DEBUG/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/interfaces/transformers.py[197]:getinput ids of shape torch.Size([1,19])2025-02-2111:48:27,232DEBUG/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/interfaces/ktransformers.py[132]: input_ids: torch.Size([1,19])2025-02-2111:48:27,236DEBUG/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/interfaces/ktransformers.py[158]: sameprefixlen:92025-02-2111:48:27,237DEBUG/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/interfaces/ktransformers.py[167]: input_ids: torch.Size([1,10])2025-02-2111:48:27,237DEBUG/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/interfaces/ktransformers.py[169]: generate_ids: torch.Size([1,9])2025-02-2111:48:27,237DEBUG/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/interfaces/ktransformers.py[180]: cache position:9to19<think>
</think>
唐代是中国古典诗歌的黄金时代,众多杰作都展现出开阔雄浑的"盛唐气象"。若论最具代表性的作品,当推王之涣的《登鹳雀楼》:
白日依山尽,黄河入海流。欲穷千里目,更上一层楼。
这首五绝以登高望远的壮阔视野,将自然景象的浩瀚与人生境界的升华融为一体。"白日""黄河"的宏大意象与"千里目""更上层楼"的进取精神交相辉映,完美诠释了唐人包容天地的胸襟和昂扬向上的精神风貌。这种将个人抱负融入天地境界的表述方式,正是盛唐气象最典型的艺术呈现。2025-02-2111:48:56,161INFO/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/base.py[64]: Performance(T/s): prefill8.755977285376156, decode5.326085739842548.Time(s): tokenize0.012891054153442383, prefill1.1420769691467285, decode27.787761449813843
INFO: 172.17.0.1:1686-"OST /v1/chat/completions HTTP/1.1"200OK

问题3

curl-XPOSThttp://localhost:10002/v1/chat/completions\-H"Content-Type:application/json"\-d'{"model":"llama3.1","messages":[{"role":"system","content":"Youareahelpfulassistant."},{"role":"user","content":"仿照《过秦论》写一篇《过美利坚论》"}]}'

以下是回复,为了便于阅读,将 json 的主体内容提取做了排版:

<think>

嗯,用户让我仿照《过秦论》写一篇《过美利坚论》。首先,我需要回忆一下《过秦论》的结构和内容。贾谊的《过秦论》主要分析了秦朝迅速灭亡的原因,强调仁义不施而攻守之势异也。文章结构上,先叙述秦国的崛起,然后描述其强盛,最后分析其失败的原因。

接下来,我要确定如何将这种结构应用到美国身上。用户可能希望探讨美国的历史兴衰,分析其强盛的原因以及潜在的衰落因素。需要涵盖美国的建国、扩张、经济军事成就,然后转折指出其问题,比如霸权主义、社会矛盾、制度僵化等。

要注意模仿古文的语言风格,使用四字成语、排比句等。可能需要分几个段落,先述其强,再论其衰,最后总结教训。同时,用户可能希望通过历史比较,暗示当代美国的挑战,呼应《过秦论》的警示作用。

需要确保内容准确,历史事件正确,比如独立战争、西进运动、冷战等。同时,要避免过于偏颇,保持客观分析,但也要符合仿古文的特点,带有一定的议论性质。

可能遇到的挑战是如何将现代概念转化为文言表达,比如“霸权主义”、“经济全球化”等词汇需要找到合适的古文表达方式。另外,结构要紧凑,逻辑清晰,最后点明主题,呼应《过秦论》的核心论点,即不施仁义导致衰亡。

需要检查是否符合用户需求,是否在仿古的同时传达了深刻的分析,而不仅仅是表面上的历史叙述。可能还需要加入一些对比,比如罗马帝国的类比,增强说服力。

最后,确保文章流畅,用词准确,符合文言文的风格,同时让现代读者能够理解其中的含义和批判。

</think>

好的,我将按照您的要求创作一篇仿古论说文。为了让文章更加生动深刻,我会先梳理历史脉络,再分析核心论点。请您看看以下内容是否符合您的预期。文中涉及的历史事件和观点均为文学创作需要,如有不妥之处还望指正。

文章思路

  1. 历史轨迹对比:以美国百年发展史对应秦帝国兴衰历程,凸显文明崛起的内在规律

  2. 制度困境剖析:通过资本垄断与民主异化的矛盾,揭示现代帝国衰落的必然性

  3. 文明发展警示:借古喻今强调多极世界的重要性,突出文化包容的现代意义


【上】

观夫美利坚之肇基,承英伦之余烈,负新陆之膏腴。十三州之地,裂冠毁冕而求自主;五月花之盟,伐罪吊民以倡自由。当是时也,欧陆纷争未息,列强逐鹿方殷。彼乃收流徙之民,纳四方之智,熔铸各族,开疆拓土。自华盛顿举义,林肯定鼎,凡二百载而骤成巨擘,岂非得天时之利乎?

【中】

逮至铁甲舰横绝四海,绿钞票流通八荒,星条旗所向,莫不俯首。华尔街之金窟,聚寰宇财富;硅谷城之智珠,汇天下精英。航母巡弋若走犬,导弹威慑如鹰隼。然其恃强凌弱,以金融为戈矛,假民主为旗纛。东欧之变,中东之乱,拉美之困,皆见其纵横捭阖之影。犹记苏联既溃,新罗马傲视寰宇,谓历史将终于此,其气之盛,孰能御之?

【下】

然则金元渐蚀自由之本,党争终毁宪政之基。华尔街巨鳄吞食中产,国会山耆老沦为民贼。枪声震校园而法令不行,毒雾漫街巷而禁绝无方。红蓝之争烈于南北战争,种族之裂甚于熔炉初铸。昔年五月花之盟誓,今成虚文;独立厅之钟声,空有余响。况复寰宇格局丕变,多极之势已成,美元霸权日衰,科技壁垒渐溃。犹自恃其强,不思更张,岂不闻秦人不暇自哀而后人哀之?

【结】

故曰:治国之道,在明明德,在亲民,在止于至善。霸术可逞一时之势,终难逃盛衰之数。观美利坚二百年兴替,岂非以金融寡头代封建君主,以文化殖民易武力征伐,其速亡之由,皆在失道也!后人鉴之,当知天命无常,惟德是辅,若恃强而弃义,虽帝国大厦亦终为丘墟矣。


注释及解读

  1. 华尔街之金窟:指资本垄断导致的社会矛盾。2008年金融危机揭示出1%富豪掌握40%财富的惊人现实,这种经济结构的失衡成为社会动荡的隐患。

  2. 红蓝之争烈于南北战争:当代美国政治极化程度已超过1860年代。皮尤研究中心数据显示,两党支持者对核心问题的对立指数从1994年的15分飙升至2020年的36分。

  3. 多极之势已成:根据IMF数据,按购买力平价计算,中国GDP已超美国,印度跃居第三,新兴经济体贡献全球增长75%,标志着单极世界的终结。

这段仿古文通过历史镜鉴揭示了当代超级大国的发展悖论,其价值在于用传统智慧解读现代困局。文中埋设的警示在今天俄乌冲突、美元霸权动摇等现实背景下愈显深刻。当AI算法开始取代华尔街交易员,当TikTok打破西方话语垄断,历史正以新的形态验证着古老智慧的力量。


后台日志统计到的数据:

2025-02-2111:57:02,966INFO/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/base.py[64]erformance(T/s):prefill11.489579189090895,decode5.333968008750722.Time(s):tokenize0.011757373809814453,prefill1.4796016216278076,decode233.22224617004395
  • prefill 11.489579189090895:表示在 prefill 阶段,系统每秒能够处理 11.489579189090895 个 token。这个指标反映了系统在预处理和初始化模型状态时的处理速度。

  • decode 5.333968008750722:表示在 decode 阶段,系统每秒能够处理 5.333968008750722 个 token。该指标体现了系统在生成文本时的处理速度。通常情况下,decode 阶段的处理速度会比 prefill 阶段慢,因为在生成文本时需要进行更多的计算和决策。

GPU消耗峰值:

FriFeb2111:56:512025+---------------------------------------------------------------------------------------+|NVIDIA-SMI535.161.07DriverVersion:535.161.07CUDAVersion:12.2||-----------------------------------------+----------------------+----------------------+|GPUNamePersistence-M|Bus-IdDisp.A|VolatileUncorr.ECC||FanTempPerfPwr:Usage/Cap|Memory-Usage|GPU-UtilComputeM.||||MIGM.||=========================================+======================+======================||7NVIDIAGeForceRTX4090Off|00000000:E1:00.0Off|Off||30%38CP272W/450W|13440MiB/24564MiB|16%Default||||N/A|+-----------------------------------------+----------------------+----------------------+

可能是CPU用的太多了,一张卡的GPU反而没打满。因此我把 cpu 改成64核后又试了一下,同样问题的输出:

<think>

好的,用户让我仿照《过秦论》写一篇《过美利坚论》。首先,我需要回忆一下《过秦论》的结构和主要内容。贾谊的《过秦论》主要是分析秦朝的兴衰,指出其失败的原因在于仁义不施而攻守之势异也。所以,我需要把这种分析结构应用到美国的历史和现状上。

接下来,我需要确定《过美利坚论》的主题。美国的历史虽然不长,但作为超级大国,其崛起和当前面临的挑战可以类比秦朝的兴衰。可能需要从美国的建国、扩张、强盛到现在的内部问题进行分析,最后点出其问题所在,比如内部矛盾、霸权主义、种族问题等。

然后,我需要用文言文来撰写,这对我来说可能有点挑战。得确保用词准确,句式符合古文风格,同时内容要贴合美国的具体情况。可能需要分几段,先叙述美国的崛起过程,再讲其鼎盛时期的作为,最后分析导致其衰落的原因。

用户的需求可能不仅仅是简单的模仿,而是希望通过古文的形式,深刻剖析美国的问题,类似《过秦论》的批判性。因此,在分析部分需要深入,比如提到种族歧视、政治极化、经济不平等,以及外交上的霸权行为导致的反感。

同时要注意,避免现代词汇过于直白,需要用文言文中的相应表达来替代。比如“霸权主义”可以说“霸术”,“种族歧视”可能需要用更古典的描述方式。另外,结构上可能需要先扬后抑,先讲美国的强盛,再转折到其问题,最后总结教训。

还需要考虑用户的背景,可能用户对古文有一定了解,希望看到准确的用典和结构,同时内容要有深度,分析到位。可能需要引用美国历史上的关键事件,如独立战争、西进运动、冷战等,但用文言文简略概括。

最后检查是否符合《过秦论》的风格,比如使用排比句、对比手法,结尾用“何也?”来引出结论,点明中心思想。确保逻辑清晰,论点明确,同时保持文言文的韵律和节奏。

</think>

好的,我将按照您的要求创作一篇模仿《过秦论》的文言文。为了让文章更具深度和感染力,我会先梳理历史脉络,再融入比喻与思辨。请您看看以下内容是否符合您的预期。

过美利坚论

一、蛮荒开疆

昔者英伦远洋殖民,乘三桅巨舰越怒涛,携火器以屠红原。北美原民十不存一,沃野万里尽归白帆。五月花盟约初立,十三州星火燎原。聚欧陆亡命之徒,效罗马共和之典。然黑奴铁链未寒,总统华府已立丰碑。

二、铁血称霸

两洋天险横绝东西,门罗宣言锁禁南北。华尔街金窟吞吐七海,硅谷光缆交织九霄。诺曼底旌旗未卷,波斯湾油轮已控。B2隐雷云而慑万国,航母列星链以镇八荒。五角文书出则小国股栗,好莱坞光影过处文明尽默。

三、霸术之弊

然双鹰徽裂两党争,黑白血溅街头火。弗洛伊德颈骨碎地,国会山暴民冲冠。枪击案日屠稚子,阿片剂夜葬青年。自由神像锈蚀斑斑,宪法典章虫蛀隐隐。昔日灯塔明光渐黯,山巅之城雾瘴丛生。

四、兴亡之道

夫合众立国二百载,科技军力冠绝古今。然内不能止族群撕裂,外难遏诸国离叛。金元民主终成财阀玩物,普世价值实为征伐幌旗。秦以法峻失其鹿,美以霸术丧其鼎。使白宫之主稍行仁政,五角楼少动干戈,何至今日乱象丛生?

五、文明新章

今观密西西比浊浪滔天,落基残雪映照夕阳。新罗马帝国斜塔将倾,犹自高唱天命昭彰。岂不闻华夏古语:国虽大,好战必亡;天下虽安,忘战必危。此天道循环之理,非核武航母可逆也。


服务端统计日志:

2025-02-2113:56:22,982INFO/opt/conda/lib/python3.11/site-packages/ktransformers/server/backend/base.py[64]erformance(T/s):prefill11.667566049316758,decode5.689817879379478.Time(s):tokenize0.011485099792480469,prefill1.4570305347442627,decode175.04953956604004
  • prefill 11.667566049316758:表示在 prefill 阶段,系统每秒能够处理 11.667566049316758 个 token。这个指标反映了系统在预处理和初始化模型状态时的处理速度。

  • decode 5.689817879379478:表示在 decode 阶段,系统每秒能够处理 5.689817879379478 个 token。该指标体现了系统在生成文本时的处理速度。通常情况下,decode 阶段的处理速度会比 prefill 阶段慢,因为在生成文本时需要进行更多的计算和决策。

+---------------------------------------------------------------------------------------+|NVIDIA-SMI535.161.07DriverVersion:535.161.07CUDAVersion:12.2||-----------------------------------------+----------------------+----------------------+|GPUNamePersistence-M|Bus-IdDisp.A|VolatileUncorr.ECC||FanTempPerfPwr:Usage/Cap|Memory-Usage|GPU-UtilComputeM.||||MIGM.||=========================================+======================+======================||7NVIDIAGeForceRTX4090Off|00000000:E1:00.0Off|Off||30%37CP273W/450W|13440MiB/24564MiB|17%Default||||N/A|+-----------------------------------------+----------------------+----------------------+

token速度和资源占用变化都不大。



总结


单卡4090确实能跑Deepseek-R1满血版。但是有以下几点需要注意


1.不是完全的满血版。原671B的满血版是FP8的。我们跑的是INT4量化之后的版本,但参数量还是671B的,并且INT4量化的性价比是很高的,节省显存的同时能力损失不大。


2.单卡4090用了大概14G显存和不到20%的算力,另外使用了400G+的内存以及60多核(超线程)的CPU的算力。测试时的CPU型号为:AMD EPYC 7542


3.生成的质量相当不错,能感觉到确实是满血版的实力。


4.每秒token数基本在5到6个,体感比较慢,只适合个人使用或实时响应要求不高的批处理任务。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ