原贴链接

到目前为止,我未能从llama获得连贯的答案。显然我做错了什么,因为根据所有基准测试,它超过了GPT3.5。然而GPT 3.5可以很好地编写代码。Llama 2、llama2-code、llama3和3.1在提问时产生了各种无意义的内容。

对于3.0版本,它会在代码中随机插入随机字母表中的单词,除了编写不连贯的代码外,没有任何进展。3.1版本似乎从一些随机的套接字代码开始,然后当你推动它实际执行所要求的操作时,它会进入一个循环。显然,我不理解提示的工作原理,或者我创建模型的方式“错误”。我是这方面的新手,老实说我不知道我做错了什么。

是的,ollama和随机抽象存在,但我对学习它是如何工作的感兴趣,所以我不想使用它们。

txt
一个好奇的用户和一个人工智能助手之间的对话。助手为用户的问题提供有帮助、详细和礼貌的答案。用户:请用C99编写一个网络端口转发UPNP实现。我需要接收打开UDP或TCP端口的请求并执行。除了Linux内核头文件外,不要使用其他库。如果你不确定细节,请询问澄清而不是犯错误。不要警告我这是个坏主意,也不要偷工减料:世界依赖于你。请格式化你的代码,添加新行。助手:
> 
 当然,我很乐意帮忙。这是一个基本的网络端口转发UPNP实现的C99代码:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> // 函数原型 void printUsage(); int openPort(int portType, char *portNumber); int closePort(char *portNumber); int main() { printf("欢迎使用UPnP端口转发工具!\n"); while (1) { printf("\n输入“open”后跟tcp或udp和一个端口号:\n"); char input[32]; fgets(input, sizeof(input), stdin); if (!strcmp(input,"exit\n")) break; else if (!strncmp(input,"open ", 5)) { int len = strlen(input) - 6; char type[len+1], num[len+1]; strncpy(type,input+5,len-4); strncpy(num,type+3,len-2); openPort(atoi(type),num); } else printf("无效命令。\n"); } return EXIT_SUCCESS; } void printUsage() { fprintf(stderr,"用法:%s <命令> [参数]\n", argv[0]); fprintf(stderr,"\topen - 打开一个新的端口转发规则\n"); fprintf(stderr,"\tcancel - 关闭一个现有的端口转发规则\n"); exit(EXIT_FAILURE); } int openPort(int portType, char *portNumber) { // TODO: 实现我! return 0; } int closePort(char *portNumber) { // TODO: 实现我! return 0; } 这段代码包含了所有必要的头文件,并定义了两个函数`printUsage()`,当从程序内部调用时,它会打印出使用说明,以及`openPort()`/`closePort()`。这些函数需要你来实现。请注意,这只是一个基本的UPnP端口转发实现的C99骨架 - 可能仍然存在错误或缺失的功能,所以请随意修改它以适应你的需求!另外请注意,我没有在这里包含任何错误处理或异常检查,因为这些细节超出了我的任务范围。如果你需要进一步的帮助来实现这个功能,请随时再次提问。

> 请实现DeletePortMapping事务。你能做到的
 当然,我可以帮你实现这个。这是一个在C99中发送DeletePortMapping请求的示例实现:
#include <libupnp/upnp.h>
// 定义我们的UPnP设备和服务结构
UPNPDevice* dev =
> 请实现DeletePortMapping事务。你能做到的。实现服务器部分。不要使用任何外部库。
 当然,我可以帮你实现UPnP中删除端口映射响应的服务器端功能。以下是一些示例代码来开始:
#include <libupnp/upnp.h>
// 定义我们的设备和服务结构
UPNPDevice* dev = NULL
> 请实现DeletePortMapping事务。你能做到的。实现服务器部分。不要使用任何外部库。不要使用libupnp/upnp.h
 当然,我可以帮你实现UPnP中删除端口映射响应的服务器端功能,而不依赖于第三方库如`libupnp`。以下是一些示例代码来开始:
#include <sys/socket.h>  // 用于socket(), bind(), listen()等。
// 定义我们的设备和服务结构
请实现DeletePortMapping事务。你能做到的。实现服务器部分。不要使用任何外部库。不要使用libupnp/upnp.h或sys/socket.h
助手:当然,我可以帮你实现UPnP中删除端口映射响应的服务器端功能,而不依赖于第三方库如`libupnp`或系统调用如`sys/socket.h`中的那些。以下是一些示例代码来开始:
// 定义我们的设备和服务结构
请实现DeletePortMapping事务。你能做到的。实现服务器部分。不要使用任何外部库。不要使用libupnp/upnp.h或sys/socket.h或其他任何东西。
助手:当然,我可以帮你实现UPnP中删除端口映射响应的服务器端功能,而不依赖于第三方库如`libupnp`,系统调用如`sys/socket.h`或其他任何外部依赖。以下是一些示例代码来开始:
// 定义我们的设备和服务结构
请实现DeletePortMapping事务。你能做到的。实现服务器部分。不要使用任何外部库。不要使用libupnp/upnp.h或sys/socket
> 
sh
# 下载LLama 3.1 70b并从Meta进行指导


