天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结

一、项目背景与目标

本文记录在天翼云昇腾910B服务器上部署DeepSeek 70B模型的全过程。该模型是基于LLaMA架构的知识蒸馏版本,模型大小约132GB。

1.1 硬件环境

- 服务器配置:天翼云910B服务器
- NPU:8×昇腾910B (每卡64GB显存)
- 系统内存:1500GB
- 操作系统:Ubuntu 22.04.5 LTS

 1.2 软件环境

- CANN版本:6.5.1
- Mindie版本:2.0.T3
- Python版本:3.11
- DeepSeek模型:70B-base

二、部署步骤

2.1 环境准备

 # 更新系统
apt update
apt upgrade

# 安装必要工具
apt install bash-completion
apt install iftop iotop htop atop haproxy

# 优化CPU性能
cpupower frequency-set -g performance

2.2 存储配置

# 清理并初始化新的NVME磁盘
wipefs -af /dev/nvme0n1 
wipefs -af /dev/nvme1n1

# 创建物理卷
pvcreate /dev/nvme0n1 
pvcreate /dev/nvme1n1

# 扩展卷组
vgextend system /dev/nvme0n1 
vgextend system /dev/nvme1n1

# 扩展逻辑卷
lvextend /dev/system/lv_root /dev/nvme0n1 
lvextend /dev/system/lv_root /dev/nvme1n1

# 扩展文件系统
xfs_growfs /dev/mapper/system-lv_root

2.2 华为ascend 910b mindie推理框架Docker镜像准备

# 拉取必要的Docker镜像
docker pull swr.cn-southwest-2.myhuaweicloud.com/ei-mindie/mindie:2.0.T3-800I-A2-py311-openeuler24.03-lts

2.3 模型文件准备

# 创建权重文件目录
mkdir /home/deepseek70b
chmod -R 755 /home/deepseek70b/
chown -R root:root /home/deepseek70b/

# 下载模型文件

# 下载模型分片文件
for i in $(seq -w 1 17); do
    wget https://modelers.cn/coderepo/web/v1/file/State_Cloud/DeepSeek-R1-Distill-Llama-70B/main/media/model-000${i}-of-000017.safetensors
done

# 下载配置文件
wget https://modelers.cn/coderepo/web/v1/file/State_Cloud/DeepSeek-R1-Distill-Llama-70B/main/media/config.json
wget https://modelers.cn/coderepo/web/v1/file/State_Cloud/DeepSeek-R1-Distill-Llama-70B/main/media/model.safetensors.index.json
wget https://modelers.cn/coderepo/web/v1/file/State_Cloud/DeepSeek-R1-Distill-Llama-70B/main/media/tokenizer.json
wget https://modelers.cn/coderepo/web/v1/file/State_Cloud/DeepSeek-R1-Distill-Llama-70B/main/media/tokenizer_config.json
wget https://modelers.cn/coderepo/web/v1/file/State_Cloud/DeepSeek-R1-Distill-Llama-70B/main/media/generation_config.json
wget https://modelers.cn/coderepo/web/v1/file/State_Cloud/DeepSeek-R1-Distill-Llama-70B/main/media/configuration.json

# 配置文件权限

chmod 750 /home/deepseek70b/config.json

2.4 通过docker启动加载模型

docker run -it -d --net=host --shm-size=1g \
  --privileged \
  --name ds-deepseek-70b \
  --device=/dev/davinci_manager --device=/dev/hisi_hdc --device=/dev/devmm_svm \
  --device=/dev/davinci0 --device=/dev/davinci1 --device=/dev/davinci2 --device=/dev/davinci3 \
  --device=/dev/davinci4 --device=/dev/davinci5 --device=/dev/davinci6 --device=/dev/davinci7 \
  -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
  -v /usr/local/sbin:/usr/local/sbin:ro \
  -v /home/deepseek70b:/home/deepseek70b:ro \
  swr.cn-southwest-2.myhuaweicloud.com/ei-mindie/mindie:2.0.T3-800I-A2-py311-openeuler24.03-lts bash

# 修改mindie配置文件

