单卡可推理CodeFuse-CodeLlama-34B 4bits量化版本魔搭开源!

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 继2023-09-11 CodeFuse-CodeLlama-34B发布,HumanEval pass@1指标达到74.4% (贪婪解码), 为当前开源SOTA。最近,CodeFuse-CodeLlama-34B 4bits量化版本发布,CodeFuse-CodeLlama-34B-4bits是CodeFuse-CodeLlama-34B模型的4bits量化版本,后者是通过QLoRA对基座模型CodeLlama-34b-Python进行多代码任务微调而得到的代码大模型,模型输入长度为4K。

导读

继2023-09-11 CodeFuse-CodeLlama-34B发布,HumanEval pass@1指标达到74.4% (贪婪解码), 为当前开源SOTA。最近,CodeFuse-CodeLlama-34B 4bits量化版本发布,CodeFuse-CodeLlama-34B-4bits是CodeFuse-CodeLlama-34B模型的4bits量化版本,后者是通过QLoRA对基座模型CodeLlama-34b-Python进行多代码任务微调而得到的代码大模型,模型输入长度为4K。


经4bits量化后,CodeFuse-CodeLlama-34B-4bits可用单张A10 (24GB显存)或者RTX 4090 (24GB显存)加载,同时,量化后的模型在Humaneval pass@1指标上仍取得了73.8%的表现。


评测表现(代码):

模型

HumanEval(pass@1)

日期

CodeFuse-CodeLlama-34B

74.4%

2023.9

CodeFuse-CodeLlama-34B-4bits

73.8%

2023.9

WizardCoder-Python-34B-V1.0

73.2%

2023.8

GPT-4(zero-shot)

67.0%

2023.3

PanGu-Coder2 15B

61.6%

2023.8

CodeLlama-34b-Python

53.7%

2023.8

CodeLlama-34b

48.8%

2023.8

GPT-3.5(zero-shot)

48.1%

2022.11

OctoCoder

46.2%

2023.8

StarCoder-15B

33.6%

2023.5

LLaMA 2 70B(zero-shot)

29.9%

2023.7


环境配置与安装

  1. python 3.8及以上版本
  2. pytorch 1.12及以上版本,推荐2.0及以上版本
  3. 建议使用CUDA 11.4及以上(GPU用户需考虑此选项)


使用步骤

本文在PAI-DSW运行 (可单卡运行)


模型链接和下载

CodeFuse量化模型现已在ModelScope社区开源,


CodeFuse-CodeLlama-34B 4bits:

https://modelscope.cn/models/codefuse-ai/CodeFuse-CodeLlama-34B-4bits/summary


社区支持直接下载模型的repo:

from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('codefuse-ai/CodeFuse-CodeLlama-34B-4bits', 'v1.0.0')

模型推理

依赖项:

依赖项:

pip install "modelscope>=1.9.1"
pip install auto_gptq


推理代码:

import os
import torch
import time
from modelscope import AutoTokenizer, snapshot_download
from auto_gptq import AutoGPTQForCausalLM
os.environ["TOKENIZERS_PARALLELISM"] = "false"
def load_model_tokenizer(model_path):
    """
    Load model and tokenizer based on the given model name or local path of downloaded model.
    """
    tokenizer = AutoTokenizer.from_pretrained(model_path, 
                                              trust_remote_code=True, 
                                              use_fast=False,
                                              lagecy=False)
    tokenizer.padding_side = "left"
    tokenizer.pad_token_id = tokenizer.convert_tokens_to_ids("<unk>")
    tokenizer.eos_token_id = tokenizer.convert_tokens_to_ids("</s>")
    model = AutoGPTQForCausalLM.from_quantized(model_path, 
                                                inject_fused_attention=False,
                                                inject_fused_mlp=False,
                                                use_cuda_fp16=True,
                                                disable_exllama=False,
                                                device_map='auto'   # Support multi-gpus
                                              )
    return model, tokenizer
def inference(model, tokenizer, prompt):
    """
    Uset the given model and tokenizer to generate an answer for the speicifed prompt.
    """
    st = time.time()
    prompt = prompt if prompt.endswith('\n') else f'{prompt}\n'
    inputs =  f"<|role_start|>human<|role_end|>{prompt}<|role_start|>bot<|role_end|>"
    input_ids = tokenizer.encode(inputs, 
                                  return_tensors="pt", 
                                  padding=True, 
                                  add_special_tokens=False).to("cuda")
    with torch.no_grad():
        generated_ids = model.generate(
            input_ids=input_ids,
            top_p=0.95,
            temperature=0.1,
            do_sample=True,
            max_new_tokens=512,
            eos_token_id=tokenizer.eos_token_id,
            pad_token_id=tokenizer.pad_token_id              
        )
    print(f'generated tokens num is {len(generated_ids[0][input_ids.size(1):])}')
    outputs = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) 
    print(f'generate text is {outputs[0][len(inputs): ]}')
    latency = time.time() - st
    print('latency is {} seconds'.format(latency))
if __name__ == "__main__":
    model_dir = snapshot_download('codefuse-ai/CodeFuse-CodeLlama-34B-4bits', revision='v1.0.0')
    prompt = 'Please write a QuickSort program in Python'
    model, tokenizer = load_model_tokenizer(model_dir)
    inference(model, tokenizer, prompt)


资源消耗:

我们测量了模型加载后占用的显存占用情况,以及输入2048/1024 tokens并输出1024/2048 tokens时的显存使用情况,如下表所示

精度

模型空载

输入

