谷歌官方力作——CodeGemma代码语言模型

news2024/11/28 2:31:00

  每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/

什么是CodeGemma

CodeGemma是谷歌开发的一系列专注于代码的大型语言模型(LLM)家族,基于先前训练好的2B和7B Gemma检查点。CodeGemma进一步在主要是英语的数据、数学和编程代码上训练了额外的5000亿标记,以增强逻辑和数学推理能力,适用于代码补全和生成。

CodeGemma 2B专门针对代码填充训练,适用于需要快速代码补全和生成的场景,特别是在延迟和/或隐私非常关键的环境中。CodeGemma 7B的训练数据包括80%的代码填充数据和20%的自然语言,可以用于代码补全以及代码和语言的理解和生成。CodeGemma 7B Instruct经过了针对指令跟随的微调,特别适用于围绕代码、编程或数学推理话题的对话使用。所有模型都维持与其前代相同的8000标记的上下文大小。

评估结果

在Python的HumanEval基准测试中,CodeGemma-7B在同等大小的7B模型中表现出色,除了DeepSeek-Coder-7B外。对Java、JavaScript和C++等其他编程语言的评估也显示出优秀的性能,这些语言的评估是通过MultiPL-E(HumanEval的翻译)进行的。技术报告显示,该模型在GSM8K上的表现在7B模型中最佳。指令版本CodeGemma-7B-it在HumanEval和MBPP上对最受欢迎的语言表现得更好。

使用CodeGemma

你可以在这个空间或下面嵌入的聊天机器人中轻松尝试CodeGemma模型(70亿参数):

这个空间展示了由谷歌开发的CodeGemma-7B-it模型。CodeGemma是基于Gemma之上构建的一系列轻量级开放代码模型。随意使用,或复制以私下运行!https://huggingface.co/spaces/ysharma/CodeGemma

Prompt格式

对于CodeGemma 2B和CodeGemma 7B模型,它们使用填充(infilling)技术来进行代码补全,这包括代码、注释、文档字符串和导入语句。CodeGemma通过“填充中间”(FIM)目标进行训练,你需要提供前缀和后缀作为补全的上下文。使用以下标记来分隔输入的不同部分:

  • 前置标记(`<bos>`或类似):位于我们希望运行补全操作之前的上下文前。
  • 光标定位标记(通常是特定的分隔符或符号):你必须将此标记放置在编辑器中光标的确切位置,因为这是模型将进行代码补全的位置。
  • 提示标记(如`<prompt>`):邀请模型执行生成的提示。

此外,还有提供多文件上下文的标记。具体使用示例将在“与Transformers一起使用”部分展示。

对于CodeGemma 7B Instruct模型,它使用与基础Gemma指令调优版本相同的提示格式,遵循以下对话结构:

```
<bos><start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
LaMDA<end_of_turn>
<start_of_turn>model
LaMDA who?<end_of_turn>
```

像Gemma模型一样,复现这种格式最简单的方法是使用Transformers库中提供的聊天模板。这些模板通过预定义的标记来结构化输入和输出,从而简化了与模型的交互过程,并使其更易于集成和使用。使用这种结构化输入,模型能够更准确地解析和响应用户的查询,这对于构建交互式AI应用尤为重要。

使用Transformers

最新4.39版的变压器大放异彩,带来了CodeGemma这个新玩意儿,让你可以在Hugging Face生态系统中尽情挥洒,例如:

- 训练和推断的脚本样例
- 安全的文件格式(safetensors)
- 配合比特小零件的4位量化工具,PEFT高效调参技术,还有闪电般的注意力机制2代
- 各种小工具助你运行模型
- 轻松部署模型的出口机制
像Gemma模型一样,CodeGemma也能和torch.compile()完美配合,给推断速度来个大提升。

惊喜加码:我们还特地准备了一个Colab笔记本,让你一键试用这个模型哦。

想要加入CodeGemma的酷炫行列,先来个升级保持最新:

pip install --upgrade transformers

下面这段代码示范如何用transformers来实现codegemma-2b的代码补全。记得,这玩意儿大概要6GB的RAM,用float16精度就能在你的家用GPU上跑起来。

```python
from transformers import GemmaTokenizer, AutoModelForCausalLM
import torch

model_id = "google/codegemma-2b"
tokenizer = GemmaTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.float16
).to("cuda:0")

prompt = '''\
import datetime
def calculate_age(birth_year):
    """根据出生年份计算年龄"""
    current_year = datetime.date.today().year
    
    return age\
'''

inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
prompt_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0][prompt_len:]))
```

注意,光标位置的 token 会告诉你代码该从哪儿接着写。这段代码的结果可能如下:

```python
age = current_year - birth_yeartest_calculate_age.py

    assert calculate_age(1990) == 33
    assert calculate_age(1980) == 43
    assert calculate_age(1970) == 53
    assert calculate_age(1960) == 63
    assert calculate_age(1950) == 73
```

