
大模型部署全攻略!手把手教你部署开源 DeepSeek,告别访问受限困扰!
大模型正在重塑我们的学习和工作方式,不管你是选择使用 DeepSeek 还是自己部署大模型,最重要的是。
近年来,大模型技术突飞猛进,全球各大科技公司纷纷投入研发,形成了一系列成熟的主流大模型。以下是目前国内外最具代表性的大模型:
从上表可以看出,国内大模型在中文理解方面更具优势,同时涌现出大量开源方案,为用户提供了更灵活的部署选择。
此外,根据SuperCLUE最新发布的大语言模型排行榜,国内大模型主要供应商如下:
下面回答一个最近用户提问比较多的问题,为什么国内外有这么多大模型了,DeepSeek还能这么火爆呢?
DeepSeek 之所以能在短时间内火爆出圈,主要得益于以下几点优势:
-
硬件优化创新:DeepSeek 针对国产 GPU 进行了优化,使得推理速度更快,成本更低。
-
高效的训练架构:采用创新的 MoE(Mixture of Experts)架构,在保证计算效率的同时,提高了模型的智能化水平。
-
针对中文的优化:相较于 GPT-4、Claude,DeepSeek 在中文 NLP 任务(如阅读理解、代码生成)上表现更优。
-
开放性与易部署:DeepSeek 提供了 Hugging Face 权重支持,并优化了量化技术,使得普通用户也能尝试本地部署。
AI 时代,我们的思维方式也需要改变。很多人还习惯于传统搜索,但真正的智能时代,应该是与AI 交谈,不断优化问题,直到得到最佳答案。
正如爱因斯坦所说:“我们不能用制造问题时的思维方式来解决问题。”
比如,很多人直接问 AI:❌ “帮我写个市场分析报告。”
但如果优化成:✅ “作为市场经理,我需要对 2024 年 Q4 中国新能源汽车市场做一个简要分析。请结合销量数据、用户评价趋势和政策影响,输出一篇 800 字报告。”
这样,AI 生成的内容不仅更精准,还能真正解决你的需求。
但是,当下很多用户在尝试使用DeepSeek的时候面临一个问题,许多用户反馈,在某些场景下,DeepSeek 访问不稳定,DeepSeek依然未能从服务崩溃中彻底走出来。
这也引出了一个关键问题:当 DeepSeek 不可用时,如何保证你的 AI 工作流不受影响?
解决方案 1:使用其他大模型
如果 DeepSeek 无法访问,可以切换到其他国内外大模型:
-
国内替代:Qwen、Baichuan、Yi-34B 等。
-
国外替代:GPT-4、Claude 2、Gemini 1.5(需要科学上网)。
解决方案 2:自己部署大模型
如果你想长期稳定地使用大模型,并希望掌握更大的自由度,可以考虑自部署。
自己部署大模型需要什么资源?
部署大模型的核心资源是 GPU,不同规模的模型对算力的需求不同,以下是大致的硬件和成本估算:
几种大模型部署方案
1. 本地部署(学习/实验)
如果你只是想体验大模型,学习 RAG(检索增强生成),可以尝试在 笔记本/台式机 上运行小型模型。
示例:
-
下载 Qwen 1.5B(Hugging Face)
-
使用
transformers
加载模型 -
运行本地推理
2. 单机 3080/3090 运行 7B 级别模型
如果你有一块 24GB 显存的 3080/3090,可以运行 DeepSeek 7B、Llama 3-7B 级别的模型。
工具推荐:
-
llama.cpp
(高效量化推理) -
AutoGPTQ
(低显存推理优化)
3. 服务器部署 30B-70B 级别大模型(企业级方案)
如果需要更强的计算能力,建议使用 A100 / H100 服务器 进行部署。
应用场景:
-
自建 AI 助理
-
企业级 RAG(检索增强生成)
-
批量数据处理
接下来,我提供一个示例,利用DeepSeek 和 Qdrant 构建一个中文新闻 AI!
尤其是因为,尽管LLMs其规模和复杂性越来越大,但在构建英语之外的准确有效的语言 AI 仍然存在一系列挑战。在这种情况下,DeepSeek LLM 开始了一个长期的项目,以克服语言应用程序中的不准确之处。DeepSeek LLM 在中文方面表现出色,在这里,我们将了解它在从中文新闻数据集中获取新闻时的表现。
我们将利用 LlamaIndex、Qdrant 的 FastEmbed 和 Qdrant Vector Store 来开发一个应用程序,让我们可以通过强大的 RAG 来理解中文新闻。
DeepSeek LLM 是一种高级语言模型,它开发了不同的模型,包括 Base 和 Chat。它是在包含 2 万亿个英文和中文令牌的数据集上从头开始训练的。就大小而言,DeepSeek LLM 模型有两种:一种包含 70 亿个参数,另一种包含 670 亿个参数。
7B 模型使用多头注意力,而 67B 模型使用分组查询注意力。这些变体在与 Llama 2 模型相同的架构上运行,后者是一个自回归 transformer 解码器模型。
DeepSeek LLM 是一个致力于从长远角度推进开源大型语言模型的项目。然而,DeepSeek LLM 67B 在推理、数学、编码和理解等各个领域都优于 Llama 2 70B。与包括 GPT 3.5 在内的其他模型相比,DeepSeek LLM 在中文熟练度方面表现出色。
Qdrant 是一个用 Rust 编写的开源向量数据库和向量相似性搜索引擎,旨在通过先进和高性能的向量相似性搜索技术为下一代 AI 应用程序提供支持。其主要功能包括多语言支持,可实现各种数据类型的多功能性,以及适用于各种应用程序的过滤器。
FastEmbed 是一个轻量级、快速且准确的 Python 库,专为嵌入生成而构建,由 Qdrant 监督维护。它通过利用量化模型权重和 ONNX 运行时来实现效率和速度,从而避免了 PyTorch 依赖项的必要性。
LlamaIndex 是一个强大的框架,非常适合构建检索增强生成 (RAG) 应用程序。它有助于用于检索和合成的块的解耦,这是一个关键特征,因为检索的最佳表示可能与合成的不同。随着文档量的增加,LlamaIndex 通过确保更精确的结果来支持结构化检索,尤其是当查询仅与文档子集相关时。
由于 DeepSeek LLM 在中文语言熟练度方面表现出色,让我们使用 Retrieval Augmented Generation 构建一个中文新闻 AI。
首先,让我们安装所有依赖项。
pip install -q llama-index transformers datasets``pip install -q llama-cpp-python``pip install -q qdrant-client``pip install -q llama_hub``pip install -q fastembed
在这里,我使用了这个数据集;它是一个多语言的新闻数据集。我选择了中文。加载数据集并将其保存到您的目录中。我们将使用 LlamaIndex 通过 SimpleDirectoryReader 读取数据。
from datasets import load_dataset``dataset = load_dataset("intfloat/multilingual_cc_news", languages=["zh"], split="train")``dataset.save_to_disk("Notebooks/dataset")
使用 LlamaIndex,从保存数据集的目录中加载数据。
from llama_index import SimpleDirectoryReader``documents = SimpleDirectoryReader("Notebooks/dataset").load_data()
使用 SentenceSplitter 将文档拆分为小块。在这里,我们需要维护文档和源文档索引之间的关系,以便它有助于注入文档元数据。
from llama_index.node_parser.text import SentenceSplitter``text_parser = SentenceSplitter(chunk_size=1024,)``text_chunks = []``doc_idxs = []``for doc_idx, doc in enumerate(documents):` `cur_text_chunks = text_parser.split_text(doc.text)` `text_chunks.extend(cur_text_chunks)` `doc_idxs.extend([doc_idx] * len(cur_text_chunks))
然后,我们将手动从文本块构建节点。
from llama_index.schema import TextNode``nodes = []``for idx, text_chunk in enumerate(text_chunks):` `node = TextNode(text=text_chunk,)` `src_doc = documents[doc_idxs[idx]]` `node.metadata = src_doc.metadata` `nodes.append(node)
对于每个节点,我们将使用 FastEmbed Embedding 模型生成嵌入。
from llama_index.embeddings import FastEmbedEmbedding``embed_model = FastEmbedEmbedding(model_name="BAAI/bge-small-en-v1.5")``for node in nodes:` `node_embedding = embed_model.get_text_embedding(node.get_content(metadata_mode="all"))` `node.embedding = node_embedding
现在,是时候使用 LlamaIndex 中的 HuggingFaceLLM 加载 DeepSeekLLM。在这里,我使用了聊天模型。
from llama_index.llms import HuggingFaceLLM``llm = HuggingFaceLLM(` `context_window=4096,` `max_new_tokens=256,` `generate_kwargs={"temperature": 0.7, "do_sample": False},` `tokenizer_name="deepseek-ai/deepseek-llm-7b-chat",` `model_name="deepseek-ai/deepseek-llm-7b-chat",` `device_map="auto",` `stopping_ids=[50278, 50279, 50277, 1, 0],` `tokenizer_kwargs={"max_length": 4096},` `model_kwargs={"torch_dtype": torch.float16}``)
然后,我们将定义 ServiceContext,它由嵌入模型和大型语言模型组成。
from llama_index import ServiceContext``service_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)
之后,我们将使用 Qdrant 向量数据库创建一个向量存储集合,并使用向量存储集合创建一个存储上下文。
import qdrant_client``from llama_index.vector_stores.qdrant import QdrantVectorStore``client = qdrant_client.QdrantClient(location=":memory:")``from llama_index.storage.storage_context import StorageContext``from llama_index import (VectorStoreIndex,` `ServiceContext,` `SimpleDirectoryReader,)``vector_store = QdrantVectorStore(client=client, collection_name="my_collection")``vector_store.add(nodes)``storage_context = StorageContext.from_defaults(vector_store=vector_store)
我们将文档、存储上下文和服务上下文传递到 VectorStoreIndex 中。
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context, service_context=service_context)
我们将使用查询字符串生成查询嵌入,以构建检索管道。
query_str = "Can you give me news around IPhone?"``query_embedding = embed_model.get_query_embedding(query_str)
然后,我们将构造一个 Vector Store 查询并查询 vector 数据库。
from llama_index.vector_stores import VectorStoreQuery``query_mode = "default"``vector_store_query = VectorStoreQuery(query_embedding=query_embedding, similarity_top_k=2, mode=query_mode)``query_result = vector_store.query(vector_store_query)``print(query_result.nodes[0].get_content())
然后,我们将结果解析为一组节点。
from llama_index.schema import NodeWithScore``from typing import Optional``nodes_with_scores = []``for index, node in enumerate(query_result.nodes):` `score: Optional[float] = None` `if query_result.similarities is not None:` `score = query_result.similarities[index]` `nodes_with_scores.append(NodeWithScore(node=node, score=score))
现在,使用上述内容,我们将创建一个 retriever 类。
from llama_index import QueryBundle``from llama_index.retrievers import BaseRetriever``from typing import Any, List``class VectorDBRetriever(BaseRetriever):` `"""Retriever over a qdrant vector store."""` `def __init__(self,` `vector_store: QdrantVectorStore,` `embed_model: Any,` `query_mode: str = "default",` `similarity_top_k: int = 2) -> None:` `"""Init params."""` `self._vector_store = vector_store` `self._embed_model = embed_model` `self._query_mode = query_mode` `self._similarity_top_k = similarity_top_k` `super().__init__()` `def _retrieve(self, query_bundle: QueryBundle) -> List[NodeWithScore]:` `"""Retrieve."""` `query_embedding = embed_model.get_query_embedding(` `query_bundle.query_str` `)` `vector_store_query = VectorStoreQuery(` `query_embedding=query_embedding,` `similarity_top_k=self._similarity_top_k,` `mode=self._query_mode,` `)` `query_result = vector_store.query(vector_store_query)` `nodes_with_scores = []` `for index, node in enumerate(query_result.nodes):` `score: Optional[float] = None` `if query_result.similarities is not None:` `score = query_result.similarities[index]` `nodes_with_scores.append(NodeWithScore(node=node, score=score))` `return nodes_with_scores``retriever = VectorDBRetriever(` `vector_store, embed_model, query_mode="default", similarity_top_k=2``)
然后,创建一个检索器查询引擎。
from llama_index.query_engine import RetrieverQueryEngine``query_engine = RetrieverQueryEngine.from_args(` `retriever, service_context=service_context``)
最后,我们的检索器已准备好查询和聊天。让我们传递一个查询。
query_str = "世界有几大洲?"``response = query_engine.query(query_str)``print(str(response))
DeepSeek LLM 在回答问题方面表现得非常好,没有面临挑战。它的架构使其有别于其他模型,最令人印象深刻的方面是它利用直接偏好优化来增强模型的功能。它是一个中英文的微调和优化模型,我们从结果中观察到这种微调和优化的模型的性能如何。
结语:AI 时代,提问即生产力!
大模型正在重塑我们的学习和工作方式,不管你是选择使用 DeepSeek 还是自己部署大模型,最重要的是 学会与 AI 对话。
你的每一个问题,决定了 AI 给予你的答案。
那么,你是否尝试过自己部署大模型?你最想解决的 AI 应用场景是什么?
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
更多推荐
所有评论(0)