LLM 系列 | 21 : Code Llama实战(上篇) : 模型简介与评测

news2024/11/20 11:16:13

引言

小伙伴们好,我是《小窗幽记机器学习》的小编:卖热干面的小女孩。

个人CSDN首页:JasonLiu1919_面向对象的程序设计,深度学习,C++-CSDN博客

今天开始以2篇小作文介绍代码大语言模型Code Llama。上篇主要介绍Code Llama的基本情况并基于HuggingFace上部署的Demo快速体验下Code Llama的实战效果,下篇则主要介绍如何在本地部署Code Llama。感兴趣的小伙伴可以关注下!

模型简介

Code Llama是基于Llama 2面向编程领域的大型代码语言模型(即代码大模型),基于该工具可以使用文本提示(Prompt)直接生成或者理解代码。Code Llama具备包括代码补全能力,最长可以生成 100k 个token。此外,Code Llama还具备编程任务的零样本指令遵循能力,即面向自然语言的指令编程。官方宣称Code Llama在公开的编程任务中效果最好,能够使开发人员的工作流程更快速、更高效,并降低编程的学习门槛。Code Llama 在用作生产力和教育工具方面潜力巨大,能够帮助程序员编写更加健壮、有良好文档的软件。

目前(2023年9月12日)代码语言模型的leaderboard结果如下:

Code Llama 是 Llama 2 的代码专用版本,在特定代码数据集上进一步训练 Llama 2 并从同一数据集中采样更多数据,进行更长时间训练。相对于Llama 2,Code Llama的编码能力得到提升,可以根据代码和自然语言提示(例如:“编写一个输出斐波那契数列的函数”)生成代码,也可以进行代码解读。Code Llama还可以用于代码补全和调试。Code Llama支持当下流行的多种编程语言,包括Python、C++、Java、PHP、TypeScript(JavaScript)、C#、Bash等。

此次官方发布了三种参数规模的 Code Llama,分别为 7B、13B 和 34B。这些模型都基于 500B 个tokens的 代码和与代码相关的数据进行训练。7B 和 13B 的Code Llama模型和Code Llama instruct模型还引入with fill-in-the-middle(填充中间,FIM)的训练方式,使其能够将代码插入到现有代码中,这意味着可以直接支持诸如代码填充之类的任务。

这三种模型适用于不同延迟要求和服务场景。比如,7B 模型可以部署在单个GPU上,34B 模型返回结果最佳,可以提供更好地辅助编码,但更小的 7B 和 13B 模型速度更快,更适用于需要低延迟的任务,如实时代码补全。

官方还进一步微调了 Code Llama 的两个变体:Code Llama - Python 和 Code Llama - Instruct。

  • 「Code Llama - Python」 是针对特定语言Python的Code Llama,在 100B个token Python 代码上进行进一步微调。Python是代码生成中最常用的benchmarked语言,且Python和PyTorch在AI社区中扮演着重要角色。Code Llama-Python这个专门的模型可以提供额外的效用。

  • 「Code Llama - Instruct」 是一种经过指令微调和对齐的Code Llama变体。指令微调其实是继续训练,只是目标函数不同。模型会接收自然语言指令作为输入,再输出符合要求的输出。Instruct的方式使得模型在理解人类自然语言形式提示的时候表现更好。在代码生成场景可以优先使用 Code Llama - Instruct。

「Code Llama、Code Llama - Python、Code Llama - Instruct」这三类模型之间的关系如下:

与 Llama 2 一样,官方对模型的微调版本应用了相当大的安全缓解措施。有关模型训练、架构和参数、评估、AI安全性等详细信息,可以参阅研究论文。Meta官方宣称,对AI采取开放的方式,是发展创新、安全和负责任的新AI工具的最佳方式,因此他们将 Code Llama 以相同的社区许可证(与 Llama 2 相同)发布,供研究和商业用途使用。

以下通过 huggingface 上发布的Demo实测Code Llama在代码任务上的效果。

先直接剧透下结论:

