公司动态
从NVIDIA投资Perplexity看AI搜索底层技术:GPU、CUDA与RAG架构实战解析
最近科技圈有一条消息引起了很多人的关注NVIDIA 拟以约 300 亿美元估值投资 AI 搜索公司 Perplexity。对于普通用户来说这可能只是一条财经新闻但对于 AI 开发者、算法工程师和运维同学来说这件事背后意味着 AI 产业链正在加速分层底层算力、模型应用、推理优化、数据检索每个环节都在快速商业化。本文将围绕这条新闻展开从技术视角拆解 NVIDIA 和 Perplexity 在 AI 产业链中的位置梳理 GPU 驱动、CUDA、推理优化、AI 搜索背后的 RAG 架构等关键知识点并给出一套可落地的 NVIDIA 环境搭建与 AI 检索实战示例。即使你目前没有 GPU 服务器也能通过本文建立完整的技术认知框架。文章内容比较长建议先收藏再阅读。如果你是搞深度学习、大模型应用或者 AI 基础设施的同学这篇文章应该能帮你把“新闻热点”和“日常开发”连接起来。1. NVIDIA 与 Perplexity一次值得关注的 AI 产业链联动1.1 事件背景为什么 NVIDIA 要投资 Perplexity根据媒体消息NVIDIA 正在与 Perplexity 讨论一笔估值约 300 亿美元的投资。Perplexity 是做 AI 搜索的也就是通过大模型理解用户问题再结合实时网页检索结果生成带引用的答案。和传统搜索引擎“给链接”不同Perplexity 直接“给答案”并且标注信息来源。NVIDIA 为什么要投资这样一家公司从技术角度分析有几个原因AI 搜索是典型的大模型推理场景。每一次搜索背后都需要调用大模型进行理解、推理和生成。推理需要 GPU推理规模越大GPU 消耗越多。NVIDIA 正在从“卖芯片”走向“卖算力基础设施”。投资 AI 应用层公司可以绑定下游需求让生态更稳固。Perplexity 代表了一种新的流量入口。如果 AI 搜索成为用户获取信息的默认方式那么它的底层算力需求是持续的、刚性的。从开发者视角看这条新闻的核心信号是大模型应用已经进入“要算力、要优化、要工程化”的阶段。1.2 AI 产业链的上下游关系为了更好地理解这次投资可以把 AI 产业链简单分成四层层级代表典型技术芯片与硬件NVIDIA、AMDGPU、HBM 显存、高速互联软件栈与平台CUDA、NVIDIA AI Enterprise、云厂商驱动、框架、容器、调度模型与算法OpenAI、开源大模型预训练、微调、RAG、Agent应用与产品Perplexity、各类 AI 应用搜索、对话、Agent、多模态NVIDIA 原本占据第一层和第二层通过投资 Perplexity它实际上在往第四层渗透。但对开发者来说真正重要的不是资本层面的故事而是GPU 算力如何真正跑起来AI 应用如何高效落地。1.3 对开发者的实际意义如果你所在的团队正在做以下事情那么这次事件对你是有直接参考价值的基于大模型 API 做 AI 搜索、知识库问答。自建大模型推理服务需要规划 GPU 资源。在 Linux 服务器上安装 NVIDIA 驱动、CUDA、容器运行时。关注 RAG 架构、向量检索、推理成本优化。后面几个章节我会围绕这些技术点展开尽量做到每个知识点都能直接用到项目中。2. NVIDIA AI 基础设施全景从 GPU 到软件栈2.1 GPU 硬件训练与推理的不同需求NVIDIA 的 GPU 产品线很多选型之前必须先搞清楚场景。大模型训练阶段需要大规模并行计算通常使用 A100、H100、H200 这类数据中心级 GPU搭配 NVLink、InfiniBand 等高速互联。训练任务的特点是长时间、高占用、对总算力要求极高。推理阶段则分为两种情况在线推理用户请求是实时的要求低延迟、高并发。单个请求可能只需要几毫秒到几秒的 GPU 计算。离线批量推理比如批量生成摘要、批量向量化对延迟不敏感但对吞吐量有要求。对于 AI 搜索类应用大部分算力消耗集中在推理和向量检索。Perplexity 这类产品不可能只为一次搜索单独训练一个模型而是大量调用模型 API 或自建推理集群。如果只是学习或者中小规模场景消费级显卡如 RTX 系列也能跑推理和微调只要显存足够。比如 LLaMA 7B 量化之后16GB 显存的 RTX 4080/4090 可以跑起来。2.2 CUDA 生态与驱动很多初学者会把“安装 NVIDIA 驱动”和“安装 CUDA”混为一谈实际上它们是两个不同层面的东西。NVIDIA 驱动操作系统与 GPU 硬件之间的桥梁负责让系统识别 GPU提供图形计算和通用计算能力。CUDA Toolkit基于 NVIDIA GPU 的并行计算开发平台包含编译器nvcc、运行时库、数学库cuBLAS、cuDNN 等、调试工具等。GPU 支持的计算能力不同 GPU 对 CUDA 版本有最低要求新驱动一般向下兼容旧 CUDA但不是所有组合都一定稳定。常见的验证命令是# 查看 GPU 状态和驱动信息 nvidia-smi # 查看 CUDA 编译器版本 nvcc -V这两条命令经常被拿来对比nvidia-smi显示的 CUDA Version 是当前驱动支持的最高 CUDA 运行版本不代表你已经安装了 CUDA Toolkit。nvcc -V显示的才是当前环境里 CUDA Toolkit 的实际版本。如果只跑 PyTorch/TensorFlow 的预编译包很多时候只需要正确的驱动不需要单独安装完整 CUDA Toolkit因为框架自带了 CUDA 运行时。但如果需要自己编译 CUDA 扩展就必须安装与 GPU 驱动匹配的 CUDA Toolkit。2.3 NVIDIA AI Enterprise 与 NIMNVIDIA 近年一直在推动“全栈 AI 平台”战略其中两个概念值得关注NVIDIA AI Enterprise一套面向企业生产环境的软件套件包含 CUDA-X 库、容器运行时、监控工具、支持服务。企业用它可以在 VMware、OpenShift、Kubernetes 等平台上运行 AI 工作负载。NVIDIA NIMNVIDIA Inference Microservices一组预构建的推理微服务把大模型推理封装成标准 API开发者可以像调用普通 Web 服务一样调用大模型。NIM 的设计思路是把模型、推理引擎、依赖库全部打包进容器你只需要提供 GPU 资源和 API 请求不需要自己处理复杂的推理工程。这和 Perplexity 这类 AI 应用的商业模式是天然匹配的——应用层关注用户体验基础设施层封装算力。对于个人开发者NIM 的意义更多在于学习“生产级推理服务”应该长什么样。实际开发不一定要用 NIM但理解它的架构思想很有帮助。3. Perplexity 的核心技术架构初探虽然 Perplexity 没有完整公开内部架构但从产品行为和公开技术资料中可以推断出一个典型的 AI 搜索系统应该包含哪些模块。3.1 大模型 API 聚合层Perplexity 早期主要基于第三方大模型 API后来逐步引入多模型策略。它的系统里有一个模型抽象层负责把用户问题路由到合适的模型。这个设计有实际好处不同模型在不同任务上表现不同可以按场景分流。如果某个模型 API 出现故障可以快速切换备用模型。可以根据成本策略选择模型简单问题用小模型复杂推理用大模型。在开发中我们可以这样抽象模型调用接口# 文件路径llm_client.py from abc import ABC, abstractmethod class LLMClient(ABC): abstractmethod def chat(self, messages: list[dict]) - str: 发送对话消息并返回文本回复 pass class OpenAICompatibleClient(LLMClient): 兼容 OpenAI 接口格式的客户端 def __init__(self, api_key: str, base_url: str, model: str): self.api_key api_key self.base_url base_url.rstrip(/) self.model model def chat(self, messages: list[dict]) - str: # 这里以 requests 为例生产环境建议使用 openai SDK 或 httpx import requests url f{self.base_url}/v1/chat/completions headers { Authorization: fBearer {self.api_key}, Content-Type: application/json, } payload { model: self.model, messages: messages, temperature: 0.3, } resp requests.post(url, jsonpayload, headersheaders, timeout30) resp.raise_for_status() return resp.json()[choices][0][message][content]3.2 RAG 检索增强生成AI 搜索最核心的技术是 RAGRetrieval-Augmented Generation检索增强生成。大模型的知识是训练时固定的它不知道最新新闻也不知道企业内部资料。RAG 的思路是在回答之前先从外部知识库中检索和问题相关的内容再把检索到的内容作为上下文交给大模型生成答案。RAG 的典型流程把文档切分成小块chunk。对每个 chunk 做向量化存入向量数据库。用户提问时对问题做向量化。在向量数据库中查询最相似的 top-k 个片段。把片段和用户问题一起组装成 prompt交给大模型。大模型生成回答同时可以附上引用来源。回到 Perplexity 的例子上它搜索“实时信息”时就是先把相关网页抓取下来经过处理后再让大模型生成回答。搜索结果中的引用链接对应的就是步骤 4 中召回的相关片段。3.3 何时需要自建推理集群Perplexity 这类产品每天处理海量用户查询如果全部依赖第三方大模型 API成本会非常高。所以成熟的 AI 搜索公司通常会有一个“混合推理”策略简单问题走小模型或缓存。复杂问题走大模型。高峰期用弹性算力。长期稳定流量走自建 GPU 集群。自建推理集群的核心难点是 GPU 资源管理和推理优化。这恰好是 NVIDIA 生态最擅长的地方TensorRT 加速、vLLM 批处理、NIM 容器化部署、KServe 弹性伸缩等都是围绕这个场景展开的。对于大部分开发团队我不建议一开始就自建大规模 GPU 集群。更合理的路径是先用大模型 API 跑通业务。监控调用量和成本。当成本占比明显升高、延迟不稳定时再考虑自建推理。自建时先用单机多卡验证再上 Kubernetes。4. 实战搭建 AI 搜索应用的常见环境含 NVIDIA 驱动与 CUDA为了让文章不流于概念这一节我们动手做一个“简化版 AI 搜索”环境。严格来说这不是实现一个 Perplexity而是把 AI 搜索底层的 RAG 流程跑通同时在 Linux 环境里配置好 NVIDIA GPU。4.1 环境准备本文示例使用以下环境版本需要根据你的项目实际情况调整这里重点演示配置思路。操作系统Ubuntu 22.04 LTSGPUNVIDIA 显卡支持 CUDA 即可推荐 8GB 以上显存Python3.10向量数据库使用 FAISS本地内存型向量检索库嵌入模型使用 sentence-transformers 的本地模型LLM通过 OpenAI 兼容接口调用可以是第三方 API也可以是自己部署的 vLLM 服务项目结构ai-search-demo/ ├── data/ # 原始文档 │ └── docs.txt ├── index_store/ # 向量索引保存位置 ├── build_index.py # 文档切分与向量化 ├── search.py # 检索与生成 ├── requirements.txt └── README.md4.2 安装 NVIDIA 驱动与 CUDA如果机器上已经有 NVIDIA 显卡第一步是检查当前状态lspci | grep -i nvidia如果能看到类似NVIDIA Corporation GA102 [GeForce RTX 3080]的信息说明系统识别到了 GPU。接着检查是否已经安装驱动nvidia-smi如果报错NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver.说明驱动没有正确安装或者没有加载。在 Ubuntu 上安装驱动最简单的方式是通过官方驱动仓库sudo apt update sudo apt install -y ubuntu-drivers-common ubuntu-drivers devices这个命令会列出推荐安装的驱动版本类似driver : nvidia-driver-535 - third-party free recommended然后安装推荐版本sudo apt install -y nvidia-driver-535 sudo reboot重启后再次运行nvidia-smi正常情况下能看到类似输出----------------------------------------------------------------------------- | NVIDIA-SMI 535.154.05 Driver Version: 535.154.05 CUDA Version: 12.2 | -----------------------------------------------------------------------------关于 CUDA Toolkit如果只是用 PyTorch 跑模型通常不需要单独安装完整 Toolkit。PyTorch 安装时会自带 CUDA 运行时。只有在需要编译自定义 CUDA 算子时才需要安装完整 CUDA Toolkit。安装 CUDA Toolkit 的典型方式是wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt update sudo apt install -y cuda-toolkit-12-4安装后配置环境变量export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH建议写入~/.bashrc避免每次手动 export。4.3 验证 GPU 可用性驱动装好后用 Python 验证 GPU 是否对深度学习框架可见。先创建虚拟环境并安装依赖python3 -m venv venv source venv/bin/activate pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121然后运行# 文件路径check_gpu.py import torch print(PyTorch 版本:, torch.__version__) print(CUDA 是否可用:, torch.cuda.is_available()) if torch.cuda.is_available(): print(GPU 名称:, torch.cuda.get_device_name(0)) print(GPU 显存:, torch.cuda.get_device_properties(0).total_memory / 1024**3, GB)如果输出CUDA 是否可用: True说明环境已经 OK。4.4 使用 FAISS 实现一个简单的 RAG 检索接下来我们实现一个最简化的 RAG 流程文档切分 → 向量化 → 检索。第一步准备一个示例文档data/docs.txtNVIDIA 是一家专注于加速计算的公司其 GPU 广泛应用于人工智能训练和推理。 Perplexity 是一个 AI 搜索产品它结合大模型与实时网页检索直接回答用户问题。 RAG 是检索增强生成的缩写通过外部知识库提升大模型回答的准确性和时效性。 FAISS 是 Meta 开源的向量检索库支持大规模稠密向量相似度搜索。 CUDA 是 NVIDIA 提供的并行计算平台开发者可以使用它调用 GPU 算力。第二步编写build_index.py把文档切块并向量化# 文件路径build_index.py import os import numpy as np import faiss from sentence_transformers import SentenceTransformer # 1. 读取文档 with open(data/docs.txt, r, encodingutf-8) as f: text f.read() # 2. 按换行切分实际项目可改用更精细的切分策略 chunks [line.strip() for line in text.splitlines() if line.strip()] print(f共切分得到 {len(chunks)} 个文本块) # 3. 加载嵌入模型 model SentenceTransformer(BAAI/bge-small-zh-v1.5) # 4. 向量化 embeddings model.encode(chunks, normalize_embeddingsTrue).astype(float32) # 5. 构建 FAISS 索引 dimension embeddings.shape[1] index faiss.IndexFlatIP(dimension) # 内积索引配合归一化相当于余弦相似度 index.add(embeddings) # 6. 保存索引和文本块 os.makedirs(index_store, exist_okTrue) faiss.write_index(index, index_store/docs.index) with open(index_store/chunks.txt, w, encodingutf-8) as f: for chunk in chunks: f.write(chunk \n) print(索引构建完成)第三步编写search.py实现“检索 生成”# 文件路径search.py import faiss import numpy as np from sentence_transformers import SentenceTransformer from llm_client import OpenAICompatibleClient # 这部分是核心片段需要根据你的实际模型服务地址和 key 填写 LLM_BASE_URL https://your-llm-service.example.com LLM_API_KEY your-api-key LLM_MODEL qwen2.5-7b-instruct def retrieve(query: str, top_k: int 3): 从 FAISS 索引中检索最相关的文本块 model SentenceTransformer(BAAI/bge-small-zh-v1.5) index faiss.read_index(index_store/docs.index) with open(index_store/chunks.txt, r, encodingutf-8) as f: chunks [line.strip() for line in f if line.strip()] query_embedding model.encode([query], normalize_embeddingsTrue).astype(float32) scores, indices index.search(query_embedding, top_k) results [] for score, idx in zip(scores[0], indices[0]): if idx 0 and idx len(chunks): results.append({text: chunks[idx], score: float(score)}) return results def generate_answer(query: str, context_items: list) - str: 把检索结果作为上下文交给大模型生成最终回答 context \n.join([item[text] for item in context_items]) messages [ { role: system, content: 你是一个严谨的 AI 搜索助手。请根据提供的检索资料回答用户问题 如果资料不足以回答请明确说明。回答尽量简洁并标注引用编号。, }, { role: user, content: f检索资料\n{context}\n\n用户问题{query}, }, ] client OpenAICompatibleClient( api_keyLLM_API_KEY, base_urlLLM_BASE_URL, modelLLM_MODEL, ) return client.chat(messages) if __name__ __main__: query 什么是 RAG items retrieve(query) print(检索结果) for i, item in enumerate(items, 1): print(f[{i}] (相似度 {item[score]:.4f}) {item[text]}) # 如果配置了 LLM 服务取消下面注释 # answer generate_answer(query, items) # print(最终回答) # print(answer)4.5 运行与验证运行索引构建source venv/bin/activate python build_index.py预期输出共切分得到 5 个文本块 索引构建完成运行检索python search.py预期输出检索结果 [1] (相似度 0.xxxx) RAG 是检索增强生成的缩写通过外部知识库提升大模型回答的准确性和时效性。 [2] (相似度 0.xxxx) Perplexity 是一个 AI 搜索产品它结合大模型与实时网页检索直接回答用户问题。 ...到这里一个最简化的 AI 搜索流程已经跑通了。你替换成自己的业务文档就能变成一个知识库问答机器人把检索源换成网页抓取就具备了 Perplexity 的基础形态。5. 高频问题排查NVIDIA 驱动与 GPU 环境在实际项目中NVIDIA 环境的问题出现频率非常高。下面整理几类典型问题。5.1 nvidia-smi 报错无法与驱动通信错误信息NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.常见原因和解决思路问题现象常见原因解决思路nvidia-smi 报无法通信驱动未安装或安装失败检查 lspci驱动重启后失效内核升级导致驱动模块不匹配使用 DKMS 方式安装驱动或安装对应内核的驱动包驱动安装失败报 0xe6000000安装环境存在旧驱动文件或系统不兼容先彻底清理旧驱动再在无图形界面的多用户模式下安装容器内无法用 GPU缺少 NVIDIA Container Toolkit安装 nvidia-container-toolkit 并配置 runtime5.2 驱动重启后失效很多人在 Ubuntu 上安装 NVIDIA 驱动后重启又变回 nouveau 开源驱动。解决方法有两个方案一安装 DKMS 版本驱动。sudo apt install -y dkmsDKMS 会在内核升级后自动重新编译驱动模块。方案二禁用 nouveau。编辑/etc/modprobe.d/blacklist-nouveau.confblacklist nouveau options nouveau modeset0然后重新生成内核镜像并重启sudo update-initramfs -u sudo reboot5.3 驱动与 CUDA 版本不匹配判断驱动与 CUDA 版本是否匹配最简单的方式是查看nvidia-smi输出中的 CUDA Version。比如CUDA Version: 12.2这表示当前驱动最高支持 CUDA 12.2。如果你安装的 CUDA Toolkit 版本高于驱动支持的版本运行时可能报错。建议保持CUDA Toolkit nvidia-smi 显示的 CUDA Version另外nvcc -V和nvidia-smi显示版本不一致是正常的前者是 Toolkit 编译器版本后者是驱动支持的运行时版本。5.4 安装程序无法继续Windows 下 NVIDIA 驱动安装报0xe6000000或0x80070002时通常是以下原因旧驱动没有清理干净。杀毒软件或系统防火墙拦截了安装程序。安装包下载不完整。建议先使用 DDUDisplay Driver Uninstaller在安全模式下清理旧驱动再重新安装。5.5 排查清单如果你在 Linux 上遇到 GPU 相关报错可以按以下顺序排查物理层lspci | grep -i nvidia确认系统能看到 GPU。驱动层nvidia-smi确认驱动已加载且能通信。内核模块lsmod | grep nvidia确认 nvidia 模块已加载。用户权限确认当前用户在video组中安装时是否需要sudo。容器层确认 Docker 配置了 nvidia-container-runtime。框架层确认 PyTorch/TensorFlow 使用了配套的 CUDA 版本。6. 工程化建议面向 AI 搜索类应用的部署要点NVIDIA 投资 Perplexity 的背后是 AI 搜索类应用对高质量算力基础设施的刚性需求。对于普通团队来说在部署类似系统时建议关注以下几个方面。6.1 成本分层与弹性AI 搜索的最大成本是推理成本。推荐做分层第一层缓存层。相同或相似的问题直接命中缓存不调用模型。第二层小模型层。简单问题、事实型问题用小模型回答。第三层大模型层。复杂推理、多轮对话才调用大模型。同时推理服务要支持弹性伸缩。业务高峰期用按量付费的 GPU 实例扩展低峰期缩容避免 24 小时满载运行。6.2 驱动、容器与依赖版本管理GPU 环境的版本管理比普通后端服务严格得多建议使用容器封装推理服务避免宿主机依赖污染。锁定基础镜像版本例如nvidia/cuda:12.4.1-runtime-ubuntu22.04。将驱动版本写入部署文档方便跨团队协作。生产环境不要手动在宿主机上装各种 Python 包。Docker 启用 GPU 的示例docker run -d --gpus all \ --name llm-service \ -p 8000:8000 \ --shm-size16g \ your-registry/llm-service:1.0.0如果遇到could not select device driver with capabilities: [[gpu]]的报错说明宿主机缺少 NVIDIA Container Toolkitsudo apt install -y nvidia-container-toolkit sudo systemctl restart docker6.3 数据与安全边界AI 搜索类应用在检索外部信息时要注意来源可靠性在企业内部部署时要注意数据权限隔离。不要把机密数据暴露给外部大模型 API。正确做法是企业内部敏感数据走私有化部署的模型或向量库。对检索到的文档做权限校验确保用户只能看到自己有权访问的内容。对输入和输出内容做日志审计方便追溯。6.4 性能观测与持续优化上线后的观测比上线动作更重要。至少需要监控指标监控内容风险阈值参考GPU 利用率SM 利用率、显存占用长期低于 20% 说明资源浪费持续 95% 以上可能过载推理延迟P50/P95/P99 延迟根据业务定义一般 P95 小于 3 秒可接受缓存命中率缓存命中的请求占比越高越好低于 20% 需要检查问题重复度召回准确率检索结果是否与问题相关需要定期人工评估成本指标单次请求平均成本持续上升需要优化模型或缓存策略6.5 上线前自检清单[ ] GPU 驱动版本、CUDA 版本、框架版本已记录。[ ] 推理服务支持优雅启动与退出。[ ] 模型 API 调用有超时、重试、熔断机制。[ ] 向量索引有定期重建任务避免旧数据长期不更新。[ ] 缓存键考虑大小写、同义词、时间衰减。[ ] 日志中记录了请求 ID、命中缓存标记、检索来源。[ ] 生产环境有回滚方案模型或配置变更可快速回退。7. 总结与学习路线NVIDIA 拟以 300 亿美元估值投资 Perplexity 这件事表面上是商业新闻实质上体现了 AI 产业正在从“模型竞赛”走向“工程化和基础设施竞赛”。AI 搜索这样的应用产品离不开稳定高效的 GPU 算力也离不开 RAG、向量检索、推理优化等工程能力。本文从 NVIDIA 的硬件与软件生态讲起介绍了 CUDA、NIM、GPU 驱动等核心概念然后拆解了 AI 搜索背后的 RAG 架构最后用一个完整示例演示了如何在 Ubuntu 环境下配置 NVIDIA 驱动、验证 GPU并实现一个最简化的检索增强生成流程。在排错部分针对常见的驱动问题整理了排查思路希望能帮你绕过那些反复出现的坑。接下来可以继续学习的方向包括掌握 Linux 下 NVIDIA 驱动的多种安装方式runfile、apt、DKMS。学习 Docker 和 Kubernetes 下的 GPU 调度理解--gpus、nvidia-device-plugin的用法。研究 vLLM、TensorRT-LLM 等推理优化框架理解连续批处理、PagedAttention 等概念。深入 RAG学习文档切分策略、混合检索、重排序、评估指标。动手实践是掌握这些内容最好的方式。建议先用一台带 NVIDIA 显卡的机器按照本文第 4 节的步骤跑通流程然后逐步替换成你自己的业务数据和模型。遇到问题的时候多看看日志多试试分步排查收获会更大。如果文章对你有帮助可以收藏备用也欢迎在评论区交流你在 NVIDIA 环境搭建或 AI 搜索落地中遇到的问题。