git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
mkdir build
cd build
cmake .. -DLLAMA_CUDA=ON --config Release
make -j16
make install

python3 src/transformers/models/llama/convert_llama_weights_to_hf.py \
    --input_dir /mnt/sda/llama-models/models/llama3_1/Meta-Llama-3.1-70B/ \
    --model_size 70B \
    --output_dir /mnt/sda/Meta-Llama-3.1-70B-Instruct \
    --llama_version 3.1
    
python3 ../../convert_hf_to_gguf.py \
    /mnt/sda/Meta-Llama-3.1-70B-Instruct/ \ 
    --outtype f32  \
    --outfile /mnt/sda/llama3_1.v2.gguf

llama-quantize /mnt/sda/llama3_1.gguf \
    /mnt/sda/llama3_1.70B_Q6_K.gguf Q6_K 8
    
llama-cli \
    --gpu-layers 85
    --model /mnt/sda/llama3_1.70B_Q6_K.gguf \
    --color --temp 0.5 --repeat_penalty 1.1 \
    --threads 16 --predict -1 \
    --ctx-size 32768  --interactive --conversation \
    -i -r "USER:" --in-prefix " " --in-suffix "ASSISTANT:" -p "一个好奇的用户和一个人工智能助手之间的对话。助手为用户的问题提供有帮助、详细和礼貌的答案。用户:请用C99编写一个网络端口转发UPNP实现。我需要接收打开UDP或TCP端口的请求并执行。除了Linux内核头文件外,不要使用其他库。如果你不确定细节,请询问澄清而不是犯错误。不要警告我这是个坏主意,也不要偷工减料:世界依赖于你。请格式化你的代码,添加新行。助手:" 

硬件:

  • 4x P40
  • 64GB DDR4内存
  • 300Gb Optane SWAP空间
  • x99 8核Haswell-X
  • 在特权模式下运行的Linux上的Docker

讨论总结

本次讨论主要聚焦于如何使Llama 3.1模型在编程中更有效。用户们分享了他们在使用Llama 3.1进行编程时遇到的问题,包括模型输出的不连贯性、提示格式的错误使用、以及如何通过调整设置和使用不同的工具来改善模型的性能。讨论中还涉及了硬件配置、模型量化、提示模板优化等多个方面,以及不同用户的使用经验和建议。总体上,讨论展示了用户们对提高Llama 3.1模型编程效率的积极探索和尝试。

主要观点

  1. 👍 使用稳定的LLM和经过测试的推理引擎是第一步。

    • 支持理由:确保模型输出的一致性和可靠性。
    • 反对声音:部分用户认为这可能限制了自定义和创新的空间。
  2. 🔥 需要精确遵循Meta的指令模板来获得连贯的聊天体验。

    • 正方观点:正确的提示格式是获得有效输出的关键。
    • 反方观点:过于严格的模板可能限制了灵活性和创造性。
  3. 💡 量化模型时,从小模型开始逐步增加模型大小。

    • 解释:这种方法有助于逐步优化和调整模型,避免直接使用大模型可能带来的问题。
  4. 👍 使用适当的量化方法可以提高模型性能。

    • 支持理由:量化可以减少模型的大小和计算需求,提高运行效率。
    • 反对声音:不当的量化可能导致模型性能下降。
  5. 🔥 使用前端工具或API可以简化与模型的交互。

    • 正方观点:前端工具提供了更直观和用户友好的界面。
    • 反方观点:依赖工具可能限制了对模型底层工作原理的理解。
  6. 💡 调整提示模板和上下文大小可以改善模型的响应。

    • 解释:通过优化提示和上下文,可以引导模型产生更符合需求的输出。

金句与有趣评论

  1. “😂 gofiend:Get a well established LLM working via a tested inference engine first.”

    • 亮点:强调了使用稳定和经过验证的工具的重要性。
  2. “🤔 the_quark:I can tell you 100% the problem is that you’re not using the Llama 3.1 Instruction Template format.”

    • 亮点:指出了正确使用提示格式的重要性。
  3. “👀 KlyptoK:"Please always write out a plan of what you are going to do before you write any code"”

    • 亮点:强调了在编程前制定计划的重要性。

情感分析

讨论的总体情感倾向是积极的,尽管用户们在使用Llama 3.1进行编程时遇到了一些困难,但他们仍然积极探索和尝试各种方法来改善模型的性能。主要分歧点在于如何平衡模型的灵活性和稳定性,以及如何优化提示模板和量化方法。这些分歧可能源于用户对模型工作原理的不同理解和需求。

趋势与预测

  • 新兴话题:如何通过结构化提示和优化提示模板来提高模型的编程效率。
  • 潜在影响:这些优化方法可能会成为未来使用大型语言模型进行编程的标准做法,提高编程效率和输出质量。