功能任务是否正常运行结果是否符合预期总体评估
代码补全(13B版)判断是否存在中文字符yesyes⭐⭐⭐⭐⭐
代码补全(13B版)pandas指定列增加行数据nono⭐⭐
代码填充(13B版)去除非ascii字符yesyes⭐⭐⭐⭐⭐
指令编程(13B版)pandas指定列增加行数据nono⭐⭐
指令编程(33B版)pandas指定列增加行数据yesno⭐⭐⭐

Code Llama实测(13B版):代码补全

为了快速亲测效果,使用官方基于CodeLlama-13b-hf发布的Demo。需要注意的是,这里使用的模型不是Chat版,所以只能用于代码补齐,不能对话方式生成代码。

测试1:判断是否有中文字符

输入:

# define a function, Check whether Chinese characters exist
def check_cn_char(test_str):

输出:

# define a function, Check whether Chinese characters exist
def check_cn_char(test_str):
    for c in test_str:
        if u'\u4e00' <= c <= u'\u9fff':
            return True
    return False

# define a function, Check whether English characters exist
def check_en_char(test_str):
    for c in test_str:
        if 'a' <= c <= 'z' or 'A' <= c <= 'Z':
            return True
    return False

# define a function, Check whether numbers exist
def check_num(test_str):
    for c in test_str:
        if '0' <= c <= '9':
            return True
    return False

# define a function, Check whether special characters exist
def check_special_char(test_str):
    for c in test_str:
        if not (u'\u4e00' <= c <= u'\u9fff') and not ('a' <= c <= 'z' or 'A' <= c <= 'Z') and not ('0' <= c <= '9'):
            return True
    return False

# define a function, Check whether the password

测试check_cn_char函数,能够正常运行,且结果符合预期。

测试2:pandas指定列增加行数据

输入:

# define a function, append pandas column with input test_list
def df_append_rows(test_df,target_column, append_list)

输出结果如下:

# define a function, append pandas column with input test_list
def df_append_rows(test_df,target_column, append_list) :
    for i in range(len(append_list)) :
        test_df[target_column] = test_df[target_column].append(append_list[i])
    return test_df

# define a function, append pandas column with input test_list
def df_append_rows_with_index(test_df,target_column, append_list) :
    for i in range(len(append_list)) :
        test_df[target_column] = test_df[target_column].append(append_list[i], ignore_index=True)
    return test_df

# define a function, append pandas column with input test_list
def df_append_rows_with_index_and_columns(test_df,target_column, append_list) :
    for i in range(len(append_list)) :
        test_df[target_column] = test_df[target_column].append(append_list[i], ignore_index=True, sort=False)
    return test_df

# define a function, append pandas column with input test_

直接测试df_append_rows函数,报错:

TypeError: cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid

Code Llama实测(13B版):代码填充

由于代码填充功能仅局限于Code Llama和 Code Llama - Instruct的7B 和 13B 版模型中,本文选用Code Llama-13B进行实测,Demo地址进行体验。

输入:

