2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

DeepSeek-R1 昇腾910B满血版部署避坑指南

发布日期:2025-02-18 08:25:59 浏览次数: 8766
作者:克鲁斯卡

微信搜一搜,关注“克鲁斯卡”

推荐语

操作国产化部署的实用指南,避免部署过程中的常见陷阱。

核心内容:
1. DeepSeek-R1满血版部署流程详解
2. 模型权重下载技巧及白名单配置
3. FP8转FP16权重转换步骤

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

deepseek满血版昇腾显卡部署指南,网上有很多相关的教程,但是实际操作下来发现有非常多的坑,这里记录一下部署的流程,希望给国产化部署的朋友一些帮助。

现在各大平台好多提供了deepseek-r1满血版的推理服务,在网上看到一个比较有意思的检测

是否满血的prompt,可以试一下

测试一下deepseek官方的回答:

再看一下使用昇腾部署的回答:


昇腾官方有出一个部署指南,本文也是参考该教程进行的,虽然有很多槽点,但是依然是一个不错的参考。

https://www.hiascend.com/software/modelzoo/models/detail/68457b8a51324310aad9a0f55c3e56e3

模型权重

第一步是模型权重的下载,对于满血版R1这个庞然大物,如果网速不够快,下载起来还是非常麻烦的,我尝试了多个下载渠道,最终使用了魔乐社区,峰值速度达80M/s,全部下载完也就一小时左右,速度非常可观。可以看一下官方的介绍,所言非虚,推荐使用。

https://modelers.cn/updates/zh/modelers/20250213-deepseek%E6%9D%83%E9%87%8D%E4%B8%8B%E8%BD%BD/


下载的时候需要导入一个白名单,否则自定义位置报错

from openmind_hub import snapshot_download
snapshot_download(
            repo_id="State_Cloud/DeepSeek-R1-origin",
            local_dir="xxx",
            cache_dir="xxx",
            local_dir_use_symlinks=False,
            )

然后就是权重转换了,需要将FP8的转成FP16,可以使用昇腾里DeepSeek-V3的权重转换脚本

 DeepSeek-R1在转换前权重约为640G左右,在转换后权重约为1.3T左右,记得提前规划好存储的位置,避免中断。

另外这里提一下,在部署的时候,有遇到一个错误,就是加载权重的时候,好像对软链接不支持,因此这里在下载的时候,可以关闭软链接,设置参数local_dir_use_symlinks=False即可。

对于昇腾机器的的要求,BF16的R1需要至少需要4台Atlas 800I A2(8*64G)服务器,W8A8量化版本则至少需要2台Atlas 800I A2 (8*64G) , 我在部署的时候使用的是量化版本,用的是两台Atlas 800T A2

如果不想经过上述的权重转换步骤,又需要部署W8A8的量化版本,可以直接下载社区里转换好的权重,下载量已经到了6k+,可以使用。

下载后的模型权重,需要管理一下权限,方便后续读取:

chown -R 1001:1001 /path-to-weights/DeepSeek-R1
chmod -R 750 /path-to-weights/DeepSeek-R1

镜像部分

昇腾官方出了可以直接部署的镜像,方便开发者一键启动

镜像链接:https://www.hiascend.com/developer/ascendhub/detail/af85b724a7e5469ebd7ea13c3439d48f

目前提供的MindIE镜像预置了DeepSeek-R1模型推理脚本,无需再下载模型代码

这里的镜像需要申请,通过后才能下载

执行命令:

docker pull swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.0.T3-800I-A2-py311-openeuler24.03-lts

拉取镜像后,需要启动容器,可以使用下面的命令,与官方教程有些区别

docker run -itd --privileged  --name=deepseek-r1 --net=host \
   --shm-size 500g \
   --device=/dev/davinci0 \
   --device=/dev/davinci1 \
   --device=/dev/davinci2 \
   --device=/dev/davinci3 \
   --device=/dev/davinci4 \
   --device=/dev/davinci5 \
   --device=/dev/davinci6 \
   --device=/dev/davinci7 \
   --device=/dev/davinci_manager \
   --device=/dev/hisi_hdc \
   --device /dev/devmm_svm \
    -v /usr/local/dcmi:/usr/local/dcmi \
    -v /usr/bin/hccn_tool:/usr/bin/hccn_tool \
    -v /usr/local/sbin:/usr/local/sbin \
    -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
     -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
     -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
   -v /etc/hccn.conf:/etc/hccn.conf \
   -v xxxxxx/DeepSeek-R1-weight:/workspace \
   swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.0.T3-800I-A2-py311-openeuler24.03-lts \
    bash