CodeGemma 7B通常会比较啰嗦,可能会在代码完结后还不自觉地多嘴几句。如果想要提前结束生成,可以设置一些终止符,像这样:

```python
FIM_PREFIX = ''
FIM_SUFFIX = ''
FIM_MIDDLE = ''
FIM_FILE_SEPARATOR = ''

terminators = tokenizer.convert_tokens_to_ids(
    [FIM_PREFIX, FIM_MIDDLE, FIM_SUFFIX, FIM_FILE_SEPARATOR]
)
terminators += [tokenizer.eos_token_id]

outputs = model.generate(
  **inputs,
  max_new_tokens=100,
  eos_token_id=terminators,
)
```

这样一来,一旦碰到任何一个终止符,生成就会立刻停止。

Google Cloud集成

你可以通过Vertex AI或Google Kubernetes Engine(GKE)在谷歌云上部署和训练Gemma,使用文本生成推理和Transformers。

推理端点集成

你还可以在Hugging Face的推理端点上部署CodeGemma,该端点使用文本生成推理作为后端。文本生成推理是Hugging Face开发的生产就绪的推理容器,使大型语言模型的部署变得简单。它具有连续批处理、令牌流处理、多GPU上的张量并行快速推理等特性,并在Apache 2许可下分发。

from huggingface_hub import InferenceClient

client = InferenceClient(model=IE_ENDPOINT)

prompt = """\
<|fim_prefix|>import <|fim_suffix|>

if __name__ == '__main__':
  sys.exit(0)<|fim_middle|>\
"""

client.text_generation(prompt=prompt)

想要了解更多关于使用Hugging Face推理端点部署大型语言模型的信息,请查看之前的博客文章。注意,T4s不支持bfloat16格式,因此你将需要使用不同的GPU选项。

这就是关于CodeGemma及其在代码生成、补全和对话使用方面的潜力和应用的概述,以及如何将其与现有的云和推理服务集成的详细信息。

为了更全面地利用CodeGemma,下面继续介绍一些关键的集成和使用策略,包括如何优化模型以适应不同的使用场景和平台。

结束语

通过以上介绍,您现在应该对CodeGemma及其与Google Cloud和Hugging Face推理端点的集成有了全面的了解。无论是在处理代码生成、补全任务,还是构建对话式AI,CodeGemma都提供了强大的功能和灵活的部署选项。这些模型的开放性和可扩展性使其成为研究者和开发者的强大工具,可以帮助他们在复杂的编程和人工智能挑战中取得进展。

此外,随着AI和机器学习技术的不断发展,我们期待看到CodeGemma如何继续演化,以适应日益增长的计算需求和更为复杂的应用场景。随着这些技术的成熟,使用这些高级工具的企业和开发者将能够更加快速和高效地解决问题,推动技术前沿的发展。

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

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

相关文章

开发日志2024-04-11

开发日志2024/04/11 1、会员/普通用户预约完成后&#xff0c;技师对应的积分添加预约完成的项目价格添加到统计表的业绩字段中&#xff0c;同时对应的服务次数字段1 实现代码&#xff1a; 前端 shHandler(){this.$confirm(确定操作?, "提示", {confirmButtonText…

基于模型预测算法的含储能微网双层能量管理模型

基于模型预测算法的含储能微网双层能量管理模型 文章目录 基于模型预测算法的含储能微网双层能量管理模型一、项目介绍二、源程序下载 一、项目介绍 代码主要做的是一个微网双层优化调度模型&#xff0c;微网聚合单元包括风电、光伏、储能以及超级电容器&#xff0c;在微网的运…

ELFK (Filebeat+ELK)日志分析系统

一. 相关介绍 Filebeat&#xff1a;轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat&#xff0c;并指定目录与日志格式&#xff0c;Filebeat 就能快速收集数据&#xff0c;并发送给 logstash 进或是直接发给 Elasticsearch 存储&#xff0c;性能上相…

Maven、redis、javaJDK环境配置及安装

一、Maven下载配置 Maven下载地址 下载完成完成配置环境变量 新建系统变量 MAVEN_HOME 地址 设置MAVEN… mvn -v 检测成功 二 、redis安装 下载地址 在安装目录cmd输入redis-server --version检测版本号 三、JAVA配置 设置JAVA… 测试

【Vue3语法单文件——自用】

1. Vue3基础语法 <script setup> import { ref,computed } from vue// 定义响应式的变量 const count ref(0) const author ref({name: John Doe,books: [Vue 2 - Advanced Guide,Vue 3 - Basic Guide,Vue 4 - The Mystery] }) //定义props const props defineProps(…

贪心算法|56.合并区间

力扣题目链接 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;if (intervals.size() 0) return result; // 区间集合为空直接返回// 排序的参数使用了lambda表达…

Mongodb前后端整合篇

