Index-1.9B模型简介
Index-1.9B是哔哩哔哩自主研发的一款轻量级多语言大模型系列,包含以下几个版本:
- Index-1.9B base: 基础模型,具有19亿非嵌入参数,在2.8T主要为中英文的语料上进行预训练,在多项评测基准上领先同级别模型。
- Index-1.9B pure: 基础模型的对照版本,参数和训练策略相同,但从语料中严格过滤掉所有指令相关数据,用于验证指令对基准测试的影响。
- Index-1.9B chat: 基于Index-1.9B base进行SFT和DPO对齐的对话模型。由于预训练中引入了大量互联网社区语料,该模型相比同级别模型具有更有趣的聊天能力和更强的多语言(尤其是东亚语言)翻译能力。
- Index-1.9B character: 在SFT和DPO基础上引入RAG技术,实现少样本角色扮演定制。
Index-1.9B模型在轻量化的同时保持了优秀的性能,为用户提供了灵活多样的应用选择。接下来我们将详细介绍该模型的评测结果、下载方式和使用方法。
模型评测结果
Index-1.9B在多项评测基准上表现优异,以下是与其他同级别及更大规模模型的对比结果:
模型 | 平均分 | 英语平均分 | MMLU | CEVAL | CMMLU | HellaSwag | Arc-C | Arc-E |
---|---|---|---|---|---|---|---|---|
Google Gemma 2B | 41.58 | 46.77 | 41.81 | 31.36 | 31.02 | 66.82 | 36.39 | 42.07 |
Phi-2 (2.7B) | 58.89 | 72.54 | 57.61 | 31.12 | 32.05 | 70.94 | 74.51 | 87.1 |
Qwen1.5-1.8B | 58.96 | 59.28 | 47.05 | 59.48 | 57.12 | 58.33 | 56.82 | 74.93 |
Qwen2-1.5B(report) | 65.17 | 62.52 | 56.5 | 70.6 | 70.3 | 66.6 | 43.9 | 83.09 |
MiniCPM-2.4B-SFT | 62.53 | 68.75 | 53.8 | 49.19 | 50.97 | 67.29 | 69.44 | 84.48 |
Index-1.9B-Pure | 50.61 | 52.99 | 46.24 | 46.53 | 45.19 | 62.63 | 41.97 | 61.1 |
Index-1.9B | 64.92 | 69.93 | 52.53 | 57.01 | 52.79 | 80.69 | 65.15 | 81.35 |
Llama2-7B | 50.79 | 60.31 | 44.32 | 32.42 | 31.11 | 76 | 46.3 | 74.6 |
Mistral-7B (report) | / | 69.23 | 60.1 | / | / | 81.3 | 55.5 | 80 |
从评测结果可以看出,Index-1.9B在总体平均分和英语平均分上表现优异,甚至超过了一些参数量更大的模型。特别是在HellaSwag、Arc-C和Arc-E等测试上,Index-1.9B展现出了强大的性能。这些结果充分证明了Index-1.9B在轻量化的同时,仍然保持了卓越的语言理解和生成能力。
模型下载
Index-1.9B系列模型可以从以下渠道下载:
模型 | HuggingFace | ModelScope |
---|---|---|
Index-1.9B-Chat | 🤗 | 链接 |
Index-1.9B-Character (角色扮演) | 🤗 | 链接 |
Index-1.9B-Base | 🤗 | 链接 |
Index-1.9B-Base-Pure | 🤗 | 链接 |
用户可以根据自己的需求选择合适的模型版本进行下载和使用。
使用指南
环境配置
- 首先克隆项目仓库:
git clone https://github.com/bilibili/Index-1.9B
cd Index-1.9B
- 使用pip安装依赖:
pip install -r requirements.txt
使用Transformers加载模型
以下是使用Transformers库加载Index-1.9B-Chat模型进行对话的示例代码:
import argparse
from transformers import AutoTokenizer, pipeline
# 注意! 目录不能包含".",可以用"_"替代
parser = argparse.ArgumentParser()
parser.add_argument('--model_path', default="./IndexTeam/Index-1.9B-Chat/", type=str, help="")
parser.add_argument('--device', default="cpu", type=str, help="") # 也可以是"cuda"或Apple silicon的"mps"
args = parser.parse_args()
tokenizer = AutoTokenizer.from_pretrained(args.model_path, trust_remote_code=True)
generator = pipeline("text-generation",
model=args.model_path,
tokenizer=tokenizer, trust_remote_code=True,
device=args.device)
system_message = "你是由哔哩哔哩自主研发的大语言模型,名为"Index"。你能够根据用户传入的信息,帮助用户完成指定的任务,并生成恰当的、符合要求的回复。"
query = "续写 天不生我金坷垃"
model_input = []
model_input.append({"role": "system", "content": system_message})
model_input.append({"role": "user", "content": query})
model_output = generator(model_input, max_new_tokens=300, top_k=5, top_p=0.8, temperature=0.3, repetition_penalty=1.1, do_sample=True)
print('User:', query)
print('Model:', model_output)
Web演示
Index-1.9B还提供了基于Gradio的Web演示界面,可以让用户更直观地体验模型的对话能力。使用以下命令启动Web服务器:
python demo/web_demo.py --port='port' --model_path='/path/to/model/'
启动后,在浏览器中输入访问地址即可使用Index-1.9B-Chat模型进行对话。
终端演示
如果想在终端中直接与模型对话,可以使用以下命令启动终端演示:
python demo/cli_demo.py --model_path='/path/to/model/'
OpenAI API 演示
Index-1.9B还提供了兼容OpenAI API的接口,可以通过以下命令启动Flask API:
python demo/openai_demo.py --model_path='/path/to/model/'
启动后,可以通过命令行进行对话:
curl http://127.0.0.1:8010/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "system", "content": "你是由哔哩哔哩自主研发的大语言模型,名为"Index"。你能够根据用户传入的信息,帮助用户完成指定的任务,并生成恰当的、符合要求的回复。"},
{"role": "user", "content": "花儿为什么这么红?"}
]
}'
角色扮演功能
Index-1.9B-Character模型支持少样本角色扮演定制功能。目前已内置"三三"角色,用户也可以创建自定义角色。创建自定义角色的步骤如下:
- 准备类似roleplay/character/三三.csv的对话语料(注意文件名应与要创建的角色名称一致)。
- 准备相应的角色描述。
- 点击"生成角色"即可成功创建。
如果对应角色已创建,直接在"Role name"字段输入想要对话的角色,输入"query",点击"submit"即可开始对话。
模型量化
Index-1.9B支持int4量化,可以进一步降低显存占用。量化依赖bitsandbytes库,安装命令:
pip install bitsandbytes==0.43.0
以下是int4量化的示例代码:
import torch
import argparse
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
TextIteratorStreamer,
GenerationConfig,
BitsAndBytesConfig
)
parser = argparse.ArgumentParser()
parser.add_argument('--model_path', default="", type=str, help="")
parser.add_argument('--save_model_path', default="", type=str, help="")
args = parser.parse_args()
tokenizer = AutoTokenizer.from_pretrained(args.model_path, trust_remote_code=True)
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
llm_int8_threshold=6.0,
llm_int8_has_fp16_weight=False,
)
model = AutoModelForCausalLM.from_pretrained(args.model_path,
device_map="auto",
torch_dtype=torch.float16,
quantization_config=quantization_config,
trust_remote_code=True)
model.save_pretrained(args.save_model_path)
tokenizer.save_pretrained(args.save_model_path)
模型微调
Index-1.9B-Chat模型支持快速微调,用户可以根据微调教程的步骤进行操作,定制专属的Index模型。
局限性与免责声明
尽管Index-1.9B在多项测试中表现优异,但它仍然可能在某些情况下生成不准确、有偏见或不恰当的内容。该模型无法理解、表达个人观点或做出价值判断,其输出不代表模型开发者的观点和立场。因此,请谨慎使用生成的内容。用户应独立评估和验证模型生成的内容,不应传播有害内容。开发者在部署相关应用之前,应根据具体应用进行安全测试和微调。
我们强烈建议不要使用这些模型创建或传播有害信息,或从事可能危害公共、国家或社会安全或违反法规的活动。未经适当的安全审查和备案,请勿将模型用于互联网服务。我们已尽最大努力确保训练数据的合规性,但由于模型和数据的复杂性,可能仍存在未预见的问题。对于使用这些模型可能产生的任何问题,无论是与数据安全、舆论风险相关,还是因误解、误用、传播或不合规使用模型而导致的任何风险和问题,我们均不承担责任。
开源许可
使用本仓库的源代码需遵守Apache-2.0许可。使用Index-1.9B模型权重需遵守INDEX_MODEL_LICENSE。
Index-1.9B模型权重对学术研究完全开放,并支持免费商用。
引用
如果您认为我们的工作对您有帮助,欢迎引用:
@article{Index,
title={Index1.9B Technical Report},
year={2024}
}