开源模型应用落地-Qwen2.5-Coder模型小试-码无止境(一)

ops/2024/9/23 23:29:27/

一、前言

     代码专家模型是一种基于人工智能的先进技术,旨在自动分析和理解大量代码库,并从中学习常见的编码模式和最佳实践。这种模型通过深度学习自然语言处理,能够提供准确而高效的代码建议,帮助开发人员在编写代码时有效地避免常见的错误和陷阱。

    利用代码专家模型,开发人员能够获得高效、准确且个性化的代码支持。这不仅显著提高了工作效率,还能在不同技术环境中简化软件开发流程。通过自动化的代码分析,开发人员可以更专注于创造性的编程任务,从而推动软件开发的创新与进步。

    总之,代码专家模型的引入不仅是技术的进步,更是软件开发方式的一次革命。它为开发者提供了更为强大的工具,使他们能够在复杂的技术环境中游刃有余,专注于更具创造性和挑战性的项目。随着这一技术的不断发展与普及,未来的软件开发将会更加高效、智能和富有创造力。


二、术语

2.1.Qwen2.5-Coder

    是通义千问新一代开源模型中用于编程的特定系列大语言模型(前身是 code qwen)。它具有以下特点:

1. 训练数据及规模方面

  • 在多达 5.5 万亿 tokens 的编程相关数据上作了训练,涵盖源代码、文本-代码关联数据、合成数据等,为模型提供了丰富的编程知识和模式。

2. 性能提升方面

  • 相比 code qwen 1.5,在代码生成、代码推理和代码修复方面有了显著提升,为开发者提供更高效、准确的代码辅助。

3. 应用基础方面

  • 为代码相关的实际应用如代码代理等提供了更全面的基础,让模型不仅局限于代码的生成,还能更好地适应各种代码相关任务的实际场景。

4. 上下文处理方面

  • 支持长上下文,最长可达 128k tokens,能够处理大规模的代码文本和复杂的编程逻辑。

5. 模型体系方面

  • 发布了三个基础语言模型和指令微调语言模型,包括 1.5B、7B 和未来的 32B(开发中)不同参数规模的版本,以满足不同用户和场景的需求。

2.2.Qwen2.5-Coder-7B-Instruct

    是在 Qwen2.5-Coder 的基础上通过指令微调得到的模型,它在多个任务上性能进一步提升,在多编程语言能力、代码推理、数学能力和基础能力等方面表现突出。


三、前置条件

3.1.基础环境

操作系统:centos7

Tesla V100-SXM2-32GB  CUDA Version: 12.2

3.2.下载模型

huggingface:

https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct/tree/main

ModelScope:

git clone https://www.modelscope.cn/qwen/Qwen2.5-Coder-7B-Instruct.git

PS:

1. 根据实际情况选择不同规格的模型

3.3.创建虚拟环境

conda create --name qwen2.5 python=3.10 

3.4.安装依赖库

conda activate qwen2.5
pip install transformers torch accelerate

四、使用方式

4.1.生成代码能力

# -*-  coding = utf-8 -*-
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfigdevice = "cuda" modelPath='/data/model/qwen2.5-coder-7b-instruct'def loadTokenizer():# print("loadTokenizer: ", modelPath)tokenizer = AutoTokenizer.from_pretrained(modelPath)return tokenizerdef loadModel(config):print("loadModel: ",modelPath)model = AutoModelForCausalLM.from_pretrained(modelPath,torch_dtype="auto",device_map="auto")model.generation_config = configreturn modelif __name__ == '__main__':prompt = "用Python写一个冒泡排序算法的例子"messages = [{"role": "system", "content": "你是一名Python编程助手,专注于生成高效、清晰和可读的Python代码。请确保代码遵循最佳实践,并添加适当的注释以便于理解。"},{"role": "user", "content": prompt}]config = GenerationConfig.from_pretrained(modelPath, top_p=0.9, temperature=0.45, repetition_penalty=1.1,do_sample=True, max_new_tokens=8192)tokenizer = loadTokenizer()model = loadModel(config)text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True)model_inputs = tokenizer([text], return_tensors="pt").to(device)generated_ids = model.generate(model_inputs.input_ids)generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]print(response)

调用结果:

在IDEA中运行模型生成的代码

结论:

模型能根据需求生成可运行代码

4.2.修改代码的能力

示例说明:

把冒泡排序正确的代码故意修改为错误,异常为:UnboundLocalError: local variable 'j' referenced before assignment