2048 tokens + 输出1024 tokens

输入

1024 tokens + 输出2048 tokens

bfloat16

64.89GB

69.31GB

66.41GB

int4

19.09GB

22.19GB

20.78GB


int4示例代码显存占用:



魔搭投稿地址:https://survey.alibaba.com/apps/zhiliao/--lb2a9di


相关文章
|
8月前
|
人工智能 边缘计算 测试技术
MLPerf推理基准测试引入Llama 2 新结果公布
【4月更文挑战第5天】MLCommons发布了最新MLPerf推理基准测试结果,涉及数据中心和边缘计算,引入了大型语言模型Llama 2进行性能评估。Llama 2在OPEN ORCA数据集上的表现提升测试复杂性,提供了更全面的性能数据。MLPerf测试涵盖图像分类、对象检测等边缘计算任务,为开发者和研究人员提供参考。测试结果存在硬件和软件配置影响的局限性,但仍是衡量AI系统性能的重要标准。
144 9
MLPerf推理基准测试引入Llama 2 新结果公布
|
8月前
|
自然语言处理 数据可视化 物联网
Qwen1.5-MoE开源,魔搭社区推理训练最佳实践教程来啦
通义千问团队推出Qwen系列的首个MoE模型,Qwen1.5-MoE-A2.7B。
|
数据可视化 PyTorch 算法框架/工具
零一万物Yi-34B-Chat 微调模型及量化版开源!魔搭社区最佳实践教程!
11月24日,零一万物基正式发布并开源微调模型 Yi-34B-Chat,可申请免费商用。同时,零一万物还为开发者提供了 4bit/8bit 量化版模型,Yi-34B-Chat 4bit 量化版模型可以直接在消费级显卡(如RTX3090)上使用。魔搭社区已支持下载、推理训练体验,并推出相关教程,欢迎大家来玩!
|
人工智能 物联网 测试技术
CodeFuse发布34B-4bit单卡4090可部署模型
CodeFuse 是蚂蚁集团自研的代码生成专属大模型,可以根据开发者的输入提供智能建议和实时支持,帮助开发者自动生成代码、自动增加注释、自动生成测试用例、修复和优化代码等,以提升研发效率。
499 0
CodeFuse发布34B-4bit单卡4090可部署模型
|
运维 并行计算 C语言
TensorRT-LLM在CodeFuse-CodeLlama-34B上的int4量化实践
Codefuse是由蚂蚁集团开发的专门用于支持整个软件开发生命周期的大型代码语言模型(Code LLMs),涵盖设计、需求、编码、测试、部署、运维等关键阶段。致力于打造创新的解决方案,让软件开发者们在研发的过程中如丝般顺滑。
432 0
|
3月前
|
机器学习/深度学习 人工智能 并行计算
DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍
DeepSpeed Chat 是一款革命性的平台,专为简化和加速类ChatGPT模型的训练而设计。通过一键式脚本,用户可以轻松完成从预训练模型到生成自定义ChatGPT模型的全过程。该系统复刻了InstructGPT的RLHF训练方法,并集成了一系列优化技术,如DeepSpeed Hybrid Engine,大幅提升了训练效率和经济性。使用DeepSpeed Chat,即使是拥有数千亿参数的大模型,也能在短时间内完成训练,且成本显著降低。无论是单GPU还是多GPU集群环境,DeepSpeed Chat都能提供卓越的性能和易用性,让RLHF训练变得更加普及。
DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍
|
4月前
|
人工智能 自然语言处理 算法
魔搭上新啦! 智源千万级指令微调数据集Infinity-Instruct,Llama3.1仅微调即可接近GPT-4
智源研究院在今年6月推出了千万级指令微调数据集Infinity Instruct。Infinity Instruct在 Huggingface等平台发布后,快速到达了Huggingface Dataset的Trending第一
魔搭上新啦! 智源千万级指令微调数据集Infinity-Instruct,Llama3.1仅微调即可接近GPT-4
|
3月前
|
Shell Docker Python
LLM-02 大模型 本地部署运行 ChatGLM3-6B(13GB) 双卡2070Super8GB 环境配置 单机多卡 基于LLM-01章节 继续乘风破浪 为大模型微调做准备
LLM-02 大模型 本地部署运行 ChatGLM3-6B(13GB) 双卡2070Super8GB 环境配置 单机多卡 基于LLM-01章节 继续乘风破浪 为大模型微调做准备
83 1
|
5月前
|
数据采集 人工智能 自然语言处理
Llama 3.1发布:4050亿参数模型,迄今为止最强的开源大模型之一
Meta宣布发布Llama 3.1 405B,这一目前公开的最大且最先进的语言模型,标志着开源语言模型新时代的到来。Llama 3.1 405B不仅在常识理解、数学、工具使用及多语言翻译等功能上媲美顶尖AI模型,其8B和70B版本亦支持多种语言,拥有长达128K的上下文理解能力。该模型在150多个多语言基准测试中表现出色,并经过广泛的人工评估。为克服大规模训练挑战,Meta采用标准解码器架构和迭代后训练策略,大幅提升了数据质量和模型性能。此外,Llama 3.1通过监督微调、拒绝采样和直接偏好优化等手段提高了模型对指令的响应性和安全性。
99 2
|
6月前
|
算法 API 数据中心
魔搭社区利用 NVIDIA TensorRT-LLM 加速开源大语言模型推理
魔搭社区于 2022 年 11 月初创建,首次在业界提出了 “模型即服务”( MaaS, Model as a Service)的理念。

热门文章

最新文章