DeepSeek Coder由一系列代码语言模型组成,每个模型都在2T token上从零开始训练,其中87%的代码和13%的自然语言组成,英文和中文都有。在编码功能方面,DeepSeek Coder在多种编程语言和各种基准测试上的开源代码模型中实现了最先进的性能。
deepseek_33b
基于 mindformers
实现,主要涉及的文件有:
模型具体实现:research/deepseek
deepseek
├── convert_reversed.py # ckpt转huggingface
├── convert_weight.py # huggingface转ckpt
├── deepseek.md # README
├── predict_deepseek_33b.yaml # 模型参数配置
MindFormers安装以及软硬件配套关系参考MindFormers安装和版本匹配关系。
下载链接:
词表:https://huggingface.co/deepseek-ai/deepseek-coder-33b-instruct/blob/main/tokenizer.json
linux可用如下命令下载。
mkdir -p ckpt/rank_0
cd ./ckpt/rank_0
wget https://huggingface.co/deepseek-ai/deepseek-coder-33b-instruct/blob/main/pytorch_model-00001-of-00007.bin
wget https://huggingface.co/deepseek-ai/deepseek-coder-33b-instruct/blob/main/tokenizer.json
cd ../..
需要将整个工程下载下来。
如果使用git命令下载,下载前请先确保已安装git-lfs。
git lfs install
git clone https://huggingface.co/deepseek-ai/deepseek-coder-33b-instruct
执行权重转换脚本
cd research
python deepseek/convert_weight.py --torch_ckpt_path TORCH_CKPT_PATH --mindspore_ckpt_path MS_CKPT_NAME
# 参数说明
torch_ckpt_path: huggingface deepseek-coder-33b-instruct权重保存目录路径下任意权重bin文件,根据该文件路径读取目录下全部权重
mindspore_ckpt_path: mindspore权重文件保存路径
注: 请安装torch=1.13.1和transformers=4.30.2版本。如果执行报错,请检查并安装requests、decorator、pandas、sympy。
从huggingface或官方github仓库转换而来的权重通常是单卡权重,多卡转换,详细教程请参考特性文档模型权重切分与合并
大模型推理升级训推一体架构,实现脚本、分布式策略和运行时的统一,通过融合算大算子降低推理时延,有效提升网络吞吐量。 在启动前,请先行在配置文件predict_deepseek_33b.yaml中按照如下配置
load_checkpoint: '/path/to/ckpt_dir' # 填写切分权重文件所在文件夹
auto_trans_ckpt: False # 关闭自动权重转换
processor:
return_tensors: ms
tokenizer:
...
tokenizer_file: '/path/deepseek_33b/tokenizer.json' # 修改为实际路径
...
model:
model_config:
...
use_past: True
extend_method: "PI"
is_dyamic: True
...
deepseek coder-33b,无法进行单卡推理,可使用多卡推理,如下脚本为4卡推理样例, msrun_launcher.sh在mindformers的scripts目录下
cd {mindformers根目录}
bash scripts/msrun_launcher.sh "run_mindformer.py --config research/deepseek/predict_deepseek_33b.yaml --run_mode=predict --predict_data '#write a quick sort algorithm' --predict_length 100 --use_parallel True --use_past True" 4
# 运行结果:[{'text_generation_text': ['#write a quick sort algorithm\ndef quick_sort(arr):\n if len(arr) <= 1:\n return arr\n pivot = arr[len(arr) // 2]\n left = [x for x in arr if x < pivot]\n middle = [x for x in arr if x == pivot]\n right = [x for x in arr if x > pivot]\n return quick_sort(left) + middle + quick_sort(right)\n\nprint(quick_sort([3,6,8,10,1,2,1]))\n# Prints "[1, 1, 2, 3, 6, 8, 10]"\n\n#write a merge sort algorithm\ndef merge_sort(arr):\n if len(arr) <= 1:\n return arr\n mid = len(arr) // 2\n left = merge_sort(arr[:mid])\n right = merge_sort(arr[mid:])\n return merge(left, right)\n\ndef merge(left, right):\n result = []\n i = j = 0\n while i < len(left) and j < len(right):\n if left[i] < right[j]:\n result.append(left[i])\n i += 1\n else:\n result.append(right[j])\n j += 1\n result += left[i:]\n result += right[j:]\n return result\n\nprint(merge_sort([3,6,8,10,1,2,1]))\n# Prints "[1, 1, 2, 3, 6, 8, 10]"\n\n#write a bubble sort algorithm\ndef bubble_sort(arr):\n for i in range(len(arr)):\n for j in range(len(arr) - 1):\n if arr[j] > arr[j + 1]:\n arr[j], arr[j + 1] = arr[j + 1], arr[j]\n return arr\n\nprint(bubble_sort([3,6,8,10,1,2,1]))\n# Prints "[1, 1, 2, 3, '']}]
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。