--name 容器名, -v 挂载下载好的模型

其中需要注意的地方在于,把下载好模型权重的位置,挂载到容器中,可以放到workspace目录下,这样后面部署的时候,就可以使用了 

其它的挂载盘都是常规的驱动或者工具,确保本地可以正常运行,一般是没问题的

多台服务器部署,每台服务器下载同样的模型权重,位置可以不同,但是都需要执行上述启动容器的命令,把挂载盘换一下

进入容器

启动好容器之后,接下来的操作都默认在容器中

首先便是进入容器,假设上述容器名字为deepseek-r1

docker exec -it deepseek-r1 bash

容器检查

进入容器之后,先检查一下机器的网络情况,如果有问题,可以先查一下本机是否正常 如果本机正常,容器内有问题,那应该是有些目录没有挂载好,可以问下G老师或者D老师

# 检查物理链接
for i in {0..7}; do hccn_tool -i $i -lldp -g | grep Ifname; done 
# 检查链接情况
for i in {0..7}; do hccn_tool -i $i -link -g ; done
# 检查网络健康情况
for i in {0..7}; do hccn_tool -i $i -net_health -g ; done
# 查看侦测ip的配置是否正确
for i in {0..7}; do hccn_tool -i $i -netdetect -g ; done
# 查看网关是否配置正确
for i in {0..7}; do hccn_tool -i $i -gateway -g ; done
# 检查NPU底层tls校验行为一致性,建议全0
for i in {0..7}; do hccn_tool -i $i -tls -g ; done | grep switch
# NPU底层tls校验行为置0操作
for i in {0..7};do hccn_tool -i $i -tls -s enable 0;done

配置多机多卡文件

这个文件比较关键,配置好之后,后续的MindIE推理框架也会参考这个进行启动,不需要再额外设置 

配置起来也比较简单,使用这个命令,把每张卡的ip地址记录下来

for i in {0..7};do hccn_tool -i $i -ip -g; done

每台机器都执行一次,其中,确定一台主节点

  • server_count:一共使用几台服务器,即节点数。server_list中第一个server为主节点
  • device_id:当前卡的本机编号,取值范围[0, 本机卡数)
  • device_ip:当前卡的ip地址,可通过hccn_tool命令获取
  • rank_id:当前卡的全局编号,取值范围[0, 总卡数)
  • server_id:当前节点的ip地址
  • container_ip:容器ip地址(服务化部署时需要),若无特殊配置,则与server_id相同

查看服务器的ip地址

hostname -I

查看docker容器的ip地址

docker inspect 容器id | grep "IPAddress"

如果返回为空,可能是使用和宿主机一样的网络,查看容器的网络模式

docker inspect 容器id | grep -i '"NetworkMode"'

如果返回为 "NetworkMode": "host", 则说明容器使用的是 host 网络,它没有自己的 IP,而是直接用 宿主机 IP

下面是两个节点的配置文件,对着填好ip地址即可

{
    "server_count""2"
    "server_list": [
        {
            "device": [
                {"device_id""0",  "device_ip""xxxx",  "rank_id""0"},
                {"device_id""1",  "device_ip""xxxx""rank_id""1"},
                {"device_id""2",  "device_ip""xxxx",  "rank_id""2"},
                {"device_id""3",  "device_ip""xxxx",  "rank_id""3"},
                {"device_id""4",  "device_ip""xxxx",   "rank_id""4"},
                {"device_id""5",  "device_ip""xxxx",   "rank_id""5"},
                {"device_id""6",  "device_ip""xxxx",  "rank_id""6"},
                {"device_id""7",  "device_ip""xxxx""rank_id""7"}
                ],
                "server_id""xxxx",
                "container_ip""xxxx"
        },
        {
            "device": [
                {"device_id""0",  "device_ip""xxxx",  "rank_id""8"},
                {"device_id""1",  "device_ip""xxxx""rank_id""9"},
                {"device_id""2",  "device_ip""xxxx",  "rank_id""10"},
                {"device_id""3",  "device_ip""xxxx",  "rank_id""11"},
                {"device_id""4",  "device_ip""xxxx",   "rank_id""12"},
                {"device_id""5",  "device_ip""xxxx",   "rank_id""13"},
                {"device_id""6",  "device_ip""xxxx",  "rank_id""14"},
                {"device_id""7",  "device_ip""xxxx""rank_id""15"}
            ],
            "server_id""xxxx",
            "container_ip""xxxx"
        }
    ],
    "status""completed",
    "version""1.0"
}

