AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


9B参数写代码秒杀百亿大模型?CodeGeeX4全实测:从游戏开发到AI架构解读
发布日期:2024-07-25 19:09:32 浏览次数: 2110



在开发AI应用时,要测试LLM在实际场景中的表现,以确定模型的能力边界当前,开源和闭源模型更新速度很快,几乎每天都有新的模型版本发布。SOTA平台每天会更新热门模型如Llama3、Yi-1.5、DeepSeek的测试案例,涵盖代码、逻辑推理、角色扮演和内容创作等场景,让大家了解模型在哪些方面表现出色,哪些方面还有改进空间。


? 实测模型介绍

在软件开发的世界里,高性能的代码模型一直是开发者们追求的目标。而开源的代码模型,则在这个基础上又增加了一层保障——代码和数据的隐私得到了保护。

CodeGeeX4-ALL-9B是智谱新开源多语言代码生成模型,支持128K上下文,能够处理较长、复杂的代码任务。据官方的描述,模型在10B参数量级内表现最佳,优于 deepseek coder 33B 和 Codestral 22B等模型。

为了更直接地了解这个模型的表现,我们针对代码生成、补全和解释的能力,设计了一系列具体的场景上测试,例如:

  1. 开发俄罗斯方块游戏

  2. 基于表和需求生成SQL查询

  3. 补全数据分析Python代码

  4. 解释llama3模型结构


? 显卡消耗

根据模型推理所需显存的公式:显存占用(GB)≈ 模型参数(B)* 2,CodeGeeX4-ALL-9B的显存占用约为18GB。

我们使用了清湛算力平台提供的算力环境(Tesla V100-PCIE-32GB*1,32G显存,2核CPU,4G内存,Python 3.10,Pytorch 2.3,CUDA 12.1)进行模型部署。

实际部署过程中,在不考虑任何量化技术的情况下,模型占用显存约为17.98GB,推理速度在26.65tokens/s此外,官方提供了GGUF量化版本,可以降低部署的显存需求。

推理代码如下:

import torchfrom transformers import AutoTokenizer, AutoModelForCausalLM
device = "cuda" if torch.cuda.is_available() else "cpu"tokenizer = AutoTokenizer.from_pretrained("/useropt167/codegeex4-all-9b", trust_remote_code=True)model = AutoModelForCausalLM.from_pretrained("/useropt167/codegeex4-all-9b",torch_dtype=torch.bfloat16,low_cpu_mem_usage=True,trust_remote_code=True).to(device).eval()model_version = 'codegeex4-all-9b'def inference(prompt: str):inputs = tokenizer.apply_chat_template([{"role": "user", "content": prompt}], madd_generation_prompt=True, tokenize=True, return_tensors="pt", return_dict=True).to(device)generation_config = {'max_new_tokens': 4096    }with torch.no_grad():outputs = model.generate(**inputs, **generation_config)outputs = outputs[:, inputs['input_ids'].shape[1]:]results = tokenizer.decode(outputs[0], skip_special_tokens=True)return results


✏️ 代码生成能力实测

我们通过测试模型开发小游戏、根据用户需求生成SQL查询语句,来看模型的代码生成能力。总的来说,CodeGeeX4-ALL-9B可以生成相对完整的俄罗斯方块游戏代码,包含主要的游戏逻辑和界面绘制,但在细节实现上存在优化空间,比如会漏掉检测方块碰撞的方法。在SQL生成上,CodeGeeX4-ALL-9B能够理解用户的需求,并生成对应的SQL查询语句。

01. 写小游戏
我们让模型完成一个俄罗斯方块小游戏的开发,先前我们测试了多个开源代码模型,会发现模型容易缺失部分模块的代码实现。

从结果来看,CodeGeeX4-ALL-9B能够按照我们的需求生成一个相对完整的俄罗斯方块游戏,包含了主要的游戏逻辑和界面绘制。

但在某些细节和功能上仍需优化。比如,Block 类中没有添加 move_up 方法,会导致在调用时报错。move_up 方法用来检测到碰撞时可以将方块移回上一个位置。

02. 根据用户需求生成SQL语句

让LLM理解用户的需求,并生成相应的SQL语句,可以提高数据分析和查询的效率。在具体场景的应用中,进一步通过工具调用,就能够将查询结果返回给用户。

下面我们在输入中给了数据表的结构和需求,来看CodeGeeX4-ALL-9B是否能生成正确的SQL查询。

从结果来看,模型能够正确理解需求并生成符合要求的SQL查询语句:使用ORDER BY order_amount DESC实现了按照订单金额从高到低排序,并通过LIMIT 5实现了只查询前5个订单。


?代码补全能力实测

代码补全能力的测试上,我们让CodeGeeX4-ALL-9B完成两个任务:补全flask框架开发的网页框架、数据分析Python脚本。从结果来看,模型都能够准确地根据需求成代码补全

01. Web应用开发中的代码补全

下面是一个基于Flask框架实现的Web网页代码,实现的是在网页上显示欢迎用户的消息。在有了初步的代码框架后,我们让模型按照要求补齐代码。

可以看到,CodeGeeX4-ALL-9B能够准确地补全代码:通过调用正确的模块实现用户的需求,比如使用 render_template渲染页面,使用 request.form 获取表单数据。

此外,该模型还会兼顾完整项目开发的实现,给出了网页所需三个HTML模板文件要包含内容的说明。

02. 数据分析中的代码补全

在数据分析中,我们经常会使用pandas来处理数据并形成图表分析。在给定了CSV文件读取代码和用到的模块,让模型按照要求完成剩下分析任务的代码:计算总销售额、找出销售额最高的产品,绘制每种产品的销售额柱状图。

结果来看,模型输出的代码准确按照要求补全了代码。

运行脚本结果:可以得到每类产品的销售额柱状图


? 代码解释能力实测

代码解释强的模型可以帮助我们快速为各类编程语言生成注释和文档。此外,用来解读模型架构的代码,可以帮助我们加深对模型架构的理解。

下面我们具体测试了模型对Javascript函数和对llama3模型架构的解读。在我们的测试案例中,CodeGeeX4-ALL-9B都可以准确清晰地解释每部分代码。

01. 解释以下JavaScript函数的作用和工作原理

这段代码的用途是发送一个HTTP请求到指定的URL,并返回一个包含响应数据的Promise对象。可以看到模型的解释基本正确,涵盖了代码的主要功能和工作原理。解释清晰,并逐步描述了函数的工作流程。

02. 解释Llama3模型架构代码

下面我们给出一段Llama3模型架构中Transformer初始化的代码,让模型进行解释。

从结果来看,模型对 Llama3 这部分的实现提供了清晰而详细的解释。它准确地描述了每个模块的功能,以及说明了这些模块在整体架构中的作用和工作原理,可以高效地帮助我们理解模型架构。

 ❝

在开发AI应用时,要测试LLM在实际场景中的表现,以确定模型的能力边界当前,开源和闭源模型更新速度很快,几乎每天都有新的模型版本发布。SOTA平台每天会更新热门模型如Llama3、Yi-1.5、DeepSeek的测试案例,涵盖代码、逻辑推理、角色扮演和内容创作等场景,让大家了解模型在哪些方面表现出色,哪些方面还有改进空间。 


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询