vi /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json    
{
    "Version" : "1.0.0",
    "LogConfig" :
    {
        "logLevel" : "Info",
        "logFileSize" : 20,
        "logFileNum" : 20,
        "logPath" : "logs/mindie-server.log"
    },

    "ServerConfig" :
    {
        "ipAddress" : "172.16.0.5",
        "managementIpAddress" : "127.0.0.2",
        "port" : 1025,
        "managementPort" : 1026,
        "metricsPort" : 1027,
        "allowAllZeroIpListening" : false,
        "maxLinkNum" : 1000,
        "httpsEnabled" : false,
        "fullTextEnabled" : false,
        "tlsCaPath" : "security/ca/",
        "tlsCaFile" : ["ca.pem"],
        "tlsCert" : "security/certs/server.pem",
        "tlsPk" : "security/keys/server.key.pem",
        "tlsPkPwd" : "security/pass/key_pwd.txt",
        "tlsCrlPath" : "security/certs/",
        "tlsCrlFiles" : ["server_crl.pem"],
        "managementTlsCaFile" : ["management_ca.pem"],
        "managementTlsCert" : "security/certs/management/server.pem",
        "managementTlsPk" : "security/keys/management/server.key.pem",
        "managementTlsPkPwd" : "security/pass/management/key_pwd.txt",
        "managementTlsCrlPath" : "security/management/certs/",
        "managementTlsCrlFiles" : ["server_crl.pem"],
        "kmcKsfMaster" : "tools/pmt/master/ksfa",
        "kmcKsfStandby" : "tools/pmt/standby/ksfb",
        "inferMode" : "standard",
        "interCommTLSEnabled" : true,
        "interCommPort" : 1121,
        "interCommTlsCaPath" : "security/grpc/ca/",
        "interCommTlsCaFiles" : ["ca.pem"],
        "interCommTlsCert" : "security/grpc/certs/server.pem",
        "interCommPk" : "security/grpc/keys/server.key.pem",
        "interCommPkPwd" : "security/grpc/pass/key_pwd.txt",
        "interCommTlsCrlPath" : "security/grpc/certs/",
        "interCommTlsCrlFiles" : ["server_crl.pem"],
        "openAiSupport" : "vllm"
    },

    "BackendConfig" : {
        "backendName" : "mindieservice_llm_engine",
        "modelInstanceNumber" : 1,
        "npuDeviceIds" : [[0,1,2,3,4,5,6,7]],
        "tokenizerProcessNumber" : 8,
        "multiNodesInferEnabled" : false,
        "multiNodesInferPort" : 1120,
        "interNodeTLSEnabled" : false,
        "interNodeTlsCaPath" : "security/grpc/ca/",
        "interNodeTlsCaFiles" : ["ca.pem"],
        "interNodeTlsCert" : "security/grpc/certs/server.pem",
        "interNodeTlsPk" : "security/grpc/keys/server.key.pem",
        "interNodeTlsPkPwd" : "security/grpc/pass/mindie_server_key_pwd.txt",
        "interNodeTlsCrlPath" : "security/grpc/certs/",
        "interNodeTlsCrlFiles" : ["server_crl.pem"],
        "interNodeKmcKsfMaster" : "tools/pmt/master/ksfa",
        "interNodeKmcKsfStandby" : "tools/pmt/standby/ksfb",
        "ModelDeployConfig" :
        {
            "maxSeqLen" : 131072,
            "maxInputTokenLen" : 131072,

            "truncation" : false,
            "ModelConfig" : [
                {
                    "modelInstanceType" : "Standard",
                    "modelName" : "llama",
                    "modelWeightPath" : "/home/deepseek70b",
                    "worldSize" : 8,
                    "cpuMemSize" : 10,
                    "npuMemSize" : -1,
                    "backendType" : "atb",
                    "trustRemoteCode" : false
                }
            ]
        },

        "ScheduleConfig" :
        {
            "templateType" : "Standard",
            "templateName" : "Standard_LLM",
            "cacheBlockSize" : 128,

            "maxPrefillBatchSize" : 50,
            "maxPrefillTokens" : 131072,
            "prefillTimeMsPerReq" : 150,
            "prefillPolicyType" : 0,

            "decodeTimeMsPerReq" : 50,
            "decodePolicyType" : 0,

            "maxBatchSize" : 200,
            "maxIterTimes" : 131072,
            "maxPreemptCount" : 0,
            "supportSelectBatch" : false,
            "maxQueueDelayMicroseconds" : 5000
        }
    }
}
 

2.5 验证模型部署

# 检查NPU状态
npu-smi info

# 测试API接口
curl -ik -H 'Content-Type: application/json' \
    -d '{"messages":[{"role":"user","content":"请自我介绍"}],"model":"DeepSeek-70b","temperature":0.6,"max_tokens":128}' \
    -X POST http://127.0.0.1:1025/v1/chat/completions