开启通信环境变量

export ATB_LLM_HCCL_ENABLE=1
export ATB_LLM_COMM_BACKEND="hccl"
export HCCL_CONNECT_TIMEOUT=7200
export WORLD_SIZE=32
export HCCL_EXEC_TIMEOUT=0
  • 权重目录下config.json文件,将 model_type 更改为 deepseekv2 (全小写且无空格)

精度测试

官方给的精度测试例子,与我下载的镜像中的目录对不上,并且执行full_CEval的测试也会报错,缺少文件 modeltest路径,在镜像中的实际位置是:/usr/local/Ascend/atb-models/tests/modeltest

测试命令:

# 需在所有机器上同时执行
bash run.sh pa_bf16 [dataset] ([shots]) [batch_size] [model_name] ([is_chat_model]) [weight_dir] [rank_table_file] [world_size] [node_num] [rank_id_start] [master_address]

性能测试

性能测试是在同样的目录下,但是是可以执行成功的

运行命令

bash run.sh pa_bf16 performance [[256,256]] 16 deepseekv2 /path/to/weights/DeepSeek-R1 /path/to/xxx/ranktable.json 16 2 0 {主节点IP}
# 0 代表从0号卡开始推理,之后的机器依次从8,16,24。

跑完会生成一个csv文件,里面保存了本次测试的指标,比如

Model
Batchsize
In_seq
Out_seq
Total time(s)
First token time(ms)
Non-first token time(ms)
Non-first token Throughput(Tokens/s)
E2E Throughput(Tokens/s)
Non-first token Throughput Average(Tokens/s)
E2E Throughput Average(Tokens/s)
deepseekv2
16
256
256
18.6202795506
478.01
71.03
225.25693369
219.9752151346
225.25693369
219.9752151346

参数解释:

  • Batch size,批次大小
  • 输入序列长度(In_seq)
  • 输出序列长度(Out_seq)
  • 总耗时(Total time)
  • 首 token 生成耗时(First token time)
  • 非首 token 平均生成耗时(Non-first token time)
  • 非首 token 吞吐率(Throughput)
  • 端到端吞吐率(E2E Throughput)

推理部署

上述的两个测试都是可选的,性能测试可以跑一下,调一下bs,看看能跑出什么样的效果

启动前需要配置一下容器,每个容器都执行一下:

export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export MIES_CONTAINER_IP=容器ip地址
export RANKTABLEFILE=rank_table_file.json路径

export OMP_NUM_THREADS=1
export NPU_MEMORY_FRACTION=0.95

注意,上述的路径是指容器内的路径,并且每台机器的ip都要对应正确

执行完后,每台机器都要对应修改服务化参数,即部署的参数配置 

因为这个文件是在容器中,需要用vim修改,比较麻烦,这里推荐一个方法

将该文件复制一份到宿主机上,使用的命令是:

docker cp 镜像id:/usr/local/Ascend/mindie/latest/mindie-service/conf/config.json /本地目录

这样,你可以在宿主机上进行修改json文件,方便快捷,因为每台机器都是一样的配置,因此,修改好后,每台机器复制一份就可以了。 改完之后,需要在传回到镜像中,使用

docker cp 本地目录/config.json  容器id:/usr/local/Ascend/mindie/latest/mindie-service/conf/config.json 

这样就完成了配置文件的修改,这个配置文件后续需要调整,这种方式省去了很多麻烦

下面是官方给的配置,如果想要部署的模型推理更快或者输入输出更长,都需要对应的调整该文件的参数,这部分暂时没有什么好的建议,目前我设置的是32k,可以正常部署起来,推理速度还可以

详细的参数介绍参考这个

https://www.hiascend.com/document/detail/zh/mindie/100/mindieservice/servicedev/mindie_service0285.html