# -*-  coding = utf-8 -*-
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfigdevice = "cuda"modelPath = '/data/model/qwen2.5-coder-7b-instruct'def loadTokenizer():# print("loadTokenizer: ", modelPath)tokenizer = AutoTokenizer.from_pretrained(modelPath)return tokenizerdef loadModel(config):# print("loadModel: ",modelPath)model = AutoModelForCausalLM.from_pretrained(modelPath,torch_dtype="auto",device_map="auto")model.generation_config = configreturn modelif __name__ == '__main__':prompt = '''
我用Python写了一个冒泡排序的算法例子,但是运行结果不符合预期,请修改,具体代码如下:
def bubble_sort(nums):n = len(nums)for i in range(n):for j in range(0, n-i-1):if nums[j] < nums[j+1]:nums[j], nums[j+1] = nums[j+1], nums[j]return numsif __name__ == "__main__":unsorted_list = [64, 34, 25, 12, 22, 11, 90]print("原始列表:", unsorted_list)sorted_list = bubble_sort(unsorted_list)print("排序后的列表:", sorted_list)         
'''messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": prompt}]config = GenerationConfig.from_pretrained(modelPath, top_p=0.9, temperature=0.1, repetition_penalty=1.1,do_sample=True, max_new_tokens=8192)tokenizer = loadTokenizer()model = loadModel(config)text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True)model_inputs = tokenizer([text], return_tensors="pt").to(device)generated_ids = model.generate(model_inputs.input_ids)generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]print(response)

调用结果:

在IDEA中运行模型修正的代码

结论:

模型能发现问题,并把异常修正


http://www.ppmy.cn/ops/115015.html

相关文章

Ubuntu搭建java开发环境

一&#xff1a;Ubuntu安装 1、下载Ubuntu 24.04.1 LTS 官网下载地址&#xff1a;https://releases.ubuntu.com/24.04.1/ubuntu-24.04.1-desktop-amd64.iso 可以直接点击这里下载 2、使用VMware安装 新建虚拟机 之后一直下一步&#xff0c;到如下界面&#xff0c;选择 刚刚…

【C++】10道经典面试题带你玩转二叉树

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Leetcode/牛客网 目录 一.根据二叉树创建字符串 二.二叉树的层序遍历 三.二叉树的层序遍历 II 四.二叉树的最近公共祖先 五.二叉搜索树与双向链表 六.从前序与中序遍历序列构造二叉树 七.从中序与后序遍历…

biopython MMCIFParser模块介绍

Biopython 中的 MMCIFParser 模块是专门用于解析 .mmCIF(Macromolecular Crystallographic Information File)格式文件的工具。.mmCIF 是一种常用于存储生物大分子(如蛋白质、核酸等)三维结构信息的标准格式,它是 PDB 格式的替代格式,能够存储更复杂、更丰富的结构数据。…

Java毕业设计 基于SpringBoot和Vue自习室管理系统

Java毕业设计 基于SpringBoot和Vue自习室管理系统 这篇博文将介绍一个基于SpringBoot框架和Vue开发的自习室管理系统&#xff0c;适合用于Java毕业设计。 功能介绍 学生 登录 个人中心 修改密码 系统首页 自习室浏览 学生预约记录 管理员  登录 个人中心 修改密码 系统…

设计模式--责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;其主要目的是将请求的发送者和接收者解耦&#xff0c;使得多个对象都有机会处理请求。通过将这些对象连接成一条链&#xff0c;沿链传递请求&#xff0c;直到某个对象处理该…

【Linux】Docker:离线主机部署

在网络环境下准备 Docker 下载 Docker 安装包&#xff1a; 在另一台有网络连接的计算机上&#xff0c;访问 Docker 官方下载页面。选择并下载适合您系统的 Docker 版本&#xff0c;通常是最新的稳定版本&#xff0c;例如 docker-<version>.tgz。 传输文件&#xff1a;…

【设计模式-享元】

Flyweight Pattern&#xff08;享元模式&#xff09; 是一种结构型设计模式&#xff0c;旨在通过共享对象来减少内存使用和提高性能。享元模式特别适用于需要大量相似对象的场景&#xff0c;可以有效地减少内存开销。 核心思想 享元模式通过将对象的共享部分&#xff08;共享…

6、论文阅读:水下图像增强基准数据集及其他数据集

水下图像增强基准数据集及其他数据集 前言引言贡献现有方法、评估指标和数据集:概述水下增强方法基于补充信息的方法基于非物理模型的方法基于物理模型的方法数据驱动的方法水下图像质量评估完整参考指标没有参考指标水下图像数据集提出基准数据集数据收集参考图像的生成评估与…