问题验证
- 我已经在文档和discord上寻找答案。
问题
我正在使用llama.cpp http服务器来提供一个带有docker容器的模型:docker run -d -p ipadress:8080:8080 -v ~/models:/models --gpus all ghcr.io/ggerganov/llama.cpp:server-cuda -m models/mistral-7b-instruct-v0.2.Q4_0.gguf -c 32000 --host 0.0.0.0 --port 8080 --n-gpu-layers 99
我可以通过curl与模型进行通信,例如:
curl --request POST \
--url http://ipadress:8080/completion \
--header "Content-Type: application/json" \
--data '{"prompt": "Building a website can be done in 10 simple steps:","n_predict": 128}'
并且它返回一个响应。
然而,将其集成到llama索引中似乎并不那么容易。我尝试了这两种方法:
import os
from llama_index.llms.openllm import OpenLLMAPI
os.environ["OPENLLM_ENDPOINT"] = "http://ipadress:8080" # replace with your server address
remote_llm = OpenLLMAPI()
response = remote_llm.complete("Hello World!")
print(str(response))
##########################################################
from llama_index.llms.openai_like import OpenAILike
llm = OpenAILike(api_base="http://ipadress:8080")
response = llm.complete("Hello World!")
print(str(response))
OpenLLMAPI选项会报错,并显示AttributeError: 'HTTPStatusError' object has no attribute 'message'
错误,OpenAILike类也会出现连接错误。
我该如何正确地连接到托管在远程llm的服务?
5条答案
按热度按时间9nvpjoqh1#
为了解决在使用
llama.cpp
在 Docker 容器内连接到自托管的远程 LLM 时遇到的问题,请参考以下重点步骤和说明:错误处理更新:
AttributeError: 'HTTPStatusError' object has no attribute 'message'
的发生是因为.message
属性在 Python 3 中已被弃用。要访问错误消息,请使用str(exception)
或exception.args
,而不是exception.message
。对于OpenLLMAPI
和OpenAILike
类处理异常时,这是必要的调整。与Docker一起使用LlamaCPP:确保您的环境中已安装
llama-cpp-python
包。这个包对于与llama.cpp
模型进行接口至关重要。如果没有安装,可以使用pip install llama-cpp-python
添加它。模型配置:在设置模型时,您可以指定一个预下载的
model_path
模型或一个用于动态下载的model_url
模型。根据需要调整 Docker 设置以确保模型可访问或容器可以下载模型。文本生成参数:自定义参数如
temperature
、max_new_tokens
和context_window
以控制模型的输出。使用LlamaCPP
类设置这些参数并生成文本。Docker容器设置:验证您的 Docker 容器是否正确配置了模型访问(无论是通过本地文件还是互联网下载),并且容器内已安装
llama-cpp-python
包。高级功能:探索
LlamaCPP
类的高级功能,适用于实时聊天交互等应用。有关详细实现,请参阅
LlamaCPP
类文档,并确保您的代码已更新以正确处理异常。这应该有助于您成功连接并与自托管的 LLM 进行交互。详情
来源
关于 Dosu
此响应旨在帮助您节省时间并提高效率。它不是精确解决方案,而是您自己研究的起点。
请帮助我变得更有用!如果这有帮助,请留下一个赞成票;如果无关紧要,请留下一个反对票。要继续对话,请提及 @dosu。
r6vfmomb2#
为什么我应该在服务器上安装
llama-cpp-python
?这是否意味着llama索引无法处理由llama.cpp HTTP服务器生成的API?它也应该是与OpenAI兼容的API。5sxhfpxr3#
你遇到的问题是由于在
OpenLLMAPI
类中处理异常的方式导致的。现代的 Python 版本和 HTTP 客户端库并不会在异常对象上使用.message
属性。相反,你应该使用str(exception)
或者访问特定的属性,如.status_code
或.detail
来获取错误信息。这个调整对于你的代码中的正确错误处理是必要的。关于
OpenAILike
类的连接错误,这些可能源于各种配置问题,如错误的 API 密钥、缺失的依赖项或不兼容的模型元数据。请确保所有配置和依赖项都正确设置。关于在服务器上安装
llama-cpp-python
的问题,llama_index
类中的LlamaCPP
类旨在直接与llama-cpp
库一起工作,而不仅仅是通过 HTTP 服务器 API。这种直接集成要求在服务器上安装llama-cpp-python
包,以便LlamaCPP
类能够正常运行。它使用来自llama_cpp
库的Llama
类进行模型初始化、完成和其他任务,这就是为什么即使llama.cpp
HTTP 服务器提供了一个与 OpenAI 兼容的 API,该包仍然是必需的。详细信息
来源
关于 Dosu
这个响应旨在帮助你节省时间并提供有用的信息。它并不是一个精确的解决方案,而是一个你自己研究的起点。
帮助我变得更有用!如果这有帮助请留下一个👍,如果无关请留下一个👎。
xxhby3vn4#
你好@JulianOestreich90,除了你提供的API之外,llama.cpp还支持OpenAI-compatible Chat Completions API(搜索
POST /v1/chat/completions
)。如果你使用那个API,我想OpenAI应该足够了。3hvapo4f5#
感谢OpenAI的建议,它确实对我有用,尽管我不得不稍微调整一下参数。最终结果如下:
目前将API密钥留空会破坏它,它正在尝试使用无效查询进行身份验证。
请查看这个gist,其中包含了我使用单个RTX 3070运行llama 8B并由llama.cpp服务器提供的完整RAG脚本。由于我的GPU没有足够的内存,我不得不将嵌入模型放在CPU上。
看着它运行起来非常令人满意。我随机挑选了一些关于长颈鹿和其他相关概念的维基百科文章作为测试,并将结果放在了gist评论中。
https://gist.github.com/jggc/5ba572a4753bc851e6d33d07e82b39f4