{
    "Version" : "1.0.0",
    "LogConfig" :
    {
        "logLevel" : "Info",
        "logFileSize" : 20,
        "logFileNum" : 20,
        "logPath" : "logs/mindie-server.log"
    },

    "ServerConfig" :
    {
        "ipAddress" : "改成主节点IP",
        "managementIpAddress" : "改成主节点IP",
        "port" : 1025,
        "managementPort" : 1026,
        "metricsPort" : 1027,
        "allowAllZeroIpListening" : false,
        "maxLinkNum" : 1000//如果是4机,建议300
        "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" : false,
        "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" : true,
        "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" : 10000,
            "maxInputTokenLen" : 2048,
            "truncation" : true,
            "ModelConfig" : [
                {
                    "modelInstanceType" : "Standard",
                    "modelName" : "deepseekr1",
                    "modelWeightPath" : "/home/data/dsR1_base_step178000",
                    "worldSize" : 8,
                    "cpuMemSize" : 5,
                    "npuMemSize" : -1,
                    "backendType" : "atb",
                    "trustRemoteCode" : false
                }
            ]
        },

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

            "maxPrefillBatchSize" : 8,
            "maxPrefillTokens" : 2048,
            "prefillTimeMsPerReq" : 150,
            "prefillPolicyType" : 0,

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

            "maxBatchSize" : 8,
            "maxIterTimes" : 1024,
            "maxPreemptCount" : 0,
            "supportSelectBatch" : false,
            "maxQueueDelayMicroseconds" : 5000
        }
    }
}

启动服务

启动命令也比较简单

cd /usr/local/Ascend/mindie/latest/mindie-service
nohup ./bin/mindieservice_daemon > /workspace/output.log 2>&1 &

这里最好是把启动服务的命令挂后台,这样能查看日志,否则关闭终端后,虽然服务不掉,但是日志是找不到了,不方便debug

执行命令后,首先会打印本次启动所用的所有参数,然后直到出现以下输出:

Daemon start success!

则认为服务成功启动。

到这里可以认为是部署成功了,还有最后一步的测试:

curl -X POST http://{ip}:{port}/v1/chat/completions \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d '{
       "model": "DeepSeek-R1",
       "messages": [{
         "role": "user",
         "content": "你好"
       }],
       "max_tokens": 20,
       "presence_penalty": 1.03,
       "frequency_penalty": 1.0,
       "seed": null,
       "temperature": 0.5,
       "top_p": 0.95,
       "stream": true
     }'


注意,官方教程里是没有开启HTTPS通信,后续调用的时候用http,而不是https

使用https需要配置开启HTTPS通信所需服务证书、私钥等证书文件

以上能看到输出,就算是部署成功了

最后是适配OpenAI式的推理接口,可以参考

https://www.hiascend.com/document/detail/zh/mindie/10RC3/mindieservice/servicedev/mindie_service0076.html

有些槽点不得不提:

整个部署流程基本按照官方教程来的,但是一步一坑,各种稀奇古怪的问题,主要还找不到日志,容器里的目录翻了一遍,没有几个能看到实质性报错的内容,一般可以从/root/mindie下找到一些。 网上也很少能搜到对应的问题,部署帖子如果能有个讨论的空间就好了,方便避坑

另外就是,这教程写的有些地方对不上(可能是我操作不对),很奇怪。比如测试的目录,刚开始很困惑,检查了数遍才在另外的目录下找到

还有一些问题,排查不出来,最后找华为老师解决的,还是很感谢快速的支持,希望国产越来越好。

部署问题,加载tokenizer失败 解决方式:检查tokenizer.json 文件是否和官网一致,并且检查一下权限,是否能正常读取 


还遇到一个问题,比如下面这个 

 

只看日志,好像也看不出是什么原因,最终的解决方案是:升级驱动! 

有类似问题是hccn 导致的,升级到24.1.0很多问题就自然的解决了,遇到难以解决的问题,不要怀疑自己.. 

cann 不用升级,只需升级昇腾NPU固件和驱动 

选择欧拉系统,注意,这里可以选择800I A2推理服务器,推理速度更快 

下载完这两个文件,正常按照流程安装即可 

https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/800alpha003/softwareinst/instg/instg_0004.html?Mode=PmIns&OS=Ubuntu&Software=cannToolKit

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