国家超算互联网平台:模型服务体验与本地部署推理实践

avatar
作者
猴君
阅读量:0

目录


前言

在当今快速发展的人工智能领域,高性能计算平台的重要性不言而喻。国家超算互联网平台作为其中的重要一环,不仅提供了强大的计算资源,还通过其丰富的模型服务和便捷的操作体验,吸引了众多技术爱好者和专业人士的关注。本文将深入探讨该平台的显卡选用、模型服务体验以及本地模型推理体验,带您全方位了解这一前沿技术平台。
在这里插入图片描述

一、平台显卡选用

在进行深度学习和大规模数据处理时,显卡的选择至关重要。国家超算互联网平台提供了多种显卡选项,以满足不同用户的需求。
地址:https://www.scnet.cn/ui/mall/search/goods?common1=RESOURCE&common2=RESOURCE-AI

1、显卡选择

由于1分钱的显卡被抢占完了,我们选择了“NVIDIA L20 显存48GB PCIE”,这款显卡以其强大的计算能力和充足的显存,能够轻松应对复杂的模型训练和数据处理任务。(由于显卡是按小时收费,非常方便,不用的时候关机即可)
在这里插入图片描述

2、镜像选择

在显卡选择完成后,用户可以根据自己的需求选择基础镜像或平台提供的免费模型镜像。本次体验中,我们选择了“jupyterlab-stable-diffusion-normal-webui”镜像,它为用户带来了便捷的模型部署和运行体验。
在这里插入图片描述

3、实例列表

选择完服务器和镜像后,选择完服务器和镜像后,用户将被引导至实例列表,这里可以查看和管理所有创建的实例。
在这里插入图片描述

4、登录服务器

通过点击服务列表中的“JupyterLab”,用户可以自动登录服务器,开始模型的部署和运行。
在这里插入图片描述

二、平台模型服务【Stable Diffusion WebUI】体验

登录服务器后,会自动打开run.ipynb文件;可进行Stable Diffusion WebUI 快速体验

1、模型运行

在JupyterLab中,用户可以直接执行以下代码来启动Stable Diffusion WebUI:

#启动 !python StableDiffusionWebui/launch.py --enable-insecure-extension-access --port 1115  --server-name '0.0.0.0' 

代码执行如下:
在这里插入图片描述

执行后,本地访问地址为:http://0.0.0.0:1115,用户可以通过此地址访问和体验模型。

2、端口映射配置

通过实例列表中的“访问自定义服务”设置端口映射,填入端口1115,用户便可以访问模型的Web界面。
在这里插入图片描述
配置映射端口
在这里插入图片描述

3、体验测试

模型运行后UI界面访问如下:
在这里插入图片描述

1)平台提供的模型镜像,整个启动运行过程快、非常便捷,几分钟内就能体验模型效果
2)模型运行效果很快,基本上都在2秒左右就能生成结果
3)模型效果测试也还不错,除了画质不是很好,生成的结果和提示词预期基本相符

三、本地模型【Qwen1.5-7B-Chat】推理体验

国家超算互联网平台不仅提供了模型镜像服务,还支持本地模型的推理体验。用户可以直接使用平台公共区域已经下载好的模型;或者自行下载模型,进行本地推理;平台公共区域“/root/public_data/llm_model”提供有多个开源模型。
在这里插入图片描述

1、安装依赖

首先,用户需要安装必要的依赖库,如modelscope:

#安装modelscope !pip install modelscope 

2、加载模型

接下来,加载本地的语言模型和分词器:

# 导入所需的库和模块 from modelscope import AutoModelForCausalLM, AutoTokenizer # 设置设备为GPU(如果有的话) device = "cuda" # the device to load the model onto  # 从预训练模型中加载大型语言模型 model = AutoModelForCausalLM.from_pretrained(     "/root/public_data/llm_model/Qwen1.5-7B-Chat",     device_map="auto" )  # 从预训练模型中加载相应的分词器 tokenizer = AutoTokenizer.from_pretrained("/root/public_data/llm_model/Qwen1.5-7B-Chat") 

需要注意的是,如果遇到模型加载报错如下,可能需要升级Transformer版本:

