YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

九格大模型使用文档

本文档介绍九格大模型7B版本的推理方式。本仓库支持三种推理方式:

  1. 使用原生huggingface transformer的generate函数进行推理;
  2. 使用性能更好的vllm框架进行推理;
  3. 使用vllm将模型部署为服务,可使用OpenAI API发送请求来进行推理。

推理代码示例可参见后文说明。完成模型下载并依照步骤安装所需的各项依赖后,即可使用全部的三种推理方式。

目录

环境配置

完成模型下载后,需要安装所需的各项依赖。除本文介绍的7B模型外,九格还有4B和70B两种不同的版本可供选用,4B、7B、70B模型的依赖完全相同,如果已经配置完成其中任意一种,即可跳过此环境配置步骤。环境配置步骤分为Conda环境安装、Pytorch安装、其余依赖项安装三步。

conda 环境安装

使用python 3.10.16 创建conda环境

conda create -n fm-9g python=3.10.16

激活环境

conda activate fm-9g

安装Pytorch

如果不使用vllm推理,可使用如下方法安装Pytorch

# 需要先查看CUDA版本,根据CUDA版本挑选合适的pytorch版本 (测试CUDA版本为12.2)
conda install pytorch==2.3.0

如果使用vllm,则需要安装与我们预编译的vllm whl文件匹配的pytorch。可在此链接处下载对应版本的Pytorch安装包。

安装其他依赖包

pip install transformers==4.44.0
pip install datamodel-code-generator
pip install accelerate
pip install jsonschema
pip install pytrie
pip install sentencepiece
pip install protobuf

安装vllm依赖

使用vllm进行推理需要使用我们预编译的vllm whl安装包。此安装包在CUDA12.2、python3.10环境下编译,可安装后执行推理。您可在此链接处下载vllm安装包,并使用以下命令安装:

cd ..
pip install vllm-0.5.0.dev0+cu122-cp310-cp310-linux_x86_64.whl

推理脚本示例

transformers原生代码推理脚本示例

此代码适用于7B模型单卡推理。在指定路径时,需指定pytorch_model.bin文件所在目录的路径,注意不是pytorch_model.bin文件本身的路径。

import os
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

if __name__ == "__main__":
    model_path = "XXXX"  # 请替换为你的pytorch_model.bin文件所在的目录的路径
    prompt = "山东最高的山是?"

    tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)

    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

    model = AutoModelForCausalLM.from_pretrained(
        model_path, 
        torch_dtype=torch.bfloat16, 
        trust_remote_code=True
    )
    model.to(device)
    model.eval()

    prompt = tokenizer.apply_chat_template(conversation=[{"role": "user", "content": prompt}], add_generation_prompt=True, tokenize=False)

    inputs = tokenizer(prompt, return_tensors="pt")
    inputs.to(model.device)
    with torch.no_grad():
        res = model.generate(**inputs, max_new_tokens=256)
    responses = tokenizer.decode(res[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
    ai_answer = responses.strip()
    print(ai_answer)

vllm离线批量推理脚本示例

此脚本适用于7B模型vllm离线推理。同样,在指定路径时,需指定pytorch_model.bin文件所在目录的路径。

from vllm import LLM, SamplingParams
from transformers import AutoTokenizer

if __name__ == '__main__':

    # 提示用例,定义了一个包含多个问题的列表,这些问题将被用于生成回答
    prompts = [
        "你是谁?",
        "山东最高的山是?",
        "介绍一下大模型的旋转位置编码。",
    ]

    # 模型路径,指定了模型文件所在的目录路径
    model_path = "XXXX"

    # 设置采样参数以控制生成文本,更多参数详细介绍可见/vllm/sampling_params.py
    # temperature越大,生成结果的随机性越强,top_p过滤掉生成词汇表中概率低于给定阈值的词汇,控制随机性
    # max_tokens表示生成文本的最大长度
    sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100)

    # tensor_parallel_size是模型张量并行的GPU数量,用于加速模型的计算.
    # 7B模型可在单块A100 40G上推理;对于显存较小的显卡,可考虑使用多块GPU并行推理
    tensor_parallel_size = 1
    llm = LLM(model=model_path, tensor_parallel_size=tensor_parallel_size, trust_remote_code=True, tokenizer_mode='auto')

    tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)

    # 初始化一个空列表,用于存储对话
    conversations = []
    for prompt in prompts:
        # 使用分词器的apply_chat_template方法将提示用例转换为对话格式
        conversations.append(
            tokenizer.apply_chat_template(conversation=[{"role": "user", "content": prompt}], add_generation_prompt=True, tokenize=False)
        )

    # 根据提示生成文本,将对话列表和采样参数传递给LLM的generate方法
    outputs = llm.generate(conversations, sampling_params)

    # 打印输出结果
    for output in outputs:
        prompt = output.prompt
        generated_text = output.outputs[0].text
        print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

部署OpenAI API服务推理

vLLM可以为 LLM 服务进行部署,这里提供了一个示例:

启动服务:

#! /usr/bin/env bash

set -ue

python -m vllm.entrypoints.openai.api_server \
    --model modelpath \
    --tokenizer-mode auto \
    --dtype auto \
    --trust-remote-code \
    --served-model-name 9g \
    --api-key fm9g \
    --gpu-memory-utilization 0.9 \
    --port 8020  \
    --tensor-parallel-size 1
    # tensor_parallel_size是模型张量并行的GPU数量,用于加速模型的计算;
    # 7B模型可在单块A100 40G上推理;对于显存较小的显卡,可考虑使用多块GPU并行推理

执行对应指令后,在http://localhost:8020 地址上启动服务,启动成功后终端会出现如下提示:

INFO:     Started server process [3511795]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8020 (Press CTRL+C to quit)

调用推理API:

启动服务端成功后,重新打开一个终端,可参考执行以下python脚本:

from openai import OpenAI

client = OpenAI(
    api_key="fm9g",
    base_url="http://localhost:8020/v1",
)
messages = [{"role": "user", "content": "介绍一下大语言模型的旋转位置编码"}]

response = client.chat.completions.create(
    model="9g",
    messages=messages,
    stream=True, # 流式输出
    # 其他可选推理参数
    # max_tokens=200,
    # n = 1,
    # stream = False,
    # frequency_penalty = 0.8,
    # presence_penalty = 0.9,
    # logit_bias = {}
)

for chunk in response:
    try: 
        content = chunk.choices[0].delta.content
    except:
        content = None
    if content is not None:
        print(content, end="")
print() 

调用多轮对话API:

启动服务端成功后,重新打开一个终端,可参考执行以下python脚本:

from openai import OpenAI

client = OpenAI(
    api_key="fm9g",
    base_url="http://localhost:8020/v1",
)
messages = []

while True:
    print("开始对话(输入 'quit' 结束):")
    user_input = input("请输入内容:")
    if user_input.strip().lower() == "quit":
        break

    messages.append({"role": "user", "content": user_input})

    response = client.chat.completions.create(
        model="9g",
        messages=messages,
        # 其他生成的超参数,看需求来加
        stream=True,
        # max_tokens=200,
        # n = 1,
        # frequency_penalty = 0.8,
        # presence_penalty = 0.9,
        # logit_bias = {}
    )

    full_reply = ""
    for chunk in response:
        try: 
            content = chunk.choices[0].delta.content
        except:
            content = None
        if content is not None:
            print(content, end="")
            full_reply += content
    print() 

    messages.append({"role": "assistant", "content": full_reply})
Downloads last month
8
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support