def remove_non_ascii(s: str) -> str:
    """ <FILL_ME>
    return result

输出结果:

def remove_non_ascii(s: str) -> str:
    """ Remove non-ASCII characters from a string.

    Args:
        s (str): The string to be processed.

    Returns:
        str: The processed string.
    """
    result = ""
    for c in s:
        if ord(c) < 128:
            result += c
    return result

Code Llama实测(13B版):指令编程

使用官方基于CodeLlama-13b-Instruct-hf发布的Demo进行体验。

输入:

I have a pandas DataFrame df['text'], how can I directly add a list of data test_list to df['text'] to increase the number of rows?

输出:

上述代码测试,报错:

TypeError: cannot concatenate object of type '<class 'list'>'; only Series and DataFrame objs are valid

可以看出,Code Llama对于pandas部分函数的理解有待提高。

Code Llama实测(34B版):指令编程

在 huggingface 上选择codellama/CodeLlama-34b-Instruct-hf

输出结果:

生成的代码能够运行,但是结果不符合预期:

import pandas as pd

# create a sample dataframe with one column 'text'
df = pd.DataFrame({'text': ['hello', 'world']})

# create a list of new text values to be appended
new_values = ['goodbye', 'cruel world']

# append the new values to the 'text' column
df['text'].append(pd.Series(new_values))

print(df)

需要人工修正下:

# 以下是人工修改的结果,才可以得到符合预期的结果
tmp_df = df['text'].append(pd.Series(new_values))  # 人工修改
print(tmp_df)

总结

本文简要介绍Code Llama模型概况,同时通过huggingface上的Demo快速实测Code Llama的效果。撇开官方提供的case之后,亲测的几个case,虽然存在一些瑕疵,但整体效果也算还不错,期待后续的优化。

目前很多程序员已经在各种任务中使用LLM来协助开发。这确实使开发者的工作更高效,以便开发者可以专注于最具人本特色的方面,而不是重复性的任务。AI模型,特别是用于编码用途的LLM,从开放式的方法中受益最大。无论是在创新还是在安全性方面,公开可用的代码专用模型可以促进新技术的发展,从而改善人们的生活。未来可期!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094732.html

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

相关文章

Linux系统编程_文件编程第2天:写整数、结构体,fopen等

1. 文件编程小应用之修改程序的配置文件&#xff08;407.10&#xff09; FILE/demo14.c #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <s…

VSCode 调试 u-boot

文章目录 VSCode 调试 u-boot调试配置启动 u-boot 脚本调试界面重定向之后继续调试参考 VSCode 调试 u-boot 调试配置 参考 qemu基础篇——VSCode 配置 GDB 调试 要想调试 u-boot 只需要再添加一个 u-boot 的配置即可 {"version": "0.2.0","conf…

Python 机器学习入门之K近邻算法

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 第二章 Python 机器学习入门之逻辑回归 番外 Python 机器学习入门之K近邻算法 K近邻算法 系列文章目录前言一、K近邻算法简介1、定义2、用途 …

【Unity引擎核心-Object,序列化,资产管理,内存管理】

文章目录 整体介绍Native & Managed Objects什么是序列化序列化用来做什么Editor和运行时序列化的区别脚本序列化针对序列化的使用建议 Unity资产管理导入Asset Process为何要做引擎资源文件导入Main-Assets和 Sub-Assets资产的导入管线Hook&#xff0c;AssetPostprocessor…

对协议的基本认识

目录 前言 TCP网络计算器的模拟实现 制定协议 协议protocol的整体代码 TCP网络计算器的服务端类TcpServer TcpServer类的整体代码 TCP网络计算器的服务端 服务端CalServer.cc的整体代码 TCP网络计算器的客户端 客户端CalClient.cc的整体代码 对模拟实现的TCP网络计算…

匿名内部类的使用:(一看就会!!!)

知识点&#xff1a; 匿名内部类依旧是一个类&#xff0c;但是没有名字&#xff0c;同时还是一个对象&#xff1b;再类的内部&#xff1b; 使用方法指南&#xff1a; 先创建一个类&#xff0c;可以是接口、抽象类、普通父类需要明确声明关系 &#xff0c;父与子、实现接口、抽…

不容易解的题10.15

395.至少有K个重复字符的最长字串 395. 至少有 K 个重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/longest-substring-with-at-least-k-repeating-characters/description/?envTypelist&envIdZCa7r67M自认为是不好做的题。尤其…

自动化的采集链接和自动推送必应的在线工具

搜索LMCJL在线工具 进入后点击站长工具类型&#xff0c;选择必应自动推送 进去后&#xff0c;添加域名&#xff0c;点击数据管理&#xff0c;输入必应的token 然后开启推送&#xff0c;就可以实现&#xff0c;自动化采集链接&#xff0c;自动推送给必应。 必应的站长后台官网…

基于吉萨金字塔建造优化的BP神经网络(分类应用) - 附代码

基于吉萨金字塔建造优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于吉萨金字塔建造优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.吉萨金字塔建造优化BP神经网络3.1 BP神经网络参数设置3.2 吉萨金字…

16.SpringBoot前后端分离项目之简要配置一

SpringBoot前后端分离项目之简要配置一 前面对后端所需操作及前端页面进行了了解及操作&#xff0c;这一节开始前后端分离之简要配置 为什么要前后端分离 为了更低成本、更高效率的开发模式。 前端有一个独立的服务器。 后端有一个独立的服务器。两个服务器之间实时数据交换…

关于YOLOv8不显示GFlops的问题解决

屏幕显示GFlops需要安装此pip库: thop。但是没有安装&#xff0c;则不显示&#xff0c;导致debug比较困难。

Linux:进程调度的O(1)算法

文章目录 并发的理解程序运行时的数据进程切换的过程 内核的调度队列和调度原理 并发的理解 前面总结到了&#xff0c;关于并发的概念&#xff0c;并发针对的是单核的CPU上同时运行很多情况&#xff0c;并不是某个程序在CPU上运行就一直运行&#xff0c;而是根据一定的时间片和…

Linux C/C++ 嗅探数据包并显示流量统计信息

嗅探数据包并显示流量统计信息是网络分析中的一种重要技术&#xff0c;常用于网络故障诊断、网络安全监控等方面。具体来说&#xff0c;嗅探器是一种可以捕获网络上传输的数据包&#xff0c;并将其展示给分析人员的软件工具。在嗅探器中&#xff0c;使用pcap库是一种常见的方法…

怎么启动MySQL服务

你可能也遇到这样的问题&#xff0c;打开navicat&#xff0c;但是点击数据库连接不上&#xff0c;这就有可能是数据库服务没有启。报错如下图所示 解决方法一win11为例&#xff0c;右键此电脑&#xff0c;找到管理。 找到服务和应用吃程序&#xff0c;点击服务。 往下找到MySQL…

ti am335 RT-LINUX测试

RT-Linux是一个基于Linux内核的实时操作系统&#xff0c;它在满足Linux操作系统的通用性的同时兼顾 实时性能&#xff0c;它的核心是Linux内核的一个实时扩展&#xff0c;它为实时任务提供了必要的调度机制和时间管理。通过采用抢占式调度策略&#xff0c;高优先级的实时任务可…

肉眼无法读懂是二进制独有的浪漫——一篇博客学懂文件操作(C语言)

目录 一、为什么使用文件 二、什么是文件 2.1程序文件 2.2数据文件 2.3文本文件和二进制文件 2.4文件名 三、文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 3.3文件的顺序读写函数 3.3.1流的概念 3.3.2输入输出的概念 3.3.3函数操作 3.4文件的随机读写函…

miniblink学习

1.基本使用 main.cpp #include "webwidget.h" #include <QApplication> #include "wke.h" //工作目录是指当前目录&#xff0c;运行目录是指exe所在路径。 int main(int argc, char *argv[]) {QApplication a(argc, argv);//设置miniblink的全路径文…

C# GFPGAN 图像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…

leetcode-62.不同路径

1. 题目 2. 解答 dp[i][j]表示机器人位于第i&#xff0c;j位置的时候&#xff0c;有多少路径 如果i 0&#xff0c;dp[i][j] 1;如果j 0&#xff0c;dp[i][j] 1;其他情况dp[i][j] dp[i-1][j] dp[i][j - 1] #include <stdio.h>int solve(int m, int n) {int dp[m][…

一场直播脚本的策划及话术怎么写?

一场直播脚本的策划及话术参考 直播流程安排示范:120 分钟直播流程设计(过款型) 标准化直播话术单元(单款产品话术模板) I 直播 120 分钟标准化流程 I 分解为 4 个 30 分钟直播单元 I 30 分钟前期介绍 2-3 个款作为起步 每款持续时长 10 分钟,10 分钟的时间里 ①卖点引出 2 …