通过魔搭社区本地下载大语言模型及API接口调用模型实现

发布于:2025-02-11 ⋅ 阅读:(11) ⋅ 点赞:(0)

一、背景

        在之前的博文:CSDN中,我们已经详细介绍了如何安装Python环境和一些必要的库和访问Transformers库的大模型。然而,在实际操作过程中,我们发现模型的下载或者调用需要访问Hugging Face上的Transformers库,这是一个国外的网站,经常出现网络无法访问或者下载中断等问题。这给国内的开发者带来了不小的困扰。因此,找到一种可靠的方法来解决这些网络问题,顺利下载并部署模型,是我们面临的一个重要挑战。

为了应对这一问题,我们可以考虑以下几种解决方案:

  1. 使用国内镜像:寻找国内的镜像站点,快速下载所需的模型文件。
  2. 离线下载:通过其他途径获取模型文件,然后手动加载到项目中。
  3. 代理服务:配置网络代理,绕过网络限制,顺利访问国外网站。

        接下来,我将详细介绍如何通过国内社区网站去下载大语言模型,基于Flask框架搭建AI应用调用本地提前下载好的大模型,本地私有化部署开源的大语言模型API接口调用。

二、大模型下载

模型:

gpt2模型说明:
GPT-2是一个变压器模型,以自我监督的方式在非常大的英语数据语料库上进行预训练。这意味着它只对原始文本进行了预训练,没有人以任何方式对其进行标记(这就是为什么它可以使用大量公开数据),并通过自动过程从这些文本中生成输入和标签。更确切地说,它被训练来猜测句子中的下一个单词。
更确切地说,输入是一定长度的连续文本序列,目标是相同的序列,向右移动了一个标记(单词或单词片段)。该模型在内部使用掩码机制,以确保对令牌i的预测只使用1到i的输入,而不使用未来的令牌。
通过这种方式,模型学习了英语的内部表示,然后可以用来提取对下游任务有用的特征。然而,该模型在预训练方面表现最佳,即从提示生成文本。
这是GPT-2的最小版本,具有124M个参数。

模型资源社区

        大语言模型下载可以通过国内的魔搭社区:魔搭社区 上下载,比如我下载的gpt2

1、访问魔搭社区

2、点击模型库

3、搜索想要的模型

4、点击具体的模型进入

5、点击模型文件

6、点击下载模型(多种下载方式)

演示SDK下载方式下载大模型:

        可以使用VS CORE 集成开发环境或者使用CMD命令 实现

1、新建一个app.py的python文件,将魔搭社区SDK下载模型的代码复制粘贴:
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('AI-ModelScope/gpt2')

这个操作会将模型下载到一个默认路径,官方是这么说的:无论是使用命令行还是ModelScope SDK,默认模型会下载到~/.cache/modelscope/hub目录下。如果需要修改cache目录,可以手动指定环境变量:MODELSCOPE_CACHE,指定后,模型将下载到该环境变量指定的目录中。

2、修改下载的代码,指定保存模型的路径
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('AI-ModelScope/gpt2',cache_dir='./model')
3、保存文件,在终端执行
python app.py

下载会比较耗时,取决模型的大小,下载完成后,在当前目录下有如图的gpt2的模型文件:

创建Flask应用并使用本地下载的模型

1、创建一个gpt2.py的python文件

实现api接口,对模型的调用,支持用户请求输出提示文本,将文本经模型推理输出,响应结果到用户

from flask import Flask, request, jsonify
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import logging
import torch
from collections import OrderedDict

# 初始化Flask应用
app = Flask(__name__)

# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# 加载GPT-2模型和分词器
# model_name = 'gpt2'  # 或者使用你本地下载的模型路径
# 指定本地模型路径
model_path = './model/AI-ModelScope/gpt2'

# 加载分词器和模型
tokenizer = GPT2Tokenizer.from_pretrained(model_path)
model = GPT2LMHeadModel.from_pretrained(model_path)
@app.route('/')
def home():
    logger.info("healthy")
    return "Welcome to the GPT-2 Flask API!"
@app.route('/generate', methods=['POST'])
def generate_text():
    data = request.get_json()
    prompt = data.get('prompt', '')
    logger.info(prompt)

    if not prompt:
        return jsonify({'error': 'No prompt provided'}), 400

    input_ids = tokenizer.encode(prompt, return_tensors='pt')

# 创建 attention mask
    attention_mask = torch.ones(input_ids.shape, dtype=torch.long)

# 生成文本
    output = model.generate(
    input_ids,
    attention_mask=attention_mask,
    max_length=200,
    num_return_sequences=1,
    temperature=0.7,
    top_k=50,
    top_p=0.9,
    do_sample=True,  # 启用采样模式
    repetition_penalty=1.2,  # 增加重复惩罚
    pad_token_id=tokenizer.eos_token_id  # 设置填充标记ID
)
# 解码生成的文本
    generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
    logger.info(f'Generated text: {generated_text}')
    return jsonify({'generated_text': generated_text})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
2、安装python环境、Flask、 transformers、 torch等

前面的博文已经介绍过,需要的请查阅:CSDN

3、终端执行ython文件:gpt2.py
python gpt2.py

启动成功:

模型请求调用测试 

1、打开另一个终端窗口,使用curl发送POST请求以测试API:

curl -X POST http://127.0.0.1:5000/generate -H "Content-Type: application/json" -d '{"prompt": "Once upon a time"}'
2、使用Postman工具发起请求

使用启动输出的IP和端口

设置请求头:

Content-Type:application/json

Body:

{"prompt": "Once upon a time, there was a little boy named Tom"}

发起POST请求,结果如下:

模型生成输出文本:

{
    "generated_text": "Once upon a time, there was a little boy named Tom. He grew up in the same part of town as his father and brother were from when he got here.\"\nThe boys told me about their own journey through life during my visit to Bessie's home for Christmas last year with two other children who lived nearby where they both had been staying at that point but all came back later on rather than after school or work day so we could spend more leisurely evenings together by ourselves (I am sure I have no idea what this means). They also explained how it is important not only one child per household though; you must be able - if someone doesn't want an adult role model then certainly don´t try anything else because most people won�d love being around them! The story goes: \"We started out playing basketball before going into college until our parents decided against us leaving altogether due something wrong...\" We went along quite well since everyone did seem pretty nice without any problems whatsoever except"
}

部署 

可以将模型和Flask应用部署在WIndow或者linux环境,后续计划会出一篇详细的Linux环境下使用Docker部署的教程,敬请期待。。。

 三、总结

        从最终结果看,输出结果符合模型的能力,本次只是演示一个小模型的本地化下载部署,通过本文,可以了解模型的下载、调用实现。