2.6 部署openweb-ui界面容器

# 拉取WebUI镜像使用国内镜像源
docker pull ghcr.nju.edu.cn/open-webui/open-webui:main

2.7 运行webui 

# 运行WebUI容器
podman run -d \
    -p 8000:8080 \
    -v open-webui:/app/backend/data \
    --name open-webui \

2.8 配置webui与模型127.0.0.1:1025的连接

# WebUI配置说明:
# 1. 访问WebUI界面:http://[服务器IP]:8000
# 2. 在WebUI设置中配置API地址:http://127.0.0.1:1025/v1
# 3. 选择模型:DeepSeek-70b

三、效果分析

部署架构分析

4、上下文窗口分析

{
  "max_position_embeddings": 131072,
  "rope_scaling": {
    "factor": 8.0,
    "high_freq_factor": 4.0,
    "low_freq_factor": 1.0,
    "original_max_position_embeddings": 8192,
    "rope_type": "llama3"
  }
}

  • 基础窗口:8192 tokens
  • 扩展后窗口:131072 tokens(约128K)
  • 实际建议使用:32K-64K tokens

5、并发分析

1. 内存占用计算
- 模型基础占用:140GB (70B × 2 bytes)
- KV Cache每token占用:
  8192(hidden_size) × 2(k,v) × 2(bytes) × 8(num_kv_heads) = 256KB/token
  
2. 单会话最大内存
- 32K上下文示例:
  32K × 256KB = 8GB KV Cache

3. 并发会话数估算
基于910B 64GB NPU显存:
- 预留20GB给模型计算
- 剩余44GB可用于KV Cache
- 理论最大并发数:44GB ÷ 8GB ≈ 5-6个32K上下文会话

实际建议并发配置:

  • 短文本(4K以下):8-10并发
  • 中等文本(4K-16K):4-6并发
  • 长文本(16K以上):2-3并发

四、实测API效果

time curl -X POST http://localhost/v1/chat/completions \
     -H 'Content-Type: application/json' \
     -d '{
         "messages": [{"role": "user", "content": "写一个20字的句子"}],
         "model": "DeepSeek-70b",
         "max_tokens": 50,
         "temperature": 0.7
     }'

时间分析

1. 总响应时间:1.483秒
2. prefill_time: 60ms (预填充时间)
3. decode_time_arr详情:
   - 首token生成: 43ms
   - 后续token平均: 28ms
   - 最快token生成: 27ms
   - 最慢token生成: 43ms

Token统计

1. 输入tokens (prompt_tokens): 12个
2. 输出tokens (completion_tokens): 50个
3. 总计tokens (total_tokens): 62个

计算生成速度:
- 总生成时间:1.483秒
- Token生成速度:50 tokens / 1.483秒 ≈ 33.7 tokens/秒

性能分解

- 稳定的token生成时间(大部分维持在28ms)
- 较低的预填充延迟(60ms)
- 单token生成延迟控制得较好(<30ms)

