You need to enable JavaScript to run this app.
导航
典型场景2【模型部署】私有模型部署
最近更新时间:2025.04.28 18:06:50首次发布时间:2025.04.28 18:06:50
我的收藏
有用
有用
无用
无用

说明

场景说明:以客户将【私有模型】通过TKS密钥加密的方式上传到TOS并发布到PCC模型广场后,完成模型服务部署,并提供密文接口供模型推理服务联调测试。

整体流程说明

Image

1.准备工作

步骤1:物理资源准备

准备一台128GB以上内存物理机器,并安装好Python3环境(建议使用Anaconda环境,避免依赖冲突)。

步骤2:Jeddak Secure Model SDK下载与安装

  1. 安装Jeddak Secure Model SDK(点此下载),此SDK的功能包含模型压缩、模型加密、模型上传和基线计算等能力。
  2. 执行以下脚本,安装
export VERSION=0.1.7.28
pip3 install bytedance.jeddak_secure_channel-${VERSION}-py3-none-any.whl

步骤3:脚本参数准备与执行

  1. 准备私有模型,按照如下目录进行组织,
    1. 文件夹名称为模型的名称,例如【Qwen32B
    2. 文件夹内文件为明文模型文件。路径【model_path
  1. 准备将模型上传的TOS桶的名称,按照如下进行:
    1. 登录火山引擎,进入对象存储,创建对象存储TOS的桶,并记住【bucket_name】。创建存储桶的时候需选择华北2(北京区域),对应的region为cn-beijing。
  1. 在火山引擎页面查看账号ID,如下图所示,并记录此ID为【app_id】。
  1. 点击火山账号,选择“API访问密钥”,新建该账号的【AK】、【SK】。
  1. 脚本源码
from bytedance.jeddak_secure_model.model_encryption import EncryptionConfig, JeddakModelEncrypter

if __name__ == "__main__":
    model_path = "/root/pcc/Qwen32B"  # 模型的文件夹路径 【model_path】
    bucket_name = "llmmodels"  # 创建TOS的存储桶 【buck_name】
    # 火山账号的ak sk
    volc_ak = "your access key" #【AK】
    volc_sk = "your secret key" #【SK】
    region = "cn-beijing" # 存储桶的区域,对应的映射关系见步骤5
    endpoint = "tos-cn-beijing.volces.com"
   
    ring_id = ""   # 选填,如已有密钥环,在此填写密钥环ID;如未填,则会根据`ring_name` 自动创建密钥环
    ring_name = "Qwen32B-Ring"  # 自定义密钥环名称【自定义修改】
    ring_desc = "Ring for Qwen32B" # 添加对密钥环的描述【自定义修改】
    key_name = "Qwen32BKey"  # 自定义密钥名称【自定义修改】
    key_desc = "Key for Qwen32B"   # 添加对可信密钥的描述【自定义修改】
    app_id = "your account id"  # 火山页面查看自己账号的【app_id】
    service = "pcc" 
    
    # 目前参数传空的
    config = EncryptionConfig("", "")
    encrypter = JeddakModelEncrypter(config)

    res = encrypter.encrypt_model_and_upload(
        model_path=model_path,
        bucket_name=bucket_name,
        volc_ak=volc_ak,
        volc_sk=volc_sk,
        region=region,
        endpoint=endpoint,
        ring_id=ring_id,
        ring_name=ring_name,
        ring_desc=ring_desc,
        key_name=key_name,
        key_desc=key_desc,
        app_id=app_id,
        service=service
    )

    print(res)
  • 脚本执行
python3 sdk.py
##输出结果如下,用于下一步
# ring_id  加密模型的可信密钥环ID
# key_id  加密模型的可信密钥ID
# baseline  加密模型的基线值
# model_name  加密模型的名称

步骤4:结果获取

说明

获取的结果,具体如下:

  • 自动创建的可信密钥环与可信密钥
    • ring_id 加密模型的可信密钥环ID
    • key_id 加密模型的可信密钥ID
  • 私有模型名称与加密后的的基线值
    • baseline 加密模型的基线值
    • model_name 加密模型的名称
  • 私有模型上传路径

model_path (TOS中的路径信息)

  • 脚本结果:
# ring_id  加密模型的可信密钥环ID
# key_id  加密模型的可信密钥ID
# baseline  加密模型的基线值
# model_name  加密模型的名称
  • 模型路径:获取前往火山引擎官网的对象存储获取通过SDK自动上传的加密模型存储路径。密文模型一般会被切分为多个part,点击首个part的「详情」,获取该part对应的URL为https://llmmodels.tos-cn-beijing.volces.com/model_name/enc-part-00000,将此路径的后缀“enc-part-00000”去掉,则得到了完整密文模型对应的URL。

Image
Image

步骤5:给加密模型的密钥配置远程证明策略

  • 创建证明策略
    • 进入【远程证明服务】模块,点击「创建证明策略」按钮;字段如下:
      • 策略名称,自定义,例如:test
      • 策略描述,自定义;
      • 选择对应的加密模型,策略内容自动变化,提交成功后可在策略列表查看创建成功的策略数据;

Image
Image

  • 证明策略配置
    • 进入【可信密钥服务】模块,选择步骤4【ring_id】对应的密钥环,点击进入后,选择步骤4【key_id】的密钥;
    • 点击【更新证明策略】,选择策略名称为【test】的策略;

2.模型发布与应用部署

步骤1:加密模型发布

  • 进入【模型管理服务】模块,点击「发布模型」按钮
  • 填写相关字段信息后,提交即可加密模型发布。字段说明如下:
    • 模型名称,建议填写【准备工作】中输出的【model_name】;
    • 模型版本,自定义;
    • 模型描述,自定义;
    • 加密密钥,选择【准备工作】中输出的【key_id】;
    • 基线值,填写【准备工作】中的【baseline】;
    • TOS地址,填写【准备工作】中的【model_path】。

Image

步骤2:加密模型部署

  • 进入【模型管理服务】模块,选择刚刚已发布且处于【待部署】状态的模型所在列,点击「部署」按钮,
  • 选择PCC规格、推理框架和实例个数(对应购买CU的个数)等,PCC将根据默认参数进行部署。

说明
特别说明:不同尺寸模型,部署耗时会有差异。具体建议尺寸如下:

PCC规格

说明

基础版

支持小尺寸的模型,如1.5B,具体以实际验证为准。

高级版

支持中尺寸的模型,如32B,具体以实际验证为准。

旗舰版

支持大尺寸的模型,如DeepSeek R1-671B(满血版),具体以实际验证为准。

Image

  • 部署成功后,可看到模型部署状态变化,如下图:

Image

步骤3:加密模型测试

  • 进入【模型管理服务】模块,选择刚刚已部署成功的模型所在列,点击「测试」按钮,对模型可用性做检测,检测通过则状态从【未测试】更新为【测试成功】。

3.推理服务联调

{
  "ra_url": "open.volcengineapi.com",
  "ra_service_name": "替换成机密容器界面的service-name",
  "ra_policy_id": "9eb6b259-a3fe-580c-90c5-ef20a92309c8",
  "ra_uid": "替换成自己火山账号的uid",
  "bytedance_top_info": "{\"ak\": \"按照实际情况填写\", \"sk\": \"按照实际情况填写\", \"service\": \"pcc\"}",
  "attest_interval": 3600
}
  • 执行以下命令
export ip={替换为你的模型服务地址}
export model_name={替换为合适的模型名称}
python3 completion_cipher.py