File size: 9,366 Bytes
9de6cfa f64b6a5 dbe851b f64b6a5 dbe851b f64b6a5 dbe851b f64b6a5 e8a98fe bc1328c 49e363d f64b6a5 dbe851b 4388bdd f64b6a5 dbe851b f64b6a5 8b77d13 14ae5a4 8b77d13 14ae5a4 8b77d13 f64b6a5 1fe84ee 3554f56 1fe84ee 3554f56 1fe84ee 3554f56 f64b6a5 c968537 f64b6a5 c968537 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
---
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) |