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

news2024/12/27 13:48:24

一、前言

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

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

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


二、术语

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, GenerationConfig

device = "cuda" 

modelPath='/data/model/qwen2.5-coder-7b-instruct'

def loadTokenizer():
    # print("loadTokenizer: ", modelPath)
    tokenizer = AutoTokenizer.from_pretrained(modelPath)
    return tokenizer

def loadModel(config):
    print("loadModel: ",modelPath)
    model = AutoModelForCausalLM.from_pretrained(
        modelPath,
        torch_dtype="auto",
        device_map="auto"
    )
    model.generation_config = config
    return model


if __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, GenerationConfig

device = "cuda"

modelPath = '/data/model/qwen2.5-coder-7b-instruct'


def loadTokenizer():
    # print("loadTokenizer: ", modelPath)
    tokenizer = AutoTokenizer.from_pretrained(modelPath)
    return tokenizer


def loadModel(config):
    # print("loadModel: ",modelPath)
    model = AutoModelForCausalLM.from_pretrained(
        modelPath,
        torch_dtype="auto",
        device_map="auto"
    )
    model.generation_config = config
    return model


if __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 nums

if __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.coloradmin.cn/o/2158330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

freemobus阅读笔记

以下&#xff0c;仅仅在freemodbus中有效 pvMBFrameStart中的pv是什么的缩写 p代表指针&#xff0c;V母鸡&#xff0c;MBFrameStart指的是modbus系统的开始 pusLength 中的pus p代表指针&#xff0c;u代表无符号 s代表short短整型 pucFrame 中的puc p代表指针&#xff0c…

Linux学习笔记13---GPIO 中断实验

中断系统是一个处理器重要的组成部分&#xff0c;中断系统极大的提高了 CPU 的执行效率&#xff0c;本章会将 I.MX6U 的一个 IO 作为输入中断&#xff0c;借此来讲解如何对 I.MX6U 的中断系统进行编程。 GIC 控制器简介 1、GIC 控制器总览 I.MX6U(Cortex-A)的中断控制器…

测试文件和数据库文件

接口测试 flaks项目入口文件manage.py路由配置 import requests#首先面向对象作封装&#xff0c;避免相同代码反复编写 class HttpApiTest:def test_get(self,url,data{}): #用来测试get方法的接口 #self通过共享self类中间的变量 #url用来请求接口 #data可传可不传res reques…

明日周刊-第21期

断更了一段时间&#xff0c;现在开始续上。本周的最大的杭州科技活动应该就是云栖大会了&#xff0c;一年一度的云栖大会也不知不觉经过了十年&#xff0c;趁着周六我也去好好体验了一番。&#xff08;ps&#xff1a;下周炉石传说重回国服了&#xff0c;各位都准备好了吗&#…

多个异构系统用户权限如何统一管理?

企业内部往往部署了多个业务系统来支撑不同的业务流程&#xff0c;然而&#xff0c;这些系统之间的标准不一&#xff0c;导致跨系统操作时权限不透明&#xff0c;难以确保数据安全与合规操作。同时&#xff0c;频繁的权限变更与维护工作量大且效率低&#xff0c;给企业带来了诸…

干货:企业微信批量删除客户指南!

随着客户量的增加&#xff0c;管理员常常面临一个问题——如何批量删除客户。其实新版本的应用支持批量删除一些单向客户&#xff0c;可以一次性把外部联系人名额空出很多来了。 具体的操作步骤是&#xff1a; 手机端软件-通讯录-我的客户-微信客户-全部微信客户-单向微信客户…

2024已然过半,AI技术卷到哪儿了?

可以说&#xff0c;科技的发展真的是日新月异&#xff0c;2024年年初&#xff0c;大模型Sora的出现&#xff0c;改变了短视频行业的演变方向&#xff0c;使得AI技术不再只是停留在文生文&#xff0c;文生图阶段&#xff0c;而是发展到了文生视频领域。2024年5月&#xff0c;回忆…

短剧APP开发功能特点,短剧爆火下的市场发展

今年以来&#xff0c;短剧迅速爆发&#xff0c;为市场带来了不菲的成绩&#xff01;短剧的火爆&#xff0c;直接推动了短剧的创作&#xff0c;更是激发了短剧制作商的创作热情&#xff0c;各种类型的短剧层出不穷&#xff0c;为观众带来了多种多样的短剧选择。 近年来&#xf…

