在ModelArts Studio(MaaS)创建模型
MaaS提供了基于昇腾云算力适配的开源大模型(DeepSeek、通义千问等),您可以使用这些基础模型,结合自定义的模型权重文件(权重类文件、词表类文件和配置类文件),创建个人专属的模型。创建成功的模型可以进行调优、压缩、推理等操作。
场景描述
在当今数字化时代,人工智能应用愈发广泛。许多开发者和研究人员期望拥有个性化的大模型,用于各种特定场景,例如开发智能客服提升服务效率、辅助代码写作等。通常情况下,从头训练一个大模型需要大量的时间、计算资源和资金。多数开发者难以承担从头训练大模型的高昂成本,且技术门槛极高,涉及复杂的算法优化、海量数据处理等难题。
即使选择对开源模型进行微调,实际操作过程中仍存在阻碍,例如模型权重文件格式兼容性问题频发、本地训练的PyTorch权重文件与云平台不兼容,导致模型无法加载、不同模型的参数配置差异大等。
MaaS基于昇腾云算力适配开源大模型,推出预置模型+自定义权重的全流程方案:
- 极简操作,快速适配:支持直接上传Hugging Face标准格式的权重文件,平台自动完成与昇腾芯片的算力适配,无需编写额外适配代码。
- 模板化配置,即开即用:内置DeepSeek、通义千问、百川、ChatGLM、Llama等主流模型的配置模板,用户无需手动调整复杂参数,大幅缩短模型开发周期。
- 弹性算力,高效运行:提供灵活的算力资源按需分配机制,可根据模型规模和业务需求动态调整算力,为业务高效运行提供强大保障。
为什么要创建我的模型
MaaS模型广场提供了丰富的基础模型,您可以直接使用这些模型进行在线体验、部署模型服务等操作。当基础模型无法满足个性化需求时,您可以基于模型广场的模型创建专属的个性化模型,以实现更优的效果,同时便于版本管理和持续优化。
- 满足个性化需求:MaaS支持结合自定义权重文件,基于昇腾云适配的开源模型创建个人专属模型。模型广场预置模型是通用的,难以契合所有用户的特定需求,如企业需要将大模型应用于特定业务场景,预置模型因缺乏针对性难以满足需求,自定义模型可以凭借定制化权重文件实现个性化功能。
- 实现更好的效果:在某些复杂场景中,模型广场预置模型的表现可能不尽人意。例如在专业领域的对话问答、代码生成等场景,通过创建个人模型并修改权重配置,能优化模型运行效果,在专业任务处理上比预置模型更具优势。
- 便于版本管理和优化:MaaS提供模型版本管理功能,一个模型最多可支持创建10个版本。创建个人模型后,您可以通过新增版本不断优化模型,提升可追溯性。
计费说明
创建模型本身不收费,但使用过程中涉及的OBS存储、计算等资源会产生费用,详情请参见计费概述。
约束限制
- 用于生成专属模型的模型权重文件需要满足Hugging Face上的对应模型的文件格式要求。
- 模型权重文件夹下包括权重类文件、词表类文件和配置类文件。
- 可以使用transformers的from_pretrained方法对模型权重文件夹进行加载。
前提条件
已注册华为账号并开通华为云,详情请见注册华为账号并开通华为云。
步骤一:准备权重配置文件

