对 Llama-3-8B 模型在指令跟随方面的测试。

207 天前
 smalltong02

周末闲来无事,正好有时间对 Meta 新开源的 Llama-3 模型进行了指令跟随方面的测试。70B 模型对我的 4090 显卡来说太大了,而且我也不想去测试精度有损的量化模型,所以这次测试选择了 Llama-3-8B 的模型。 这次的测试主要选取了两个方面:

第一个测试是给 Llama-3-8B 模型添加智能 Function Calling 特性之后,检查模型能否根据用户输入的问题智能选择并调用合适的函数;

第二个测试是给 Llama-3-8B 模型添加代码解释器特性之后,检查模型分解任务,编写代码,以及遇到错误的时候能够正确修改代码解决问题的能力。

测试 Function Calling 的能力

众所周知,Function Calling 特性是用来给大模型提供一组额外的可调用函数,从而帮助大模型补足一些短板。比如扩充模型的数学能力,知识图谱,或者打破训练资料的时限限制等等。 智能调用需要大模型的幻觉比较少,知道什么时候需要调用什么函数,同时也考验了模型的格式化输出能力。 首先为模型添加两个可调用函数,get_current_time()函数将会返回当前的系统时间; get_current_location()函数将会返回当前的位置信息,两个函数比较简单,都无参数信息。

def get_current_time():
    """Get current time."""
    current_time = datetime.datetime.now()
    formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")   
    return formatted_time

def get_current_location():
    """Get current location information."""
    location = geocoder.ip('me')
    if location:
        return location.address
    else:
        return "Location information not available."

在 Enable Function Calling 特性之后,让我们通过问题来检查 Llama-3-8B 模型的执行情况如何。

可以看到 Llama-3-8B 模型可以正确的选择要调用的函数,并且能够正确输出调用格式。而且令人惊喜的是,模型还添加了的 Markdown 格式来美化输出格式。

这是未开启 Function Calling 特性的情况,模型无法知道当前时间等信息。

总结:经过测试之后,Llama-3-8B 模型在开启了 Function Calling 特性,正确调用函数的概率是目前开源模型中效果最好的。我之前在很多的模型上也测试过这个任务,通常会遇到以下的错误:

在这项任务上我目前最满意的模型有 Llama-3-8B 模型,Phi-3-3B 模型,Qwen-1.5-7B(14B)模型,Baichuan2 模型,Mistral-7B 模型,仅个人观点。

测试代码解释器功能

这次使用我自己编写的代码解释器 keras-llm-interpreter ,和 Llama-3-8B 模型一起测试。整个测试包含三项任务: 多代理的经典任务,让模型绘制 Tesla 和 Apple 今年的股票价格曲线并显示。 让模型画一只粉色的小猪并显示。 让模型读取本地的一个文件,制作成词云图片并显示。

首先,让我们看看第一项任务:模型绘制 Tesla 和 Apple 今年的股票价格曲线并显示

在加载 Llama-3-8B 模型并开启代码解释器 keras-llm-interpreter 之后,布置任务给模型:Please plot Tesla and Apple stock price YTD from 2024.

Llama-3-8B 模型很好的完成了任务,它第一步编写代码从雅虎财经上下载了 TSLA 和 AAPL 的股票数据;第二步使用 plt 绘制了股票价格趋势图型,第三步通过检查结果正确结束了任务。

第二项任务,让模型画一只粉色的小猪并显示

布置任务给模型:Please use Python language to draw an image of a pink pig and display it.

模型分了四步去完成整个任务,第一安装库 pillow ,成功;第二使用 PIL 生成一张画布,成功;第三,尝试在画布上画小猪的眼睛,鼻子和嘴;第四步,保存图片到本地文件 pink_pig.png 。 这个任务中,虽然 Llama-3-8B 模型最终完成了任务,但是有两点做的不好,第一忘记了显示图片,第二画的小猪惨不忍睹...

第三项任务,模型读取本地文件 wordcloud.txt ,制作成词云图片并显示

wordcloud.txt 中是指环王故事内容的一部分,首先还是布置任务给模型:Please create a word cloud image based on the file "D:\wordcloud.txt" and display it.

模型首先编写代码并读取了文件内容,之后在环境中安装了必要的库 wordcloud ,最后编写代码制作词云并显示,可以说效果相当好了。

总结:Llama-3-8B 模型在开启了代码解释器特性,并在收到任务之后,能够按照步骤分解任务内容,并且按照每一步骤编写代码并执行,最后检查任务的输出结果。之前在很多的模型上也测试过这个任务,通常会遇到以下的错误:

模型对代码解释器不认知,仅会回复无法网络搜索或输出图像。

在这项任务上我目前最满意的离线开源模型就是 Llama-3 模型,它的一次成功率是最高的,当然对于开源模型来说总体的稳定任然不如闭源大模型,仅个人观点。

2650 次点击
所在节点    程序员
16 条回复
fredweili
206 天前
和经常不知所云的 gemma 相比,llama3 优秀太多
smalltong02
206 天前
@fredweili 是的,而且这次 MS 的 Phi-3 也不错,3B 的模型也都可以完成这些任务,只不过成功率低一些。
SylarQAQ
206 天前
看到老哥用的这个 webui 是自己开源的呀,能介绍一下优势么?现在市面上做这类似的 webui 的好多啊
lanlanye
206 天前
好奇问一下,量化模型一般会损失哪方面的能力?因为在推理速度和资源使用上优势非常明显
euph
206 天前
不知道老哥有没有测过 wizardlm2:7b
smalltong02
206 天前
@SylarQAQ