一、前端篇 1.1mongoose介绍 Mongoose 是一个对象文档模型库&#xff0c;官网 http://www.mongoosejs.net/ 方便使用代码操作 mongodb 数据库pnpm i mongoose5.13.15 1.2初步使用 import mongoose from mongoose; //设置 strictQuery 为 true mongoose.set(strictQuery, true…

ubuntu或类Debian获取某些包的离线版本-包括依赖(还有一些意想不到的用途,哈哈)

前言 偶尔能碰到很特殊的情况。网址白名单&#xff0c;纯内网&#xff0c;超多依赖及一些很难描述的场景。 比如一些少见的发行版缺少某些包。这时候可以找一台类似的系统环境来下载离线包及 其依赖包&#xff0c;然后转移到内网进行安装。如果是网址白名单&#xff0c;或者纯内…

为什么需要网络切片?

网络切片是电信领域的一个突破性概念&#xff0c;它允许将物理网络基础设施划分为多个虚拟网络&#xff0c;称为切片。每个切片作为一个独立的网络运行&#xff0c;拥有自己的专用资源和定制的特性&#xff0c;满足不同应用、行业或用户的特定需求。 将网络切片视为在共享物理…

计算机网络——交换机和路由器

目录 前言 引言 交换机是用来做什么的&#xff1f; 与路由器有什么区别&#xff1f; 网关 子网掩码 网关、路由 前言 本博客是博主用于复习计算机网络的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 这篇博客是在B站掌芝士zzs这个UP主的视频的总结&am…

【论文阅读】Digging Into Self-Supervised Monocular Depth Estimation

论文&#xff1a;https://arxiv.org/pdf/1806.01260.pdf 代码&#xff1a;https://github.com/nianticlabs/monodepth2 Q: 这篇论文试图解决什么问题&#xff1f; A: 这篇论文试图解决的问题是如何提高仅使用单目图像进行深度估计的性能。具体来说&#xff0c;它关注的是如何…

[大模型]Qwen1.5-7B-Chat-GPTQ-Int4 部署环境

Qwen1.5-7B-Chat-GPTQ-Int4 部署环境 说明 Qwen1.5-72b 版本有BF16、INT8、INT4三个版本&#xff0c;三个版本性能接近。由于BF16版本需要144GB的显存&#xff0c;让普通用户忘却止步&#xff0c;而INT4版本只需要48GB即可推理&#xff0c;给普通用户本地化部署创造了机会。&…

Linux 函数学习 poll

1、Linux poll 函数 int poll(struct pollfd *fds, nfds_t nfds, int timeout); fds&#xff1a; 需要轮询的fd集合 nfds&#xff1a;需要轮询的fds数量 timeout&#xff1a;超时时间 返回值&#xff1a;0 超时&#xff0c;<0 发生异常&#xff0c;> 0 存在数据变化 …

函数、指针和数组的相互运用(C语言)

1、函数指针数组 含义&#xff1a;数组的每个元素都是函数指针类型.eg&#xff1a; &#xff08;此代码链接&#xff1a;http://t.csdnimg.cn/ClJmb.也可以在我发布博客中找到&#xff09; 2、指向函数指针数组的指针 1、引入 3、回调函数 1、含义&#xff1a;就是一个通过…

【嵌入式之中断】

Cortex-M4集成了嵌套式矢量型中断控制器(Nested Vectored Interrupt Controller (NVIC))来实现高效的异常和中断处理。NVIC实现了低延迟的异常和中断处理&#xff0c;以及电源管理控制。它和内核是紧密耦合的。 凡是打断程序顺序执行的事件都称为异常&#xff08;exception&am…

uniapp h5项目实现多选按钮/多选标签/多选框

需求&#xff1a;实现简单多选功能&#xff0c;遍历数据&#xff0c;添加样式 1.效果图 2.以下代码粘贴到代码中&#xff0c;可直接运行&#xff0c;html代码 <view class"page index"><view class"list-box"><view v-for"(item,in…

【力扣】-- 移除链表元素

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

Github 2024-04-11 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目4Python项目3JavaScript项目1Cuda项目1Jupyter Notebook项目1非开发语言项目1Dify.AI: 开源的LLM应用程序开发平台 创建周期:29…

C语言 | Leetcode C语言题解之第21题合并两个有序链表

题目&#xff1a; 题解&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {/…

基于Vue的宠物领养系统的设计与实现(论文+源码)_kaic

目 录 摘 要 ABSTRACT 1 引言 1.1 课题背景 1.2 设计原则 1.3 论文组织结构 2 系统关键技术 2.1 JSP技术 2.2 JAVA技术 2.3 B/S结构 2.4 MYSQL数据库 3 系统分析 3.1 可行性分析 3.1.1 操作可行性 3.1.2 经济可行性 3.1.3 技术可行性 3.1.4 法律可行性 3.2 系统功能分析 3.3…