区块链中的去中心化,点对点网络系统,所有权本质,,双花问题的详解

去中心化的概念 区块链去中心化是指一种分布式数据库技术&#xff0c;它通过加密算法和共识机制在网络中的多个节点上存储数据&#xff0c;从而实现数据的去中心化管理。在区块链去中心化中&#xff0c;没有中心化的权威机构或服务器来控制或验证数据&#xff0c;而是依赖于网络…

又到了金九银十,你的简历写好了吗?

又到了金九银十的招聘季&#xff0c;不过这几年求职环境越来越差&#xff0c;相比于跳槽找新机会&#xff0c;大家可能更倾向于守住自己手头的工作&#xff0c;稳字当头。当然&#xff0c;也有很多工作实在干烦了的朋友&#xff0c;想要换个新赛道试试。今天就给大家带来一个新…

玩转Google SERP API 说明

Google SERP API 对接说明 Google SERP&#xff08;Search Engine Results Page&#xff09;是用户在Google搜索引擎中输入查询后看到的结果页面。它显示自然搜索结果、广告、特色摘要、知识图谱以及图片、视频等多种内容&#xff0c;旨在为用户提供最相关的信息。 本文将详细…

防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)

实验要求 根据实验要求配置防火墙&#xff1a; 合理部署防火墙安全策略以及安全区域实现内网用户可以访问外网用户&#xff0c;反之不能访问内网用户和外网用户均可以访问公司服务器 实验配置 步骤一&#xff1a;配置各个终端、防火墙端口IP地址 终端以服务器为例&#xff…

go解决引入私有包报错“Repository owner does not exist“的两种方式

当你写好引入的私有包,执行go mod tidy报错: Gogs: Repository owner does not exist fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 目前我的两种解决方案: 一、拉群整个…

论文集搜索网站-dblp 详细使用方法

分享在dblp论文集中的两种论文搜索方式&#xff1a;关键字搜索&#xff0c;指定会议/期刊搜索。 关键字搜索 进入dblp官方网址dblp: computer science bibliography&#xff0c;直接在上方搜索栏&#xff0c;搜索关键字&#xff0c;底下会列出相关论文。 指定会议/期刊搜索 …

Java多线程(1)—线程基础

一、关于线程 1.1 简介 计算机线程&#xff08;Thread&#xff09;是操作系统能够进行运算调度的最小单位。线程的优势在于提高了程序的效率和响应能力&#xff0c;尤其在处理 I/O 操作或多任务时。多线程编程能够充分利用多核处理器的计算能力&#xff0c;达到更高的性能。 …

解决IDEA出现:java: 程序包javax.servlet不存在的问题

问题截图&#xff1a; 解决如下&#xff1a; 1. 点击文件——>项目结构 2. 点击库——>点击——>点击java 3. 找到Tomcat的文件夹&#xff0c;找到lib文件夹中的servlet-api.jar&#xff0c;点击确定 4. 选择要添加的模块 5. 点击应用——>确定

Deep Guided Learning for Fast Multi-ExposureImage Fusion

Abstract 我们提出了一种快速多重曝光图像融合&#xff08;MEF&#xff09;方法&#xff0c;即 MEF-Net&#xff0c;用于任意空间分辨率和曝光次数的静态图像序列。 我们首先将输入序列的低分辨率版本提供给全卷积网络以进行权重图预测。 然后&#xff0c;我们使用引导滤波器联…

NGO电工钢行业分析:未来几年年复合增长率CAGR为2.7%

NGO电工钢&#xff0c;顾名思义&#xff0c;其磁性具有各向同性性&#xff08;也叫各向同性电工钢&#xff09;&#xff0c;广泛应用于制造各类电机、发电机铁心。 据QYResearch调研团队最新报告“全球NGO电工钢市场报告2024-2030”显示&#xff0c;预计2030年全球NGO电工钢市场…

镜舟科技面对亿级数据分析场景,如何做到金融级放心用?

引言 中国金融数据库行业研究报告&#xff08;2023&#xff09;指出&#xff0c;自 2020 年的⾦融信创元年&#xff0c; 中国数据库迎来了⾼速发展。 进入 2024 年&#xff0c;镜舟科技的商业拓展速度进一步加快。在过去半年里&#xff0c;镜舟科技与十余家头部股份制银行、…