当前位置:AIGC资讯 > AIGC > 正文

【开发心得】Dify部署ollama模型的坑[1]

本文接续上次的文章【开发心得】三步本地化部署llama3大模型_dify llama3-CSDN博客

经过几次调试,目前部署终于稳定下来,由于算力问题产生的300 time out也逐渐减少了。因此,把后续在测试过程中碰到的一些坑和怎么爬出来,做一个记录。

暂时就收集了3个问题,今后碰到再续写。

目录

1、无法调整知识库的TopK怎么办?

2、调用超时怎么办?

3、如何调整LLM的参数?

1、无法调整知识库的TopK怎么办?

如下图,默认配置中,TopK的默认值是2,如果调整,会报下面的错误:

Default model not found for ModelType.TEXT_EMBEDDING

解决方法也很简单,如下:

只要在这个界面里,把默认的上下文长度和token上限加大一倍就可以了。

需要说明的是,你的算力一定要够,否则真的是“马拉火车”的速度。

2、调用超时怎么办?

Run failed: Node LLM run failed: [ollama] Connection Error, HTTPConnectionPool(host='*.*.*.*', port=11434): Read timed out. (read timeout=300)

这个问题是当初Dify的镜像文件中,设置了timeout参数导致,当算力过小的时候(4核8G纯CPU),由于LLM的计算时间过长,Dify直接断开了模型的接口。

想解决这个问题,最好的办法是升级算力,毕竟300秒的延迟已经够长了,作为AI反应的底线也在于此了。

3、如何调整LLM的参数?

参数比较多的情况下,想要微调的话,必须把每个参数的含义搞清楚,如下图,具体每个参数的含义也贴在后面,喜欢研究的可以去单个突破。

各个参数的含义和类型:

mirostat 启用Mirostat算法以控制困惑度(perplexity)。 Mirostat算法可以有效减少结果中重复的发生。perplexity是指对词语预测的不确定性 (default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0) int 

mirostat_eta 它影响算法对生成文本反馈的响应速度。学习率较低会导致调整更慢,而较高的学习率则会使算法反应更加迅速。 (Default: 0.1) float 

mirostat_tau 控制输出的连贯性和多样性之间的平衡。较低的值会使得文本更集中和连贯,而较高的值则会带来更大的多样性。 (Default: 5.0) float 

num_ctx 设置生成下一个token时使用的上下文窗口大小。(Default: 2048) int 

repeat_last_n 设定了模型需要回顾多少信息来以防止重复。 (Default: 64, 0 = disabled, -1 = num_ctx) int 

repeat_penalty 设定了重复惩罚的强度。较高的值(例如,1.5)会更强烈地处罚重复,而较低的值(如0.9)则会宽容一些. (Default: 1.1) float

temperature 模型的温度。 temperature通常用于控制随机性和多样性,提高温度意味着更高的随机性,可能导致更出乎意料但可能更有创意的答案。(Default: 0.8) float

seed 设置了生成时使用的随机数种子。设置特定的数值将使得模型对于相同的提示会生成相同的文本。(Default: 0) int

stop 设置停止序列。当模型遇到这个模式时,会停止生成文本并返回。可以通过在Modelfile中指定多个独立的stop参数来设置多个停止模式。 string

tfs_z 尾部自由采样被用来减少不那么可能的token对输出的影响。较高的值(例如,2.0)会更大幅度地减小这种影响,而设置为1.0则禁用此功能。(default: 1) float

num_predict 生成文本时预测的最大token数量。 (Default: 128, -1 = infinite generation(无限制), -2 = fill context(根据上下文填充完整fill the context to its maximum)) int 

top_k 减少生成无意义内容的概率。较高的值(例如,100)会使答案更加多样,而较低的值(如,10)则会更为保守。 (Default: 40) int

top_p top-k协同工作。较高的值(例如,0.95)将导致更丰富的文本多样性,而较低的值(如,0.5)则会生成更聚焦和保守的内容。(Default: 0.9) float

总结

**文章总结:Llama3本地化部署稳定后的测试挑战与解决方案**
本文通过记录Llama3大模型本地化部署过程中的后续测试挑战及相应解决方案,为开发者提供了宝贵的实战经验。文章主要围绕三个问题展开讨论:
### 1. 无法调整知识库的TopK怎么处理?
**问题描述**:尝试修改TopK默认值(如设为2以外的值)时,系统报错“Default model not found for ModelType.TEXT_EMBEDDING”。
**解决方案**:为了调整TopK,需要同时增加默认的上下文长度和token上限一倍,并确保服务器算力足够以应对增加的处理需求。
### 2. 调用超时怎么办?
**问题描述**:在测试过程中遇到“Read timed out”错误,错误信息表明HTTP连接超时(设置为300秒)。
**原因分析**:这主要是由于算力不足(如使用4核8G纯CPU)时,LLM模型计算时间过长,导致Dify镜像的接口在超时前未能完成响应。
**解决方案**:建议提升服务器的算力配置以缩短计算时间,从而避免调用超时问题。
### 3. 如何调整LLM的参数?
**问题描述**:LLM模型拥有众多参数,需要进行精确的微调以优化模型性能。
**解决方案**:
- **参数解析**:文章详细列出了多个关键参数(如Mirostat算法相关、上下文窗口大小、随机数种子等)的默认值、类型和具体作用,帮助开发者理解并调整适合的参数设置。
- **操作建议**:在调整参数前,必须充分了解每个参数的含义,并根据实际需求进行微调。例如,通过调整temperature来控制结果的随机性和多样性,或利用stop参数来设置文本生成的停止条件。
### 总结
文章通过对比实际遇到的典型问题及其解决策略,为Llama3模型本地化部署的稳定性提升提供了实用建议。无论是调整知识库的TopK、解决调用超时问题,还是微调LLM模型的复杂参数,都需要开发者在充分了解模型特性和需求的基础上,结合实际算力条件进行操作。这些经验分享将有助于开发者在LLM模型的本地化部署过程中少走弯路,提升项目效率和成功率。

更新时间 2024-08-30