问答社区
DeepSeek LLM,这是一种包含 670 亿个参数的高级语言模型开源给您研究
介绍 DeepSeek LLM,这是一种包含 670 亿个参数的高级语言模型。它已在包含 2 万亿个英文和中文标记的庞大数据集上从头开始训练。为了促进研究,我们已将 DeepSeek LLM 7B/67B Base 和 DeepSeek LLM 7B/67B Chat 开源给研究社区。
卓越的综合能力:DeepSeek LLM 67B Base在推理、编码、数学和中文理解等领域的表现优于Llama2 70B Base。
精通编码和数学:DeepSeek LLM 67B Chat在编码方面表现出色(HumanEvalPass@1:73.78)和数学(GSM8K 0-shot:84.1,数学0-shot:32.6)。它还表现出非凡的概括能力,在匈牙利国家高中考试中获得65分的优异成绩就是明证。
精通中文:根据我们的评估,DeepSeek LLM 67B Chat在中文方面超过了GPT-3.5。
镜像拉起型号下载:git@github.com:deepseek-ai/DeepSeek-LLM.git
我们向公众发布了DeepSeek LLM 7B/67B,包括基本模型和聊天模型。为了支持学术界和商业界更广泛、更多样化的研究,我们提供了从基本模型的培训过程中进入其中间检查点的途径。请注意,此型号的使用受“许可”部分中概述的条款的约束。这些条款允许商业用途。
Huggingface
Model | Sequence Length | Download |
---|---|---|
DeepSeek LLM 7B Base | 4096 | 🤗 HuggingFace |
DeepSeek LLM 7B Chat | 4096 | 🤗 HuggingFace |
DeepSeek LLM 67B Base | 4096 | 🤗 HuggingFace |
DeepSeek LLM 67B Chat | 4096 | 🤗 HuggingFace |
中间检查点
我们在AWS S3(简单存储服务)上托管DeepSeek LLM 7B/67B的中间检查点。可以使用AWS命令行界面(CLI)下载这些文件。
# using AWS CLI
# DeepSeek-LLM-7B-Base
aws s3 cp s3://deepseek-ai/DeepSeek-LLM/DeepSeek-LLM-7B-Base <local_path> --recursive --request-payer
# DeepSeek-LLM-67B-Base
aws s3 cp s3://deepseek-ai/DeepSeek-LLM/DeepSeek-LLM-67B-Base <local_path> --recursive --request-payer
评估结果
基本模型
我们在一系列具有代表性的中英文基准上评估我们的模型和一些基线模型。可以在评估文件夹中找到更多结果。在这一部分中,我们报告的评估结果是基于内部的非开源hai llm评估框架。请注意,在使用转换后的HuggingFace模型时可能会有轻微的差异。
models.
model | Hella Swag |
Trivia QA |
MMLU | GSM8K | Human Eval |
BBH | CEval | CMMLU | Chinese QA |
---|---|---|---|---|---|---|---|---|---|
0-shot | 5-shot | 5-shot | 8-shot | 0-shot | 3-shot | 5-shot | 5-shot | 5-shot | |
LLaMA-2 -7B |
75.6 | 63.8 | 45.8 | 15.5 | 14.6 | 38.5 | 33.9 | 32.6 | 21.5 |
LLaMA-2 -70B |
84.0 | 79.5 | 69.0 | 58.4 | 28.7 | 62.9 | 51.4 | 53.1 | 50.2 |
DeepSeek LLM 7B Base |
75.4 | 59.7 | 48.2 | 17.4 | 26.2 | 39.5 | 45.0 | 47.2 | 78.0 |
DeepSeek LLM 67B Base |
84.0 | 78.9 | 71.3 | 63.4 | 42.7 | 68.7 | 66.1 | 70.8 | 87.6 |
Note: ChineseQA is an in-house benchmark, inspired by TriviaQA.
聊天模式
考试前从未见过
为了解决数据污染和特定测试集的调优问题,我们设计了新的问题集来评估开源LLM模型的能力。评估结果表明,DeepSeek LLM 67B Chat在从未见过的考试中表现异常出色。
匈牙利国家高中考试:根据Grok-1,我们使用匈牙利国家高中测试评估了该模型的数学能力。该考试包括33个问题,模型的分数通过人工注释确定。我们遵循solution.pdf中的评分标准来评估所有模型。
emark:我们已经纠正了最初评估中的一个错误。在这个修订版中,我们省略了问题16、17、18以及上述图像的最低分数。此处提供了评估详细信息。
指令遵循评估:2023年11月15日,谷歌发布了一个指令遵循评估数据集。他们确定了25种类型的可验证指令,并构建了大约500个提示,每个提示包含一个或多个可验证指令。我们使用提示级别的松散度量来评估所有模型。在这里,我们使用了谷歌发布的第一个版本进行评估。关于谷歌修订的测试集评估结果,请参考我们论文中的数字。
LeetCode每周竞赛:为了评估模型的编码能力,我们利用了LeetCode周竞赛中的问题(每周竞赛351-372,双周竞赛108-117,从2023年7月到2023年11月)。我们通过从LeetCode中抓取数据获得了这些问题,LeetCode由126个问题组成,每个问题有20多个测试用例。所采用的评估指标类似于HumanEval的评估指标。在这方面,如果一个模型的输出成功地通过了所有测试用例,则该模型被认为有效地解决了问题。模型的编码能力如下图所示,其中y轴表示pass@1领域内人类评估测试的分数,x轴表示pass@1在域外LeetCode每周竞赛问题上得分。
具体问题和测试案例将很快发布。敬请期待!
Standard Benchmark
Model | TriviaQA | MMLU | GSM8K | HumanEval | BBH | C-Eval | CMMLU | ChineseQA |
---|---|---|---|---|---|---|---|---|
DeepSeek LLM 7B Base | 59.7 | 48.2 | 17.4 | 26.2 | 39.5 | 45.0 | 47.2 | 78.0 |
DeepSeek LLM 67B Base | 78.9 | 71.3 | 63.4 | 42.7 | 68.7 | 66.1 | 70.8 | 87.6 |
DeepSeek LLM 7B Chat | 57.9 | 49.4 | 62.6 | 48.2 | 42.3 | 47.0 | 49.7 | 75.0 |
DeepSeek LLM 67B Chat | 81.5 | 71.1 | 84.1 | 73.8 | 71.7 | 65.2 | 67.8 | 85.1 |
注意:我们使用0-shot评估MMLU、GSM8K、C-Eval和CMMLU的聊天模型。更多的评估结果可以在这里找到。
重新审视多选问题基准
基于我们的实验观察,我们发现使用多选(MC)问题(如MMLU、CMMLU和C-Eval)来提高基准测试性能是一项相对简单的任务。通过结合语文考试中的多项选择题,我们取得了非凡的成绩,如下表所示:
Model | MMLU | C-Eval | CMMLU |
---|---|---|---|
DeepSeek LLM 7B Chat | 49.4 | 47.0 | 49.7 |
DeepSeek LLM 7B Chat + MC | 60.9 | 71.3 | 73.8 |
注:+MC代表从网上收集的2000万道中文多项选择题的增加。需要注意的是,我们对C-Eval验证集和CMMLU测试集进行了重复数据消除,以防止数据污染。这不仅提高了中文多项选择题的基准,也提高了英语的基准。然而,我们观察到,在7B设置中,它并不能提高模型在其他不使用多项选择风格的评估中的知识表现。因此,我们决定不将MC数据纳入预训练或微调过程,因为这会导致对基准的过度拟合。
4.培训前细节
数据
我们的主要目标是全面增强数据集的丰富性和多样性。为了实现这一点,我们实现了多种方法,并建立了一个名为“cc_cleaner”的分布式频繁检查点批处理系统,以支持我们的数据管道。
我们的最小可行解决方案与RefinedWeb+CCNet不同。我们非常感谢他们对AGI研究的无私奉献。
我们还将确定性随机化显著地纳入了我们的数据管道中。这种方法使我们能够在漫长而不可预测的训练过程中不断增强数据。
数据构成:我们的培训数据包括互联网文本、数学、代码、书籍和关于robots.txt的自收集数据的各种组合。除了多样化的内容外,我们还高度重视个人隐私和版权保护。所有包含个人信息或受版权限制的内容都已从我们的数据集中删除。
数据集修剪:我们的系统采用启发式规则和模型来细化我们的训练数据。我们的过滤过程去除了低质量的网络数据,同时保留了宝贵的低资源知识。它旨在提高语料库的整体质量,并删除有害或有毒的内容。
重复数据消除:我们的高级重复数据消除系统使用MinhashLSH,可严格消除文档和字符串级别的重复数据。这种严格的重复数据消除过程确保了卓越的数据唯一性和完整性,尤其是在大规模数据集中至关重要。
预培训
DeepSeek LM模型使用与LLaMA相同的架构,LLaMA是一种自回归变换解码器模型。7B模型使用多头注意力(MHA),而67B模型使用分组查询注意力(GQA)。
我们在2万亿个令牌的庞大数据集上预训练了DeepSeek语言模型,序列长度为4096,并使用了AdamW优化器。7B模型的训练涉及2304的批量大小和4.2e-4的学习率,67B模型的训练具有4608的批量大小,3.2e-4的教学率。在我们的培训过程中,我们采用了多步骤的学习进度表。学习率从2000个预热步骤开始,然后逐步提高到1.6万亿代币的最大值的31.6%和1.8万亿代币的最高值的10%。
我们发布了训练损失曲线和几个基准指标曲线,具体如下。
5.快速入门
安装
在Python>=3.8环境的基础上,通过运行以下命令安装必要的依赖项:
pip install -r requirements.txt
用Huggingface的变形金刚推理
您可以直接使用Huggingface的Transformers进行模型推理。
文本完成
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
model_name = "deepseek-ai/deepseek-llm-67b-base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="auto")
model.generation_config = GenerationConfig.from_pretrained(model_name)
model.generation_config.pad_token_id = model.generation_config.eos_token_id
text = "An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is"
inputs = tokenizer(text, return_tensors="pt")
outputs = model.generate(**inputs.to(model.device), max_new_tokens=100)
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(result)
聊天完成
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
model_name = "deepseek-ai/deepseek-llm-67b-chat"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="auto")
model.generation_config = GenerationConfig.from_pretrained(model_name)
model.generation_config.pad_token_id = model.generation_config.eos_token_id
messages = [
{"role": "user", "content": "Who are you?"}
]
input_tensor = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")
outputs = model.generate(input_tensor.to(model.device), max_new_tokens=100)
result = tokenizer.decode(outputs[0][input_tensor.shape[1]:], skip_special_tokens=True)
print(result)
为了避免使用提供的函数apply_chat_template,您还可以按照示例模板与我们的模型进行交互。请注意,消息应替换为您的输入。
User: {messages[0]['content']}
Assistant: {messages[1]['content']}<|end▁of▁sentence|>User: {messages[2]['content']}
Assistant:
注意:默认情况下(add_special_tokens=True),我们的标记生成器会在输入文本之前自动添加一个bos_token(<||句子的开头)。此外,由于系统提示与我们型号的此版本不兼容,我们不建议在您的输入中包含系统提示。
vLLM推理
您还可以使用vLLM进行高通量推理。
文本完成
from vllm import LLM, SamplingParams
tp_size = 4 # Tensor Parallelism
sampling_params = SamplingParams(temperature=0.7, top_p=0.9, max_tokens=100)
model_name = "deepseek-ai/deepseek-llm-67b-base"
llm = LLM(model=model_name, trust_remote_code=True, gpu_memory_utilization=0.9, tensor_parallel_size=tp_size)
prompts = [
"If everyone in a country loves one another,",
"The research should also focus on the technologies",
"To determine if the label is correct, we need to"
]
outputs = llm.generate(prompts, sampling_params)
generated_text = [output.outputs[0].text for output in outputs]
print(generated_text)
聊天完成
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
tp_size = 4 # Tensor Parallelism
sampling_params = SamplingParams(temperature=0.7, top_p=0.9, max_tokens=100)
model_name = "deepseek-ai/deepseek-llm-67b-chat"
tokenizer = AutoTokenizer.from_pretrained(model_name)
llm = LLM(model=model_name, trust_remote_code=True, gpu_memory_utilization=0.9, tensor_parallel_size=tp_size)
messages_list = [
[{"role": "user", "content": "Who are you?"}],
[{"role": "user", "content": "What can you do?"}],
[{"role": "user", "content": "Explain Transformer briefly."}],
]
# Avoid adding bos_token repeatedly
prompt_token_ids = [tokenizer.apply_chat_template(messages, add_generation_prompt=True) for messages in messages_list]
sampling_params.stop = [tokenizer.eos_token]
outputs = llm.generate(prompt_token_ids=prompt_token_ids, sampling_params=sampling_params)
generated_text = [output.outputs[0].text for output in outputs]
print(generated_text)
常见问题
你能为模型量化提供tokenizer.model文件吗?
DeepSeek LLM利用HuggingFace标记器来实现字节级BPE算法,并使用专门设计的预标记器来确保最佳性能。目前,没有直接的方法将标记器转换为句子片段标记器。我们正在为开源量化方法做出贡献,以促进HuggingFace Tokenizer的使用。
GGUF(骆驼.cpp)
我们已经向流行的量化存储库llama.cpp提交了一份PR,以完全支持所有HuggingFace预标记器,包括我们的预标记器。
在等待合并PR时,您可以使用以下步骤生成GGUF模型:
git clone https://github.com/DOGEwbx/llama.cpp.git
cd llama.cpp
git checkout regex_gpt2_preprocess
# set up the environment according to README
make
python3 -m pip install -r requirements.txt
# generate GGUF model
python convert-hf-to-gguf.py <MODEL_PATH> --outfile <GGUF_PATH> --model-name deepseekllm
# use q4_0 quantization as an example
./quantize <GGUF_PATH> <OUTPUT_PATH> q4_0
./main -m <OUTPUT_PATH> -n 128 -p <PROMPT>
GPTQ(exllamav2)
更新:exllamav2已经能够支持HuggingFace Tokenizer。请拿出最新版本并试用。
GPU内存使用情况
我们对7B和67B模型在不同批量大小和序列长度设置下的推理峰值内存使用情况进行了分析。
对于DeepSeek LLM 7B,我们使用1个NVIDIA A100-PCIE-40GB GPU进行推理。
Batch Size | Sequence Length | ||||
---|---|---|---|---|---|
256 | 512 | 1024 | 2048 | 4096 | |
1 | 13.29 GB | 13.63 GB | 14.47 GB | 16.37 GB | 21.25 GB |
2 | 13.63 GB | 14.39 GB | 15.98 GB | 19.82 GB | 29.59 GB |
4 | 14.47 GB | 15.82 GB | 19.04 GB | 26.65 GB | OOM |
8 | 15.99 GB | 18.71 GB | 25.14 GB | 35.19 GB | OOM |
16 | 19.06 GB | 24.52 GB | 37.28 GB | OOM | OOM |
For DeepSeek LLM 67B, we utilize 8 NVIDIA A100-PCIE-40GB GPUs for inference.
Batch Size | Sequence Length | ||||
---|---|---|---|---|---|
256 | 512 | 1024 | 2048 | 4096 | |
1 | 16.92 GB | 17.11 GB | 17.66 GB | 20.01 GB | 33.23 GB |
2 | 17.04 GB | 17.28 GB | 18.55 GB | 25.27 GB | OOM |
4 | 17.20 GB | 17.80 GB | 21.28 GB | 33.71 GB | OOM |
8 | 17.59 GB | 19.25 GB | 25.69 GB | OOM | OOM |
16 | 18.17 GB | 21.69 GB | 34.54 GB | OOM | OOM |
限制
尽管DeepSeek LLM已经展示了令人印象深刻的功能,但它们并非没有局限性。以下是此类模型的一些潜在缺点:
过度依赖训练数据:这些模型是在大量文本数据上训练的,这可能会在数据中引入偏差。它们可能会无意中产生有偏见或歧视性的反应,反映出训练数据中普遍存在的偏见。
幻觉:该模型有时会产生听起来可能合理但事实上不正确或不受支持的反应或输出。当模型严重依赖于从训练数据中学习到的统计模式时,即使这些模式与现实世界的知识或事实不一致,也会发生这种情况。
重复:模型可能在其生成的响应中表现出重复。这种重复可以以各种方式表现出来,例如重复某些短语或句子,生成冗余信息,或在生成的文本中生成重复结构。这个问题可能会使LLM的输出不那么多样化,对用户的吸引力也会降低。
8.许可证
此代码存储库是根据MIT许可证获得许可的。DeepSeek LLM Base/Chat模型的使用受模型许可证的约束。DeepSeek LLM系列(包括Base和Chat)支持商业使用。
引文:
@article{deepseek-llm,
author = {DeepSeek-AI},
title = {DeepSeek LLM: Scaling Open-Source Language Models with Longtermism},
journal = {arXiv preprint arXiv:2401.02954},
year = {2024},
url = {https://github.com/deepseek-ai/DeepSeek-LLM}
}