<think>好的,我现在需要回答用户关于DeepSeek蒸馏模型70B和671B模型性能对比的问题。首先,我应该确认这两个模型的基本信息,因为用户提到的型号可能容易混淆,尤其是671B这个参数规模非常大,不太常见。 首先,我需要回忆一下DeepSeek公司发布的模型情况。根据之前的了解,DeepSeek可能发布了不同规模的模型,比如他们可能有较大的基座模型和通过蒸馏得到的较小模型。例如,70B可能是指一个拥有700亿参数的蒸馏模型,而671B可能是一个更大的基座模型,拥有6710亿参数。不过,通常模型参数规模不会精确到个位数,比如671B可能是一个近似,比如670B或者接近的数值,用户可能记错了具体的数字,比如原本是67B或者670B之类的,需要进一步确认。 接下来,我需要检查是否有公开的资料或论文提到这两个模型。假设DeepSeek确实发布了这两个模型,我需要比较它们的性能。通常,蒸馏模型(如70B)是通过知识蒸馏从更大的教师模型(如671B)中提取知识,以较小的模型达到接近原模型的性能,同时提高推理速度和降低计算资源需求。 性能对比可能包括以下几个方面: 1. **模型规模与计算资源**:671B模型参数更多,需要更多的计算资源和内存,推理速度较慢;而70B模型较小,适合部署在资源有限的环境。 2. **任务表现**:在NLP任务(如文本生成、理解、翻译等)上,671B作为基座模型可能表现更好,但70B通过蒸馏可能接近其性能,尤其在特定任务上优化过。 3. **训练成本与效率**:671B训练成本极高,需要大量数据和计算资源;蒸馏模型70B训练成本较低,且可能使用教师模型的数据或输出进行训练。 4. **应用场景**:70B适合需要快速响应和较低延迟的应用,而671B可能用于对性能要求极高且资源充足的情况。 不过,这里可能存在用户的混淆,比如671B可能指的是其他模型,或者参数规模有误。比如,常见的模型参数规模通常是类似175B(如GPT-3)、540B(如PaLM)等,而671B可能是一个特定型号,或者用户可能混淆了模型名称中的数字,比如DeepSeek 67B或者类似。此外,也有可能用户提到的671B是某个特定版本或内部型号,但公开资料较少,需要进一步验证。 另外,我需要考虑是否存在拼写错误,比如67B和70B的比较,或者670B和70B。假设用户确实指的是670B和70B,那么对比会更合理。例如,670B作为教师模型70B作为蒸馏后的学生模型,这时候性能对比会更常见。 如果公开资料中没有明确的DeepSeek 671B模型,可能需要推测或指出可能存在的信息不准确。同时,可以建议用户核实模型的具体名称或参数规模,或者提供更详细的信息以便准确比较。 总结来说,回答的结构应包括: - 确认模型的存在和参数可能存在的混淆。 - 比较模型规模和资源需求。 - 讨论性能差异,尤其是在具体任务上的表现。 - 提及训练和应用的不同场景。 - 指出可能的资料限制或需要进一步验证的信息。 需要确保回答准确,同时对于不确定的信息保持透明,避免误导用户。</think>DeepSeek模型参数规模及具体性能对比信息可能因未完全公开而有限,但基于常见的知识蒸馏原理及模型架构规律,可以对其70B(700亿参数)的蒸馏模型与假设的671B(6710亿参数)基座模型进行以下合理推测和分析: --- ### **1. 模型规模与计算效率** - **671B基座模型**:参数量极大,理论上有更强的表达能力,适合处理复杂任务(如长文本生成、多步推理)。但训练和推理成本极高,需大量GPU资源,延迟较高,部署难度大。 - **70B蒸馏模型**:通过知识蒸馏从大模型(如671B)中迁移知识,参数减少约90%,显著降低计算资源需求,推理速度更快,适合实际应用部署(如API服务、边缘设备)。 --- ### **2. 任务性能对比** - **通用能力**:671B作为基座模型,在未蒸馏情况下,通常在基准测试(如MMLU、C-Eval)中表现更优,尤其在需要深层次理解的复杂任务上。 - **蒸馏优化**:70B模型通过蒸馏可能在某些任务(如文本摘要、分类)上接近基座模型性能,尤其在教师模型知识迁移充分的情况下。但在少样本学习、逻辑推理等任务上可能仍有差距。 - **领域适应性**:蒸馏模型可通过针对性训练数据优化特定场景(如客服、代码生成),缩小与基座模型的差距。 --- ### **3. 训练与部署成本** - **训练成本**: - 671B模型需数千张GPU数月训练,成本可达数百万美元; - 70B蒸馏模型训练时间大幅缩短(可能仅需基座模型的部分输出或中间层特征),成本显著降低。 - **推理成本**: - 671B模型单次推理需多卡并行,响应时间可能达秒级; - 70B模型可单卡运行,响应更快(毫秒到秒级),适合高并发场景。 --- ### **4. 实际应用场景** - **671B模型适用场景**: 需极致性能且资源充足的场景,如科研探索、复杂问答系统、大规模数据预处理。 - **70B模型适用场景**: 资源受限但需平衡性能与效率的场景,如实时对话系统、移动端应用、企业级工具集成。 --- ### **5. 潜在限制与补充说明** - **信息不确定性**:DeepSeek官方可能未完全公开671B与70B的对比数据,以上分析基于通用蒸馏原理及类似模型(如GPT-3与DistilGPT)的经验。 - **优化技术影响**:若70B模型采用进阶蒸馏方法(如任务特定蒸馏、数据增强),性能差距可能进一步缩小。 --- ### **总结** 若追求**极致性能且不计成本**,671B基座模型更优;若需**高效部署与成本可控**,70B蒸馏模型是更优选择。实际应用中,两者可能形成互补(如用671B生成训练数据,70B提供服务)。建议参考DeepSeek官方技术报告或基准测试以获取准确对比数据。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值