llama_index 使用llama.cpp提供托管模型

bqjvbblv  于 3个月前  发布在  其他
关注(0)|答案(5)|浏览(50)

问题验证

  • 我已经在文档和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的服务?

9nvpjoqh

9nvpjoqh1#

为了解决在使用 llama.cpp 在 Docker 容器内连接到自托管的远程 LLM 时遇到的问题,请参考以下重点步骤和说明:

  1. 错误处理更新:AttributeError: 'HTTPStatusError' object has no attribute 'message' 的发生是因为 .message 属性在 Python 3 中已被弃用。要访问错误消息,请使用 str(exception)exception.args,而不是 exception.message。对于 OpenLLMAPIOpenAILike 类处理异常时,这是必要的调整。

  2. 与Docker一起使用LlamaCPP:确保您的环境中已安装 llama-cpp-python 包。这个包对于与 llama.cpp 模型进行接口至关重要。如果没有安装,可以使用 pip install llama-cpp-python 添加它。

  3. 模型配置:在设置模型时,您可以指定一个预下载的 model_path 模型或一个用于动态下载的 model_url 模型。根据需要调整 Docker 设置以确保模型可访问或容器可以下载模型。

  4. 文本生成参数:自定义参数如 temperaturemax_new_tokenscontext_window 以控制模型的输出。使用 LlamaCPP 类设置这些参数并生成文本。

  5. Docker容器设置:验证您的 Docker 容器是否正确配置了模型访问(无论是通过本地文件还是互联网下载),并且容器内已安装 llama-cpp-python 包。

  6. 高级功能:探索 LlamaCPP 类的高级功能,适用于实时聊天交互等应用。

有关详细实现,请参阅 LlamaCPP 类文档,并确保您的代码已更新以正确处理异常。这应该有助于您成功连接并与自托管的 LLM 进行交互。

详情

来源

此响应旨在帮助您节省时间并提高效率。它不是精确解决方案,而是您自己研究的起点。
请帮助我变得更有用!如果这有帮助,请留下一个赞成票;如果无关紧要,请留下一个反对票。要继续对话,请提及 @dosu。

r6vfmomb

r6vfmomb2#

为什么我应该在服务器上安装llama-cpp-python?这是否意味着llama索引无法处理由llama.cpp HTTP服务器生成的API?它也应该是与OpenAI兼容的API。

5sxhfpxr

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。*
xxhby3vn

xxhby3vn4#

你好@JulianOestreich90,除了你提供的API之外,llama.cpp还支持OpenAI-compatible Chat Completions API(搜索POST /v1/chat/completions)。如果你使用那个API,我想OpenAI应该足够了。

3hvapo4f

3hvapo4f5#

感谢OpenAI的建议,它确实对我有用,尽管我不得不稍微调整一下参数。最终结果如下:

llm = OpenAI(api_key="somestring", api_base="http://192.168.12.132:3300")

目前将API密钥留空会破坏它,它正在尝试使用无效查询进行身份验证。
请查看这个gist,其中包含了我使用单个RTX 3070运行llama 8B并由llama.cpp服务器提供的完整RAG脚本。由于我的GPU没有足够的内存,我不得不将嵌入模型放在CPU上。
看着它运行起来非常令人满意。我随机挑选了一些关于长颈鹿和其他相关概念的维基百科文章作为测试,并将结果放在了gist评论中。
https://gist.github.com/jggc/5ba572a4753bc851e6d33d07e82b39f4

相关问题