Gradio全解10——Streaming:流式传输的多模态应用(3)——HF Inference:在服务器运行推理

Gradio全解10——Streaming:流式传输的多模态应用(3)——HF Inference:在服务器运行推理


本章目录如下:

  1. 《Gradio全解10——Streaming:流式传输的多媒体应用(1)——自动语音识别技术(ASR)》
  2. 《Gradio全解10——Streaming:流式传输的多媒体应用(2)——基于Mini-Omni模型构建对话式聊天机器人》
  3. 《Gradio全解10——Streaming:流式传输的多媒体应用(3)——HF Inference:在推理客户端运行推理服务》
  4. 《Gradio全解10——Streaming:流式传输的多媒体应用(4)——Spaces ZeroGPU:为Spaces提供动态GPU分配方案》
  5. 《Gradio全解10——Streaming:流式传输的多媒体应用(5)——Mistral-7B实现流式传输音频:魔力8号球》
  6. 《Gradio全解10——Streaming:流式传输的多媒体应用(6)——基于Groq的带自动语音检测功能的多模态Gradio应用》
  7. 《Gradio全解10——Streaming:流式传输的多媒体应用(7)——基于YOLO与WebRTC的摄像头实时目标检测》
  8. 《Gradio全解10——Streaming:流式传输的多媒体应用(8)——RT-DETR模型构建视频流目标检测系统》

10.3 HF Inference:在推理客户端运行推理服务

在学习更高级聊天机器人示例之前,需要先学习一下要用到的两个知识点:HF Inference和ZeroGPU。本节学习HF Inference,推理(Inference)是指使用训练好的模型对新数据进行预测的过程。由于该过程可能涉及大量计算,所以最好运行在专用服务或外部服务上。关于在服务上运行推理请参阅HuggingFace说明文档: Run Inference on servers🖇️链接10-5

10.3.1 InferenceClient的推理类型

huggingface_hub库提供了运行推理服务的统一接口,可为托管在HuggingFace Hub上的模型提供跨多种服务器的推理,包括:

  • 推理服务提供商(Inference Providers):通过HuggingFace的无服务器推理合作伙伴,为数百个机器学习模型提供简化的统一访问。这一新方案基于先前推出的无服务器推理API(Serverless Inference API),依托世界级服务提供商的支持,可提供更多模型选择、更优性能及更高可靠性。支持的服务商列表请参阅Inference Providers🖇️链接10-6
  • 推理终端节点(Inference Endpoints):该产品可轻松将模型部署至生产环境,推理过程由HuggingFace在用户指定的云服务商的专属全托管基础设施中运行。
  • 本地终端节点(Local endpoints):用户还可以通过将客户端连接至llama.cpp、Ollama、vLLM、LiteLLM或文本生成推理(Text Generation Inference, TGI)等本地推理服务器来运行推理。

这些服务均可通过InferenceClient对象调用,InferenceClient是一个通过HTTP调用与官方API交互的Python客户端。它替代了旧版客户端InferenceApi,并新增了对特定任务和第三方供应商的支持,从旧版客户端迁移至新客户端的方法请参阅Legacy InferenceAPI client🖇️链接10-7

如果用户希望直接使用常用工具(如curl、Postman等)发起HTTP请求,请参阅Inference Providers🖇️链接10-8,或Inference Endpoints🖇️链接10-9。对于网页开发,官方已发布JS Client🖇️链接10-10。如果从事游戏开发,可以关注官方的C# project🖇️链接10-11

10.3.2 text_to_image:文生图任务

让我们从一个文生图任务开始入门:

from huggingface_hub import InferenceClient
# Example with an external provider (e.g. replicate)
replicate_client = InferenceClient(
    provider="replicate",
    api_key="my_replicate_api_key",
)
replicate_image = replicate_client.text_to_image(
    "A flying car crossing a futuristic cityscape.",
    model="black-forest-labs/FLUX.1-schnell",
)
replicate_image.save("flying_car.png")

在上述示例中,我们使用第三方服务提供商Replicate初始化了一个 InferenceClient。当使用第三方提供商时,必须指定要使用的模型,该模型ID必须是HuggingFace Hub上的模型标识符,而非第三方提供商自身的模型ID。在本例中,我们通过文本提示生成了一张图像,返回值为PIL.Image对象,可保存为文件,更多细节请参阅文档:text_to_image()🖇️链接10-12

