Instructions to use BAAI/AquilaChat-7B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use BAAI/AquilaChat-7B with Transformers:
# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("BAAI/AquilaChat-7B", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
|
Download README.md from BAAI/AquilaChat-7B: direct link, hf CLI and curl.
- Browser
- Download file 9.39 kB
-
https://huggingface.co/BAAI/AquilaChat-7B/resolve/627c4bdffcdddff962006f5bbe30f4a3984dd0e8/README.md
- Command line
-
hf download hf://BAAI/AquilaChat-7B@627c4bdffcdddff962006f5bbe30f4a3984dd0e8/README.md
-
curl -L -o README.md https://huggingface.co/BAAI/AquilaChat-7B/resolve/627c4bdffcdddff962006f5bbe30f4a3984dd0e8/README.md
9.39 kB
| license: other | |
|  | |
| # 悟道·天鹰(Aquila) | |
| 悟道·天鹰(Aquila) 语言大模型是首个具备中英双语知识、支持商用许可协议、国内数据合规需求的开源语言大模型。 | |
| - 🌟 **支持开源商用许可**。Aquila系列模型的源代码基于 [Apache 2.0 协议](https://www.apache.org/licenses/LICENSE-2.0),模型权重基于[《智源Aquila系列模型许可协议》](../../../BAAI_Aquila_Model_License.pdf),使用者在满足许可限制的情况下,可用于商业目的。 | |
| - ✍️ **具备中英文知识**。Aquila系列模型在中英文高质量语料基础上从 0 开始训练,中文语料约占 40%,保证模型在预训练阶段就开始积累原生的中文世界知识,而非翻译而来的知识。 | |
| - 👮♀️**符合国内数据合规需求**。Aquila系列模型的中文语料来自智源多年积累的中文数据集,包括来自1万多个站源的中文互联网数据(其中99%以上为国内站源),以及获得国内权威机构支持的高质量中文文献数据、中文书籍数据等。我们仍在持续积累高质量、多样化的数据集,并源源不断加入Aquila基础模型后续训练中。 | |
| - 🎯**持续迭代,持续开源开放**。我们将不断完善训练数据、优化训练方法、提升模型性能,在更优秀的基础模型基座上,培育枝繁叶茂的“模型树”,持续开源开放更新的版本。 | |
| 悟道 · 天鹰 Aquila 模型的更多细节将在官方技术报告中呈现。请关注官方渠道更新。包括 [FlagAI GitHub仓库](https://github.com/FlagAI-Open/FlagAI/),[FlagAI 知乎账号](https://www.zhihu.com/people/95-22-20-18)、[FlagAI 官方技术交流群](https://github.com/FlagAI-Open/FlagAI/blob/master/wechat-qrcode.jpg)、智源研究院微信公众号、智源社区微信公众号。 | |
| | 模型 | 模型类型 | 简介 | 状态 | 训练所用显卡 | | |
| | :---------------- | :------- | :-- | :-- | :-- | | |
| | Aquila-7B | 基础模型,70亿参数 | **Aquila 基础模型**在技术上继承了 GPT-3、LLaMA 等的架构设计优点,替换了一批更高效的底层算子实现、重新设计实现了中英双语的 tokenizer,升级了 BMTrain 并行训练方法,实现了比 Magtron+DeepSpeed ZeRO-2 将近8倍的训练效率。 | 已发布 | Nvidia-A100 | | |
| | Aquila-33B |基础模型,330亿参数 | 同上 | **敬请期待** | Nvidia-A100 | | |
| | AquilaChat-7B |SFT model,基于 Aquila-7B 进行微调和强化学习 | **AquilaChat 对话模型**支持流畅的文本对话及多种语言类生成任务,通过定义可扩展的特殊指令规范,实现 AquilaChat对其它模型和工具的调用,且易于扩展。 <br><br>例如,调用智源开源的 **[AltDiffusion](https://github.com/FlagAI-Open/FlagAI/tree/master/examples/AltDiffusion-m18) 多语言文图生成模型**,实现了流畅的文图生成能力。配合智源 **InstructFace 多步可控文生图模型**,轻松实现对人脸图像的多步可控编辑。 | 已发布 | Nvidia-A100 | | |
| | AquilaChat-33B |SFT model,基于 Aquila-33B 进行微调和强化学习 | 同上 |—— | **敬请期待** | Nvidia-A100 | | |
| | AquilaCode-7B-NV | 基础模型,“文本-代码”生成模型,基于 Aquila-7B继续预训练,在英伟达芯片完成训练 | AquilaCode-7B 以小数据集、小参数量,实现高性能,是目前支持中英双语的、性能最好的开源代码模型,经过了高质量过滤、使用有合规开源许可的训练代码数据进行训练。<br><br> AquilaCode-7B 分别在英伟达和国产芯片上完成了代码模型的训练。 | github已发布 | Nvidia-A100 | | |
| | AquilaCode-7B-TS |基础模型,“文本-代码”生成模型,基于 Aquila-7B继续预训练,在天数智芯芯片上完成训练 | 同上 | github已发布 | Tianshu-BI-V100 | | |
| 悟道·天鹰Aquila系列模型将持续开源更优版本,大家可以先删除原来目录下的 `model_pytorch.bin`,再下载新权重,其他使用方式不变。详情见:**[变更日志](https://github.com/FlagAI-Open/FlagAI/blob/master/examples/Aquila/changelog_zh.md)** 。 | |
| ## 快速开始使用 AquilaChat-7B 对话模型 | |
| ## 使用方式/How to use | |
| ### 1. 推理/Inference | |
| ```python | |
| from transformers import AutoTokenizer, AutoModelForCausalLM | |
| import torch | |
| from cyg_conversation import covert_prompt_to_input_ids_with_history | |
| tokenizer = AutoTokenizer.from_pretrained("BAAI/AquilaChat-7B") | |
| model = AutoModelForCausalLM.from_pretrained("BAAI/AquilaChat-7B") | |
| model.eval() | |
| model.to("cuda:0") | |
| vocab = tokenizer.vocab | |
| print(len(vocab)) | |
| text = "请给出10个要到北京旅游的理由。" | |
| tokens = covert_prompt_to_input_ids_with_history(text, history=[], tokenizer=tokenizer, max_token=512) | |
| tokens = torch.tensor(tokens)[None,].to("cuda:0") | |
| with torch.no_grad(): | |
| out = model.generate(tokens, do_sample=True, max_length=512, eos_token_id=100007)[0] | |
| out = tokenizer.decode(out.cpu().numpy().tolist()) | |
| print(out) | |
| ``` | |
| 利用[NBCE](https://github.com/bojone/NBCE/tree/main)进行推理 | |
| ```python | |
| import json | |
| import torch | |
| from transformers import AutoTokenizer | |
| from transformers import AutoModelForCausalLM | |
| from transformers import TopPLogitsWarper, LogitsProcessorList | |
| import pdb | |
| # 加载tokenizer | |
| tokenizer = AutoTokenizer.from_pretrained(model_path) | |
| tokenizer.padding_side = 'left' | |
| tokenizer.pad_token = tokenizer.unk_token | |
| # 加载Aquila模型 | |
| model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16) | |
| device = torch.device('cuda') | |
| model.to(device) | |
| # 加载示例Context | |
| from cyg_conversation import default_conversation | |
| conv = default_conversation.copy() | |
| contexts = json.load(open('code_text_2.json')) | |
| question = "请解释这段程序的功能:" | |
| batch = [] | |
| conv.append_message(conv.roles[0], question) | |
| conv.append_message(conv.roles[1], None) | |
| batch.append(conv.get_prompt()) | |
| # 拼接context和question | |
| for ci,context in enumerate(contexts): | |
| conv1 = default_conversation.copy() | |
| conv1.append_message(conv.roles[0], context+question) | |
| conv1.append_message(conv.roles[1], None) | |
| batch.append(conv1.get_prompt()) | |
| print('Context长度分布:', [len(text) for text in batch]) | |
| print('Context总长度:', sum([len(text) for text in batch])) | |
| # Top-P截断 | |
| processors = LogitsProcessorList() | |
| processors.append(TopPLogitsWarper(0.95)) | |
| # Copied from https://github.com/bojone/NBCE/blob/main/test.py#L51-L106 | |
| @torch.inference_mode() | |
| def generate(max_tokens): | |
| """Naive Bayes-based Context Extension 演示代码 | |
| """ | |
| inputs = tokenizer(batch, padding='longest', return_tensors='pt').to(device) | |
| input_ids = inputs.input_ids | |
| attention_mask = inputs.attention_mask | |
| print('input_ids', input_ids.shape) | |
| past_key_values = None | |
| n = input_ids.shape[0] | |
| for i in range(max_tokens): | |
| # 模型输出 | |
| outputs = model(input_ids=input_ids, | |
| attention_mask=attention_mask, | |
| return_dict=True, | |
| use_cache=True, | |
| past_key_values=past_key_values | |
| ) | |
| past_key_values = outputs.past_key_values | |
| # ===== 核心代码开始 ===== | |
| beta, eta = 0.25, 0.1 | |
| logits = outputs.logits[:, -1] | |
| logits = logits - logits.logsumexp(dim=-1, keepdims=True) | |
| logits = processors(input_ids, logits) | |
| entropy = -(logits.exp() * logits.clip(-100, 0)).sum(dim=-1) | |
| if i > 0: | |
| entropy[k] -= eta | |
| k = entropy[1:].argmin() + 1 | |
| logits_max = logits[k] | |
| logits_uncond = logits[0] | |
| logits_merged = (1 + beta) * logits_max - beta * logits_uncond | |
| logits = torch.where(logits_uncond > -100, logits_merged, logits_max) | |
| # ===== 核心代码结束 ===== | |
| # 构建分布,采样 | |
| # tau = 1是标准的随机采样,tau->0则是贪心搜索 | |
| # 简单起见,这里没有实现topk、topp截断 | |
| tau = 0.01 | |
| probas = torch.nn.functional.softmax(logits[None] / tau , dim=-1) | |
| next_tokens = torch.multinomial(probas, num_samples=1).squeeze(1) | |
| if next_tokens[0] == tokenizer.eos_token_id: | |
| break | |
| ret = tokenizer.batch_decode(next_tokens) | |
| print(ret[0], flush=True, end='') | |
| # prepare for next iteration | |
| input_ids = next_tokens.unsqueeze(-1).tile(n, 1) | |
| attention_mask = torch.cat([attention_mask, torch.ones(n, 1, dtype=torch.long, device=device)], dim=-1) | |
| if __name__ == '__main__': | |
| generate(1000) | |
| ``` | |
| ## 证书/License | |
| `AquilaChat`系列开源模型使用 [智源Aquila系列模型许可协议](https://huggingface.co/BAAI/AquilaCode-7B-NV/resolve/main/BAAI%20Aquila%20Model%20License%20Agreement.pdf), 原始代码基于[Apache Licence 2.0](https://www.apache.org/licenses/LICENSE-2.0) | |
| `AquilaChat` open-source model is licensed under [ BAAI Aquila Model Licence Agreement](https://huggingface.co/BAAI/AquilaCode-7B-NV/resolve/main/BAAI%20Aquila%20Model%20License%20Agreement.pdf). The source code is under [Apache Licence 2.0](https://www.apache.org/licenses/LICENSE-2.0) |