---------------------------------------------------------------------------KeyError                                  Traceback (most recent call last) Cell In[5], line 4      1 from modelscope import AutoModelForCausalLM, AutoTokenizer      2 device = "cuda" # the device to load the model onto----> 4 model = AutoModelForCausalLM.from_pretrained(      5     "/root/public_data/llm_model/Qwen1.5-7B-Chat",      6     device_map="auto"      7 )      8 tokenizer = AutoTokenizer.from_pretrained("/root/public_data/llm_model/Qwen1.5-7B-Chat")  File /opt/conda/lib/python3.10/site-packages/modelscope/utils/hf_util.py:113, in get_wrapped_class.<locals>.ClassWrapper.from_pretrained(cls, pretrained_model_name_or_path, *model_args, **kwargs)    110 else:    111     model_dir = pretrained_model_name_or_path--> 113 module_obj = module_class.from_pretrained(model_dir, *model_args,    114                                           **kwargs)    116 if module_class.__name__.startswith('AutoModel'):    117     module_obj.model_dir = model_dir  File /opt/conda/lib/python3.10/site-packages/transformers/models/auto/auto_factory.py:456, in _BaseAutoModelClass.from_pretrained(cls, pretrained_model_name_or_path, *model_args, **kwargs)    453 if kwargs.get("torch_dtype", None) == "auto":    454     _ = kwargs.pop("torch_dtype")--> 456 config, kwargs = AutoConfig.from_pretrained(    457     pretrained_model_name_or_path,    458     return_unused_kwargs=True,    459     trust_remote_code=trust_remote_code,    460     **hub_kwargs,    461     **kwargs,    462 )    464 # if torch_dtype=auto was passed here, ensure to pass it on    465 if kwargs_orig.get("torch_dtype", None) == "auto":  File /opt/conda/lib/python3.10/site-packages/transformers/models/auto/configuration_auto.py:957, in AutoConfig.from_pretrained(cls, pretrained_model_name_or_path, **kwargs)    955     return config_class.from_pretrained(pretrained_model_name_or_path, **kwargs)    956 elif "model_type" in config_dict:--> 957     config_class = CONFIG_MAPPING[config_dict["model_type"]]    958     return config_class.from_dict(config_dict, **unused_kwargs)    959 else:    960     # Fallback: use pattern matching on the string.    961     # We go from longer names to shorter names to catch roberta before bert (for instance)  File /opt/conda/lib/python3.10/site-packages/transformers/models/auto/configuration_auto.py:671, in _LazyConfigMapping.__getitem__(self, key)    669     return self._extra_content[key]    670 if key not in self._mapping:--> 671     raise KeyError(key)    672 value = self._mapping[key]    673 module_name = model_type_to_module_name(key) KeyError: 'qwen2' 

主要是Transformer版本过低,需要升级版本

!pip install -U transformers 

重新加载模型,加载成功效果如下:

在这里插入图片描述

3、定义提示消息

定义一个简短的介绍大型语言模型的提示,并构建消息列表:

# 定义一个简短的介绍大型语言模型的提示 prompt = "Give me a short introduction to large language model."  # 构建消息列表,包括系统角色和用户角色的内容 messages = [     {"role": "system", "content": "You are a helpful assistant."},     {"role": "user", "content": prompt} ] 

4、获取model_inputs

使用分词器将消息列表转换为model_inputs:

# 使用分词器将消息列表转换为适合模型输入的格式 text = tokenizer.apply_chat_template(     messages,     tokenize=False,     add_generation_prompt=True )  # 将文本转换为模型输入张量并移动到指定设备上 model_inputs = tokenizer([text], return_tensors="pt").to(device)  model_inputs 

输出:
在这里插入图片描述

5、生成模型输出

根据模型输入的inputs生成模型输出的generated_ids

# 生成模型输出 generated_ids = model.generate(     model_inputs.input_ids,     max_new_tokens=512 ) # 提取生成的ID,去除输入部分 generated_ids = [     output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) ]  generated_ids 

输出:
在这里插入图片描述

6、获取生成结果

对生成的generated_ids,进行解码获取响应结果

# 解码生成的ID为文本,并跳过特殊标记 response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] # 打印生成的响应 print(response) 

输出:

大语言模型(Large Language Model,LLM)是一种人工智能技术,它是一种能够理解和生成人类语言的复杂系统。这种模型通常基于深度学习,特别是基于Transformer架构的神经网络,通过大量的文本数据进行训练,学习语言的语法、词汇、句法和语义规律。  在训练过程中,大语言模型会接收各种类型的文本输入,如书籍、新闻、网页、社交媒体帖子等,然后通过学习这些文本中的模式和上下文关系来理解语言结构。训练的目标是让模型能够生成连贯、准确、具有逻辑性的文本,无论是回答问题、创作故事、撰写代码还是进行对话等。  大语言模型可以分为两类:预训练模型和任务特定模型。预训练模型是在大规模无标签文本上进行训练的通用模型,例如Google的通义千问、OpenAI的GPT-3等,这类模型通常具有较高的泛化能力和语言理解能力,可以适应多种下游任务。任务特定模型则是针对特定任务进行微调的,比如BERT(Bidirectional Encoder Representations from Transformers)和T5(Text-to-Text Transfer Transformer),它们在经过特定领域的数据训练后,可以更好地服务于某个特定领域的问题解答或文本生成。  大语言模型的发展对于自然语言处理、人工智能、机器翻译等领域有着深远的影响,它正在逐步改变我们与计算机交互的方式,并且在不断推动技术进步。然而,也需要注意的是,虽然大语言模型在很多方面表现出色,但它并不完美,有时可能会出现偏见或误解,需要持续优化和完善。 

结语

国家超算互联网平台以其高效计算能力和用户友好的操作体验,为人工智能领域的研究和应用提供了强有力的支持。通过本文的体验和技术解析,我们见证了该平台如何简化模型部署和推理过程,加速了从理论到实践的转变。随着技术的不断进步,该平台有望进一步推动科研创新和产业发展,为人工智能的未来探索提供更多可能性。同时,我们也期待平台能够持续优化,满足日益增长的计算需求,助力构建一个更加智能化的世界。

在这里插入图片描述

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!