AI子系统的大语言模型主要使用deb包进行管理和安装,本文主要根据deb包的使用规范进行介绍,其他构建方式可将本文作为参考。
前置规范
大语言模型使用时所有文件需要安装一个文件夹内(大模型主文件夹),此文件夹需要存储在特定目录下:/opt/appdata/kylin-ai/model-repository/,因此我们在进行打包时需要以此为目标安装目录进行部署。
1. 准备工作
AI子系统的大语言模型的打包涉及到4组文件,分别是模型文件、模型配置文件、模型描述文件、debian规范文件,模型文件又根据用户实际需要可能衍生出base文件和lora文件等(可以只有基座模型),此处统一归类为模型文件,准备上述文件需要遵守命名规范,准备完成后目录结构如下图:
ai-kylin-demo-model-thirdparty_1.0.0
├── debian
│ ├── changelog
│ ├── control
│ ├── copyright
│ ├── install
│ ├── rules
│ └── source
│ ├── format
│ └── options
└── llm_demo_0.1
├── 1
│ ├── lora_modelA_0.1.gguf
│ ├── lora_modelB_0.1.gguf
│ └── base_model_0.1.gguf
├── config.pbtxt
└── model_description.yaml
1.1 文件介绍
debian规范文件: 记录debian打包规范信息的文件夹,必须命名为debian,如上图,需要注意的是copyright文件中需要指定模型文件License,例如:
Files: llm_demo_0.1/1/base_model_0.1.gguf
Copyright: 2025, Su Haotian
License: BSD-2-clause
1.1.1 关键配置文件 (debian/ 目录)
debian/ 目录是 deb 包的“蓝图”,其中几个文件至关重要:
control: 包的元数据核心。
Source, Maintainer, Build-Depends 等)。Package)Depends) 和 编译时依赖 (Build-Depends)。changelog: 版本控制与合规性。
1.0.0-0k1)。rules: 构建脚本。
dh 命令,它会自动化大部分构建、安装和打包流程。install: 文件安装规则。
postinst (安装后)、prerm (卸载前) 等,用于执行服务启停、配置生成等操作。大模型主文件夹:文件夹名分为三个部分,各个部分使用””连接,每个部分内不允许存在””,第一个部分必须为”llm_”,第二个部分应为模型厂商名或模型名等参数,第三个部分可以是版本号或量化方法等具体信息,如”llm_demo_0.1”,除debian文件外都存储在此文件夹中
模型目录:存放基座模型和lora模型,必须命名为”1”,如上图
模型文件:模型文件本地及lora模型等,存储在模型目录下,如上图
模型配置文件:设置模型推理时使用的基本参数信息,使用者为推理引擎,必须命名为config.pbtxt,如上图
模型描述文件:记录模型在业务应用中的管理信息,使用者为上层应用,必须命名为model_description.yaml,如上图
1.2 命名规范
模型包名:模型deb包名必须以“ai-kylin-”开头,以"-model-thirdparty"结尾
模型文件:基座模型不做要求,lora模型应使用lora_开头,并将上述文件存储在模型目录中
模型配置文件:如前述,必须使用config.pbtxt作为文件名
模型描述文件:如前述,必须使用model_description.yaml作为文件名
debian规范文件:如前述,文件夹必须命名为debian
1.3 文件内容
模型文件:大语言模型权重等数据,存储在名为”1”的文件夹内,文件内容根据模型发行商自行决定,此处略。
模型配置文件:可参考如下附件
backend: "llamacpp"
#max_batch_size: 8
#dynamic_batching {
# max_queue_delay_microseconds: 5000000
#}
model_transaction_policy {
decoupled: True
}
input [
{
name: "request_type"
data_type: TYPE_INT32
dims: [ -1 ]
},
{
name: "request_id"
data_type: TYPE_STRING
dims: [ -1 ]
optional: true
},
{
name: "text_input"
data_type: TYPE_STRING
dims: [ -1 ]
},
{
name: "temperature_input"
data_type: TYPE_FP32
dims: [ -1 ]
optional: true
},
{
name: "top_k_input"
data_type: TYPE_INT32
dims: [ -1 ]
optional: true
},
{
name: "top_p_input"
data_type: TYPE_FP32
dims: [ -1 ]
optional: true
},
{
name: "n_keep_input"
data_type: TYPE_INT32
dims: [ -1 ]
optional: true
},
{
name: "n_predict_input"
data_type: TYPE_INT32
dims: [ -1 ]
optional: true
},
{
name: "cache_prompt_input"
data_type: TYPE_BOOL
dims: [ -1 ]
optional: true
},
{
name: "stop_input"
data_type: TYPE_STRING
dims: [ -1 ]
},
{
name: "stream_input"
data_type: TYPE_BOOL
dims: [ -1 ]
},
{
name: "lora_scale_input"
data_type: TYPE_FP32
dims: [ -1 ]
optional: true
}
]
output [
{
name: "text_output"
data_type: TYPE_STRING
dims: [ -1 ]
},
{
name: "token_output"
data_type: TYPE_INT32
dims: [ -1 ]
},
{
name: "lora_scale_output"
data_type: TYPE_STRING
dims: [ -1 ]
},
{
name: "metrics_output"
data_type: TYPE_STRING
dims: [ -1 ]
}
]
instance_group [
{
count: 1
kind: KIND_CPU
}
]
### general
# number of threads to use during generation(0 = max)
parameters: {
key: "n_threads"
value: {
string_value: "4"
}
}
# number of tokens to predict, n_predict_input <= n_predict (default: -1, -1 = infinity, -2 = until context filled)
parameters: {
key: "n_predict"
value: {
string_value: "1024"
}
}
# size of the prompt context (default: 0, 0 = loaded from model)
parameters: {
key: "n_ctx"
value: {
string_value: "4096"
}
}
# logical maximum batch size (default: 2048)
parameters: {
key: "n_batch"
value: {
string_value: "512"
}
}
### parallel
# number of parallel sequences to decode (default: 1)
parameters: {
key: "n_parallel"
value: {
string_value: "1"
}
}
# enable continuous batching (a.k.a dynamic batching) (default: enabled)
parameters: {
key: "cont_batching"
value: {
string_value: "true"
}
}
### model
# model path (default: )
parameters: {
key: "model"
value: {
string_value: "/opt/appdata/kylin-ai/model-repository/llm_demo_0.1/1/base_model_0.1.gguf"
}
}
parameters: {
key: "metrics_period_ms"
value: {
string_value: "200"
}
}
parameters: {
key: "lora"
value: {
string_value: "/opt/appdata/kylin-ai/model-repository/llm_demo_0.1/1/lora_modelA_0.1.gguf3;/opt/appdata/kylin-ai/model-repository/llm_Qwen-2.5-3b_1.0/1/llm_demo_v0.1/1/lora_modelB_v0.1.gguf"
}
}
parameters: {
key: "lora_init_without_apply"
value: {
string_value: "false"
}
}
# 0:no decrypt, 1:tongyi
parameters: {
key: "model_decrypt_type"
value: {
string_value: "1"
}
}
# llamacpp debug
parameters: {
key: "llamacpp_verbose"
value: {
string_value: "false"
}
}
需要注意的是:
**模型描述文件:**内容参考附件,根据实际需要进行修改
model_deb_name: "ai-kylin-demo-model-thirdparty" #模型包名
model_name: "llm_demo_0.1" #模型名,由模型管理者指定,同时也是模型在kytensor model-repository下的文件夹名
model_display_name: "某品牌(demo_0.1)" #模型名,对外显示用
model_capability: ["llm"] #模型能力,大语言模型需要设为llm,供上层识别
model_is3rdModel: "true" #是否第三方
model_internal: "false" #用于决定此模型是否在modelInfo中呈现
brand: "某品牌" #大语言模型厂商
model_supports_thinking: "false" #是否支持思考
model_supports_thinking_toggle: "false" #思考功能是否支持开启关闭
model_is_private: "true" #模型是否对所有应用可见
others_info: "{\"lora\": [\"GET_LABEL\",\"INTENT\"]}" #可选,其他信息,此处用于标明本模型提供的lora模型列表,目前仅支持GET_LABEL和INTENT,应与模型配置文件中的lora参数相对应,此处为json格式,lora字段为数组时生效
debian目录:参考标准debian规范
2. 打包
按照上一章的描述准备构建如下目录和所需文件
ai-kylin-demo-model-thirdparty_1.0.0
为确保模型及相关组件(如推理服务、依赖库、配置文件等)能够被安全、可靠地分发和部署,我们采用 Debian (.deb) 软件包格式进行封装。以下是打包的核心流程与规范要点:
2.1 核心工具链
dpkg: 底层包管理工具,用于直接安装/卸载 .deb 文件,但不自动处理依赖。apt: 高级包管理工具,可从软件源自动下载、安装软件包并智能解决依赖关系,是用户安装的主要方式。dh-make & devscripts: 用于初始化和构建 deb 包的开发工具集。2.2打包前准备
在您的模型项目源码根目录下,执行以下步骤:
sudo apt install dh-make devscripts
在这个目录中执行
# 以 native 包为例(适合内部快速迭代)
dh_make -p ai-kylin-demo-model-thirdparty_1.0.0 --native
# 执行命令后,显示如下信息:Type of package: (single, indep, library, python) [s/i/l/p]?
# 备注:此处选择i生成全架构deb模型包
# s: single 生成一个二进制包(architecture-dependent),即包含编译后的程序,针对特定架构。
# i: indep 生成一个架构无关的二进制包(Architecture: all),比如脚本、文档、数据等。
# l: library 生成一个库包,通常用于共享库,会生成两个包:一个运行时库包和一个开发包。
# p: python 生成Python包,特殊处理Python模块。
# 删除debian目录不必要的文件。
rm debian/*.ex debian/*.EX
在debian目录下修改copyright文件内容(按照准备工作-文件介绍-debian规范文件修改)
在debian目录下新增install文件(按照关键配置文件 (debian/ 目录)-install文件按照规则修改)
2.3 构建与验证
# 在源码根目录执行
debuild -us -uc
.deb 文件将生成在上一级目录。sudo dpkg -i ai-kylin-demo-model-thirdparty_1.0.0.deb 安装并检查功能。dpkg -L ai-kylin-demo-model-thirdparty 查看已安装的文件列表。