如果Hugging Face网站打不开,请在互联网上搜索解决方案。
(可选)步骤二:修改权重配置文件
当选择ChatGLM3-6B、GLM-4-9B、Qwen-7B、Qwen-14B、Qwen-72B、Baichuan2-7B、Baichuan2-13B、Llama2-7B、Llama2-13B和Llama2-80B基础模型(名字必须一致)创建模型时,建议对权重配置参数进行优化调整,以提升模型的预测精度和输出质量,从而构建更贴合具体业务需求的定制化模型。修改后的权重文件要更新至OBS桶中。
Qwen2.5系列模型无需修改权重即可部署。关于如何部署模型服务,请参见使用ModelArts Studio(MaaS)部署模型服务。
- ChatGLM3-6B、GLM-4-9B
修改文件“tokenization_chatglm.py”。
- 第一处
# Load from model defaults assert self.padding_side == "left"
修改为
# Load from model defaults # assert self.padding_side == "left"
- 第二处
if needs_to_be_padded: difference = max_length - len(required_input) if "attention_mask" in encoded_inputs: encoded_inputs["attention_mask"] = [0] * difference + encoded_inputs["attention_mask"] if "position_ids" in encoded_inputs: encoded_inputs["position_ids"] = [0] * difference + encoded_inputs["position_ids"] encoded_inputs[self.model_input_names[0]] = [self.pad_token_id] * difference + required_input
修改为
if needs_to_be_padded: difference = max_length - len(required_input) if "attention_mask" in encoded_inputs: encoded_inputs["attention_mask"] = encoded_inputs["attention_mask"] + [0] * difference if "position_ids" in encoded_inputs: encoded_inputs["position_ids"] = encoded_inputs["position_ids"] + [0] * difference encoded_inputs[self.model_input_names[0]] = required_input + [self.pad_token_id] * difference
- 第一处
- Qwen-7B、Qwen-14B和Qwen-72B
- 第一处,修改文件“modeling_qwen.py”。
原内容
SUPPORT_BF16 = SUPPORT_CUDA and torch.cuda.is_bf16_supported() SUPPORT_FP16 = SUPPORT_CUDA and torch.cuda.get_device_capability(0)[0] >= 7
修改为
SUPPORT_BF16 = SUPPORT_CUDA and True SUPPORT_FP16 = SUPPORT_CUDA and True
- 第二处,修改文件“tokenizer_config.json”。
在文件中增加内容
chat_template = {% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content']}}{% if (loop.last and add_generation_prompt) or not loop.last %}{{ '<|im_end|>' + '\n'}}{% endif %}{% endfor %}{% if add_generation_prompt and messages[-1]['role'] != 'assistant' %}{{ '<|im_start|>assistant\n' }}{% endif %}
- 第一处,修改文件“modeling_qwen.py”。
- Baichuan2-7B和Baichuan2-13B
在文件“tokenizer_config.json”中增加如下内容。
chat_template = {% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content']}}{% if (loop.last and add_generation_prompt) or not loop.last %}{{ '<|im_end|>' + '\n'}}{% endif %}{% endfor %}{% if add_generation_prompt and messages[-1]['role'] != 'assistant' %}{{ '<|im_start|>assistant\n' }}{% endif %}
- Llama2-7B、Llama2-13B和Llama2-80B
在文件“tokenizer_config.json”中增加如下内容。
chat_template = {% if messages[0]['role'] == 'system' %}{% set loop_messages = messages[1:] %}{% set system_message = messages[0]['content'] %}{% else %}{% set loop_messages = messages %}{% set system_message = false %}{% endif %}{% for message in loop_messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if loop.index0 == 0 and system_message != false %}{% set content = '<<SYS>>\\n' + system_message + '\\n<</SYS>>\\n\\n' + message['content'] %}{% else %}{% set content = message['content'] %}{% endif %}{% if message['role'] == 'user' %}{{ bos_token + '[INST] ' + content.strip() + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ ' ' + content.strip() + ' ' + eos_token }}{% endif %}{% endfor %}
步骤三:将权重配置文件上传至OBS桶
关于如何将权重文件存储到OBS桶,请参见上传概述。
单次上传本地文件到OBS的总大小不能超过5GB。如果需要上传超过5GB的大对象,可以使用OBS Browser+、obsutil工具上传,或使用OBS SDK及API的多段接口上传,上限为48.8TB,详情请参见如何上传超过5GB的大对象。
步骤四:创建我的模型
- 登录ModelArts Studio(MaaS)控制台,在顶部导航栏选择目标区域。
- 在左侧导航栏,单击“我的模型”。
- 在“我的模型”页面右上角,单击“创建模型”。
- 在“创建模型”页面,配置相关参数。
表1 创建模型参数说明 参数
说明
来源模型
MaaS提供基于昇腾云算力适配的开源大模型供您使用。单击“选择基础模型”,在弹窗中选择模型,单击“确定”。
关于模型系列的详细介绍,请参见表2。
模型名称
自定义模型名称。支持1~64位,以中文、大小写字母开头,只包含中文、大小写字母、数字、下划线(_)、中划线(-)和(.)。
描述
自定义模型简介。最大支持100字符。
权重设置与词表
默认选择“自定义权重”。权重文件指的是模型的参数集合。
自定义权重存储路径
单击“自定义权重存储路径”右侧的文件图标,选择步骤三存放模型权重文件的OBS路径(必须选择到模型文件夹),然后单击“确定”。
表2 模型系列介绍 模型系列
模型类型
应用场景
支持语言
支持地域
百川
文本生成
对话问答、数学推理、代码生成、翻译
中文、英文
西南-贵阳一、华东二
ChatGLM
ChatGLM3
文本生成
对话问答、数学推理、代码生成
中文、英文
西南-贵阳一、华东二
GLM-4
文本生成
对话问答、长文本推理、代码生成
中文、英文
西南-贵阳一、华东二
DeepseekCoder
文本生成
对话问答、文本推理
中文、英文
西南-贵阳一、华东二
DeepSeek
DeepSeek-R1
文本生成
对话问答、文本生成推理
中文、英文
西南-贵阳一、华北-乌兰察布一
DeepSeek-V3
文本生成
对话问答、翻译
中文、英文
西南-贵阳一、华北-乌兰察布一
Llama2
文本生成
对话问答、智能创作、文本摘要
英文
西南-贵阳一、华东二
Llama3
文本生成
对话问答、智能创作、文本摘要
英文
西南-贵阳一、华东二
Llama3.1
文本生成
对话问答、智能创作、文本摘要
英文
西南-贵阳一、华东二
通义千问
Qwen
文本生成
对话问答、智能创作、文本摘要、翻译、代码生成、数学推理
中文、英文
西南-贵阳一、华东二
QwQ
文本生成
对话问答
英文
西南-贵阳一
通义千问1.5
文本生成
代码生成、数学推理、对话问答
中文、英文
西南-贵阳一、华东二
通义千问2
Qwen2
文本生成
多语言处理、数学推理、对话问答
中文、英文
西南-贵阳一、华东二
Qwen2-VL
图像理解
图像理解、对话问答
中文、英文
西南-贵阳一、华东二
通义千问2.5
Qwen2.5
文本生成
多语言处理、数学推理、对话问答
中文、英文
西南-贵阳一、华东二
Qwen2.5-VL
图像理解
图像理解、对话问答
中文、英文
西南-贵阳一
Yi
文本生成
代码生成、数学推理、对话问答
中文、英文
西南-贵阳一、华东二
- 参数配置完成后,单击“创建”,创建自定义模型。
在模型列表,当模型“状态”变成“创建成功”时,表示模型创建完成。
步骤五:查看我的模型详情
模型创建完成后,您可以在“模型详情”页面查看模型的基本信息和版本信息。
在“我的模型”页面,单击目标模型名称,进入模型详情页面,查看模型的“基本信息”和“我的版本”。

- 基本信息:可以查看模型名称、模型ID、模型类型、来源模型、创建时间等信息。
- 我的版本:可以查看已创建的模型版本,单击版本号进入“版本详情”页面,可以查看各个模型版本的详细信息和任务记录。
图2 版本详情
- 版本信息:可以查看模型名称、状态、创建时间、基本模型及版本、权重与词表路径等信息。
- 任务记录:可以查看任务名称、作业类型、状态、创建时间等信息。
(可选)步骤六:新增模型版本
为了提升模型的可追溯性和优化效率,MaaS提供了模型版本管理功能。通过此功能,您能够创建模型的新版本。一个模型最多支持创建10个版本。
- 在ModelArts Studio(MaaS)控制台左侧导航栏,单击“我的模型”进入模型列表。
- 单击目标模型名称,进入模型详情页面。
- 在“我的版本”区域,单击“新增版本”。
- 在“新增版本”页面,配置模型新版本的参数。
表3 新增模型版本参数说明 参数
说明
新版本号
系统自动编号,不可修改。
版本描述
自定义模型版本简介。最大支持100字符。
选择基础模型版本
选择基础模型的版本。
选择权重路径
单击文件图标,选择步骤三存放模型权重文件的OBS路径(必须选择到模型文件夹),然后单击“确定”。
- 配置完成后,单击“确定”,新增模型版本。
在版本列表,当新增版本的“状态”变成“创建成功”时,表示模型新版本创建完成。
(可选)步骤七:删除我的模型
当不需要模型时,可以进行删除操作。删除操作无法恢复,请谨慎操作。
- 在ModelArts Studio(MaaS)控制台左侧导航栏,选择“我的模型”进入模型列表。
- 在模型列表,单击目标模型名称,进入“模型详情”页面。
- 在“我的版本”区域,单击版本号,进入“版本详情”页面。查看该版本的模型“任务记录”是否为空。
- 确认该模型的各个版本的“任务记录”都为空。
当模型存在任务记录会删除失败。
- 在“模型详情”页面,单击右上角的“删除”,在弹窗中输入“DELETE”,单击“确定”,删除模型。
当模型列表未显示该模型,表示删除成功。
后续操作
- 当模型创建成功后,您可以对模型进行调优或压缩,获得更合适的模型。具体操作,请参见使用ModelArts Studio(MaaS)调优模型或使用ModelArts Studio(MaaS)压缩模型。
- 您可以将创建成功的模型进行部署,并调用模型服务。具体操作,请参见调用ModelArts Studio(MaaS)部署的模型服务和调用ModelArts Studio(MaaS)部署的模型服务。
常见问题
创建模型时,报错“Modelarts.6206:Key fields describing the model structure are missing from config.json, or their values are inconsistent with standard open source”如何处理?
您可以按照以下步骤进行排查:
- 查看config.json文件是否存在。
- 查看config.json文件格式是否符合要求。关于格式要求,请参见Hugging Face官网。