10.3.3 chat_completion:生成响应

接下来让我们看一个使用chat_completion() API的示例,该任务利用大语言模型由消息列表生成响应:

from huggingface_hub import InferenceClient
messages = [
    {
        "role": "user",
        "content": "What is the capital of France?",
    }
]
client = InferenceClient(
    provider="together",
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    api_key="my_together_api_key",
)
client.chat_completion(messages, max_tokens=100)

输出为:

ChatCompletionOutput(
    choices=[
        ChatCompletionOutputComplete(
            finish_reason="eos_token",
            index=0,
            message=ChatCompletionOutputMessage(
                role="assistant", content="The capital of France is Paris.", name=None, tool_calls=None
            ),
            logprobs=None,
        )
    ],
    created=1719907176,
    id="",
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    object="text_completion",
    system_fingerprint="2.0.4-sha-f426a33",
    usage=ChatCompletionOutputUsage(completion_tokens=8, prompt_tokens=17, total_tokens=25),
)

示例中,我们创建客户端时使用了第三方服务提供商Together AI,并指定了所需模型meta-llama/Meta-Llama-3-8B-Instruct。随后我们提供了待补全的消息列表(此处为单个问题),并向API传递了额外参数(max_token=100)。输出结果为遵循OpenAI规范的ChatCompletionOutput对象,生成内容可通过output.choices[0].message.content获取。

更多细节请参阅chat_completion()文档🖇️链接10-13。该API设计简洁,但并非所有参数和选项都会向终端用户开放或说明,如需了解各任务支持的全部参数,请查阅Inference Providers - API Reference🖇️链接10-14,如果查询各提供商支持的任务,请查询Inference - Supported providers and tasks🖇️链接10-15

### 解决方案 在解决 `AttributeError: module 'PIL' has no attribute 'Image'` 错误时,需要从以下几个方面进行排查和修复: 1. **检查 PIL 和 Pillow 的安装情况** 在 Python 中,`PIL.Image` 实际上是由 `Pillow` 库提供的。如果错误提示 `module 'PIL' has no attribute 'Image'`,可能是由于以下原因之一: - 没有正确安装 `Pillow`。 - 安装了旧版本的 `Pillow`,导致缺少某些功能。 - 存在命名冲突(例如本地文件或模块命名为 `PIL.py`)。 可以通过以下命令重新安装最新版本的 `Pillow` 来解决问题[^4]: ```bash pip uninstall PIL pip install --upgrade Pillow ``` 2. **避免命名冲突** 如果项目目录下存在名为 `PIL.py` 的文件或模块,Python 会优先加载本地的 `PIL` 而非系统安装的 `Pillow`。这会导致 `PIL.Image` 无法正常工作。请检查项目目录,确保没有与 `PIL` 或 `Pillow` 冲突的文件名[^5]。 3. **验证安装是否成功** 在终端中运行以下代码,确认 `Pillow` 是否正确安装并支持 `PIL.Image`: ```python from PIL import Image print(Image.__version__) ``` 如果上述代码能够正常运行且打印出版本号,则说明 `Pillow` 已正确安装[^6]。 4. **检查 Gradio 版本兼容性** 根据引用内容[^2],某些版本的 `Gradio` 可能存在兼容性问题。建议使用稳定版本(如 `gradio==3.41.2`),以避免潜在的错误: ```bash pip install gradio==3.41.2 ``` 5. **完整示例代码** 下面是一个经过调整的代码示例,确保 `Pillow` 和 `Gradio` 的正确导入和使用: ```python from PIL import Image import gradio as gr from ultralytics import YOLO def predict_image(img): model = YOLO('./runs/detect/train/weights/best.pt') results = model.predict(source=img, conf=0.25) im_array = results[0].plot() pil_img = Image.fromarray(im_array[..., ::-1]) return pil_img if __name__ == '__main__': iface = gr.Interface( fn=predict_image, inputs=gr.Image(type='pil'), outputs='image', examples=["./GlobalWheat/images/validation/example.jpg"], title="Wheat Detection", description="Upload an image to detect objects using YOLOv8." ) iface.launch() ``` ### 注意事项 - 确保环境干净,避免多个 Python 版本或虚拟环境之间的依赖冲突。 - 如果问题仍然存在,请尝试创建一个新的虚拟环境并重新安装所有依赖项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值