我的这个项目偏向于对热门模型进行各种任务测试并可进行横向比较用的,更倾向于摸清模型在各种任务中的实际表现。

比如你在使用其它开源项目的时候可能会有这样的烦恼。比如 text-generation-webui 项目,它可以适配大部分的离线模型,但不支持在线模型。LM Studio 项目,它可以使用 CPU 跑任何模型,但它仅支持 GGUF 格式模型。ComfyUI 对图像模型的支持生成非常专业,但它仅此而已。Open Interpreter 项目可以让你在本地运行代码解释器,但它仅仅支持 GPT-4 等在线模型,离线模型需要接入其它开源项目。

当你想对不同的模型(包括在线模型和各种离线模型)在相同环境下测试 RAG 任务,接入代码解释器,使用 Function Calling ,搜索引擎,或者接入 TTS ,生成图像的时候,你发现你需要使用一个或者多个开源项目互相配合才能达到目的,并且很可能多个开源项目还无法同时接入。当你想比较离线模型和 GPT-4 ,Gemini 这种闭源在线模型在搭配相同工具在各种任务中表现差异的时候,你会发现很难或者可能根本就做不到。

我的这个开源项目就是针对这类问题才做的,它可以加载各种在线模型,也支持各种热门的离线模型(包括量化模型)。
并且提供了相同的工具,包括
1. 接入搜索引擎
2. Function Calling
3. 角色扮演
4. 代码解释器
5. 接入 TTS (语音输入和输出)
6. 接入图像识别模型
7. 接入图像生成模型

举例说明:
这是一个早期的例子,将图像模型接入 llama-2-7b-chat 模型,让它也可以想多模态模型那样,拥有从图像生成另一幅图像的能力:

<amp-youtube data-videoid="crQ5mJSJzrg" layout="responsive" width="480" height="270"></amp-youtube><amp-youtube data-videoid="30yoa3lCnB8" layout="responsive" width="480" height="270"></amp-youtube>
smalltong02
206 天前
@lanlanye

量化模型最主要的问题就是精度会有一些损失,有点类似于有损压缩。两个数据很近的话,比如第一个是 0.2385637 ,第二个是 0.2385644 ,那么量化之后很可以这两个值都落在同一个 int 值上面,这就会造成精度损失。量化模型偶尔会有输出乱或者不停止,通常就是这种问题造成的。
smalltong02
206 天前
@euph

目前还没有测试过呢。
SylarQAQ
206 天前
@smalltong02 蛮好的项目 已关注,主要是看市面上类似的还挺多的 比如 Lobe Chat/ Anything-LLM 之类的项目
kenshinhu
206 天前
哥,想问一下这个 7B 模型是直接从 GitHub 上下载部署的这个吗?我这边用 16G 的显卡打开也是报 GPU 内存不足
smalltong02
206 天前
@kenshinhu

7B 模型如果不进行量化,仅仅使用 16G 的显存加载模型并推理不太够用,尤其是 Linux 系统,必须要保证显存足够。如果是 windows 系统,是会向内存借用一部分保证不会报内存不足错误,但也会导致推理降速。建议 7B 模型使用 3090 或者 4090 显卡进行测试。
secondwtq
206 天前
Code Interpreter 不知道,但是 Function Calling 的能力的话,一般认为 OpenAI 是对其模型进行了专门训练才能达到如此的效果。开源模型如果没经过类似的训练的话只能在 Prompt 上做手脚,结合限制输出 token 的手段。目前 Llama 系列官方模型都没有 FunctionCalling 的训练。
github.com/MeetKai/functionary MeetKai/functionary: Chat language model that can use tools and interpret the results 这里倒是有个原生支持 Function Calling 的
kenshinhu
205 天前
@smalltong02
之前是在 腾讯云上租用 Hai 算力服务器上部署 8B 模型时(直从 GitHub 下载)就出现 以下错误:
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 1002.00 MiB. GPU 0 has a total capacity of 15.57 GiB of which 961.12 MiB is free. Process 68255 has 14.63 GiB memory in use. Of the allocated memory 13.99 GiB is allocated by PyTorch, and 129.49 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management
看似是显卡的内存都被 PyTorch 所占用了但不知道怎样解决
smalltong02
205 天前
@secondwtq

经过测试 Llama-3 和 Phi-3 都能够和 Function Calling 和代码解释器一起使用。其实 Function Calling 对模型的能力要求要低一些,代码解释器要求模型的能力要高一些。对于 Function Calling ,大部分模型在几轮对话之后都会失去调用 Function 的能力,只有 GPT-4 模型在这块做的是最好的。
smalltong02
205 天前
@kenshinhu

看起来是 Linux 机器,你可以部署 8bit 的量化模型,16GB 的显存够用了。
qinfengge
205 天前
我看 Spring AI 的文档里面 Ollama 系列都不支持 Function Calling🤨

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1036572

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX