From dbd0434a2dba994badc4284f74a3adc6ecbdd2f1 Mon Sep 17 00:00:00 2001 From: "liqiankun.1111" Date: Mon, 15 Apr 2024 16:29:18 +0800 Subject: [PATCH] add ml --- .../2019-08-31-mathematical_interest.md | 1 + .../2021-11-27-pytorch_elastic.md | 13 + .../2022-03-02-ml_framework.md | 3 +- .../MachineLearning/2023-08-08-llm_tools.md | 2 + .../2023-08-29-langchain_source.md | 287 ++++++++++-------- .../MachineLearning/2023-09-04-llm_source.md | 2 +- .../MachineLearning/2023-09-07-multimodal.md | 4 +- .../2023-09-25-llm_retrieval.md | 2 +- .../MachineLearning/2023-10-29-llm_prompt.md | 2 + ...023-10-30-from_attention_to_transformer.md | 12 +- .../MachineLearning/2023-10-30-llm_agent.md | 11 +- .../2023-12-16-llm_inference.md | 43 +-- .../MachineLearning/2023-12-16-llm_train.md | 1 + .../2024-02-02-llm_inference_framework.md | 4 + .../2019-04-19-talk_architecture.md | 6 + _posts/Technology/Basic/2020-10-26-cpu.md | 2 + _posts/Technology/JVM/2016-06-17-jvm_gc.md | 4 +- .../Java/2017-05-02-write_java_framework.md | 2 +- .../Netty/2016-07-25-netty_review.md | 2 + public/upload/machine/dlrover_arch.jpg | Bin 0 -> 156105 bytes public/upload/machine/langchain_memory.jpg | Bin 0 -> 44736 bytes public/upload/machine/prompt_principle.jpg | Bin 0 -> 46667 bytes 22 files changed, 239 insertions(+), 164 deletions(-) create mode 100644 public/upload/machine/dlrover_arch.jpg create mode 100644 public/upload/machine/langchain_memory.jpg create mode 100644 public/upload/machine/prompt_principle.jpg diff --git a/_posts/MachineLearning/2019-08-31-mathematical_interest.md b/_posts/MachineLearning/2019-08-31-mathematical_interest.md index b05ae7d1..d304139a 100644 --- a/_posts/MachineLearning/2019-08-31-mathematical_interest.md +++ b/_posts/MachineLearning/2019-08-31-mathematical_interest.md @@ -158,6 +158,7 @@ https://zhuanlan.zhihu.com/p/46928319 [对线性回归,logistic回归和一般回归的认识](https://www.cnblogs.com/jerrylead/archive/2011/03/05/1971867.html) [深度学习领域最常用的10个激活函数,一文详解数学原理及优缺点](https://mp.weixin.qq.com/s/bleTRzA_1X3umR5UXSpuHg) +[这篇文章让你不再死记硬背交叉熵损失函数的原理](https://mp.weixin.qq.com/s/JbrklCzkvY2Ub-rycolJ4w) ## 从自动微分法来理解线性回归 diff --git a/_posts/MachineLearning/2021-11-27-pytorch_elastic.md b/_posts/MachineLearning/2021-11-27-pytorch_elastic.md index 7f1b01c7..955fe7bf 100644 --- a/_posts/MachineLearning/2021-11-27-pytorch_elastic.md +++ b/_posts/MachineLearning/2021-11-27-pytorch_elastic.md @@ -50,6 +50,19 @@ DLRover 在 Kubernetes 上设计了一个 CRD ElasticJob,由 ElasticJob Contro ![](/public/upload/machine/dl_rover_elastic_job.jpg) 不同场景对应不同的crd: ElasticJob ==> ps/worker; PytorchJob ==> Pytorch allreduce; TrainingJob+ScaleIn+ScaleOut ==> Elastic Horovod。 +[DLRover:蚂蚁开源大规模智能分布式训练系统](https://blog.csdn.net/SOFAStack/article/details/129394779) + +![](/public/upload/machine/dlrover_arch.jpg) + +DLRover 以 ElasticJob CRD 的形式将作业提交到集群。收到 CRD 后,ElasticJob Operator 会拉起一个 Master Pod 作为 Elastic Trainer。其从 Brain 服务中获取初始资源计划。Elastic Trainer 用它来创建 Scale CRD,并应用 Scale CRD 通知 ElasticJob Controller 启动所需的 Pod,每个 Pod 将在其上启动一个 Elastic Agent。在训练过程中,Elastic Trainer 的 Training Master 将数据分片分发给 Worker。同时,Cluster Monitor 监控每个作业的运行状态(i.e.每个节点的 Workload)和集群状态(i.e. 资源水位)。这些数据将定期报告给 Brain,Brain 将数据持久化到数据库中。然后 DLRover Brain 根据作业的运行状态,选择合适的算法生成新的资源计划,并通知 Elastic Trainer 开始资源调整。 +1. 自动资源推导:用户提交分布式作业时无需提供任何资源信息(不用配cpu/mem),帮助用户自动初始化训练资源,提升资源利用率与作业稳定性。 +2. 动态训练数据分片:针对不同 Worker 性能不通造成的木桶效应,根据实际消费速度分配训练数据,可配合 Failover 记录消费位点,数据不丢失。混部集群存在资源超卖和抢占的情况,部分节点消费数据慢,快节点需要等待慢节点,降低训练速度。DLRover 可以通过数据动态分发给慢节点少分发一些数据,减少等待。当扩容或者缩容时,需要有个全局协调者知道记录节点当前消费数据详情。当节点失败重启后,全局协调者需要知道节点已经消费和尚未消费的数据。如果这些逻辑让训练节点来做,训练节点和训练节点之间需要交互,增加训练节点逻辑的复杂性。DLRover Master 充当了这个全局协调者的角色。训练节点只管从 DLRover Master 获取 Shard,然后读取数据,不需要处理其他的逻辑。 +3. 单点容错: + 1. 自动节点检测是指在训练中断时,系统会自动进行硬件和通信检测,识别并隔离故障节点,随后启动新的节点替代。 + 1. 提供单点容错的能力,不需要完整重启作业。例如集群中,很常见的一类错误是由于用户配置了不足的内存,导致训练 OOM。在 DLRover 的帮助下,我们可以自动拉起一个优化配置的节点来恢复失败的 Node。 +4. 资源弹性:支持运行时 Pod 级和 CPU/Memory 级的资源弹性扩缩容,动态全局优化决策。通过监控作业节点的 Workload,DLRover 可以分析资源配置的瓶颈。常见的资源瓶颈有:节点抢占、Workload 不平衡、CPU 不足导致算力低下、节点数目不足。DLRover 可以通过动态的资源热更新来持续优化训练性能。通常不同的模型训练作业,需要不同的资源配置。然而用户倾向于超额配置作业的资源以保障作业的成功率。这通常会导致大量的资源浪费。DLRover 的自动扩缩容能力,可以自动根据作业的真实需求配置资源,以最少的资源达到最优的训练性能,从而减少资源浪费。 +4. DLRover 支持用户使用任何自己的训练框架,底层训练代码通过提供约定的 API 接口以实现自动弹性扩缩等需要同底层分布式代码深度交互。集群中部署完成后,终端算法同学基本可以无感接入。 + ## train_script 的守护者elastic agent `python -m torch.distributed.run train_script.py ` 对于每一个node 有两个角色 diff --git a/_posts/MachineLearning/2022-03-02-ml_framework.md b/_posts/MachineLearning/2022-03-02-ml_framework.md index 16750c5e..e04347b5 100644 --- a/_posts/MachineLearning/2022-03-02-ml_framework.md +++ b/_posts/MachineLearning/2022-03-02-ml_framework.md @@ -39,7 +39,8 @@ keywords: ml framework ### 组件抽象 -神经网络运算主要包含训练 training 和预测 predict (或 inference) 两个阶段,训练的基本流程是:输入数据 -> 网络层前向传播 -> 计算损失 -> 网络层反向传播梯度 -> 更新参数,预测的基本流程是 输入数据 -> 网络层前向传播 -> 输出结果。从运算的角度看,主要可以分为三种类型的计算: + +神经网络运算主要包含训练 training 和预测 predict (或 inference) 两个阶段,训练的基本流程是:输入数据 -> 网络层前向传播 -> 计算损失 -> 网络层反向传播梯度 -> 更新参数,预测的基本流程是 输入数据 -> 网络层前向传播 -> 输出结果。从运算的角度看,主要可以分为三种类型的计算:(1)前向传递计算损失函数;(2)后向传递计算梯度;(3)优化器更新模型参数。: 1. 数据在网络层之间的流动:前向传播和反向传播可以看做是张量 Tensor(多维数组)在网络层之间的流动(前向传播流动的是输入输出,反向传播流动的是梯度),每个网络层会进行一定的运算,然后将结果输入给下一层 2. 计算损失:衔接前向和反向传播的中间过程,定义了模型的输出与真实值之间的差异,用来后续提供反向传播所需的信息 diff --git a/_posts/MachineLearning/2023-08-08-llm_tools.md b/_posts/MachineLearning/2023-08-08-llm_tools.md index f8e36b03..823c5e4a 100644 --- a/_posts/MachineLearning/2023-08-08-llm_tools.md +++ b/_posts/MachineLearning/2023-08-08-llm_tools.md @@ -212,6 +212,8 @@ print(ai_response) ### Agent +在Chain中行动序列是硬编码的,而Agent则采用语言模型作为推理引擎来确定以什么样的顺序采取什么样的行动。 + Turn your LLMs into reasoning engines. the core idea of agents is to use an LLM to choose a sequence of actions to take. in chains, a sequence of actions is hardcoded(in code). In agents a language model is used as a reasoning engine to determine which actions to take and in which order. 从“告诉计算机要做什么”的编程范式向“告诉计算机我们想要什么”的范式的转变。人类之所以在地球上显得独特,一个重要原因是我们更擅长使用工具。无论是网络上的还是现实世界里面的实体机器人,**只要给大模型足够的「说明书」**,大模型就可以把它纳入到解决方案工具箱,用来回答或者执行你用自然语言提出的问题 or 任务。 diff --git a/_posts/MachineLearning/2023-08-29-langchain_source.md b/_posts/MachineLearning/2023-08-29-langchain_source.md index a01e5c5b..cdcf12c4 100644 --- a/_posts/MachineLearning/2023-08-29-langchain_source.md +++ b/_posts/MachineLearning/2023-08-29-langchain_source.md @@ -272,142 +272,12 @@ class LLMChain(Chain): PS:用一个最复杂的场景比如 ConversationalRetrievalChain 打上断点,观察各个变量值的变化,有助于了解Chain的运行逻辑。 -### Retriever -检索器(retriever)是一个接口,它需要实现的功能是:对于给定的一个非结构化的查询,返回Document对象;它本身不需要存储数据,只是简单地返回数据。A retriever is an interface that returns documents given an unstructured query. It is more general than a vector store. A retriever does not need to be able to store documents, only to return (or retrieve) them. Vector stores can be used as the backbone of a retriever, but there are other types of retrievers as well. 比如 EnsembleRetriever 本身不存储数据,只是基于rrf 算法对 持有的Retriever 的返回结果进行汇总排序。 - -**Document 对象的艺术之旅**(从加载、转换、存储、到查询结果都用Document 表示) - -![](/public/upload/machine/langchain_retriever.jpg) - -```python -loader = TextLoader('./test.txt', encoding='utf8') -docs = loader.load() -print(docs) -# [Document(page_content='ChatGPT是OpenAI开发的一个大型语言模型,...', metadata={'source': './test.txt'})] -text_splitter = CharacterTextSplitter(separator = "\n\n",chunk_size = 1000,chunk_overlap = 200,length_function = len,is_separator_regex = False,) -texts = text_splitter.create_documents([d.page_content for d in docs]) -print(texts) -# [ -# Document(page_content='ChatGPT是OpenAI开发的一个大型语言模型,...', metadata={}), -# Document(page_content='我们将探讨如何使用不同的提示工程技术来实现不同的目标。...', metadata={}), -# Document(page_content='无论您是普通人、研究人员、开发人员,...', metadata={}), -# Document(page_content='在整本书中,...', metadata={}) -#] -embeddings = HuggingFaceEmbeddings(model_name='BAAI/bge-large-en',multi_process=True) -db = Chroma.from_documents(texts, embeddings) -query = "ChatGPT是什么?" -docs = db.similarity_search(query) -print(docs[0].page_content) -# ChatGPT是OpenAI开发的一个大型语言模型,可以提供各种主题的信息 -retriever = db.as_retriever() -retrieved_docs = retriever.invoke(query) -print(retrieved_docs[0].page_content) -``` - -retriever.invoke(query) ==> retriever.get_relevant_documents ==> VectorStoreRetriever.similarity_search - -```python -class BaseRetriever(ABC): - def invoke(self, input: str, config: Optional[RunnableConfig] = None) -> List[Document]: - config = config or {} - return self.get_relevant_documents(input,...) - def get_relevant_documents(self, query: str, *, callbacks: Callbacks = None, **kwargs: Any) -> List[Document]: - @abstractmethod - def _get_relevant_documents(self, query: str, *, run_manager: CallbackManagerForRetrieverRun) -> List[Document]: - async def aget_relevant_documents(self, query: str, *, callbacks: Callbacks = None, **kwargs: Any) -> List[Document]: -class VectorStoreRetriever(BaseRetriever): - def _get_relevant_documents( self, query: str, *, run_manager: CallbackManagerForRetrieverRun) -> List[Document]: - docs = self.vectorstore.similarity_search(query, **self.search_kwargs) - return docs -``` - -BaseRetriever 的基本工作就是 get_relevant_documents(留给子类 _get_relevant_documents实现),核心是vectorstore.similarity_search,对于 BaseRetriever 的扩展,则是在vectorstore.similarity_search 之前或之后做一些事情,这也是 retriever 和 VectorStore 要分为两个接口的原因,比如做以下的事儿 -1. 处理query,比如生成多个新的query,比如 MultiQueryRetriever -2. 对找回的documents 进一步的查询、转换等,比如ParentDocumentRetriever -3. 提供add_documents 接口,在存入 vectorstore 时即将 get_relevant_documents 用到的一些关联数据存入到docstore -4. 比如 EnsembleRetriever 本身不存储数据,只是基于rrf 算法对 持有的Retriever 的返回结果进行汇总排序。也就是 BaseRetriever 的主要子类是 VectorStoreRetriever,但也不全是VectorStoreRetriever。 -5. Retriever 查询过程中支持回调 RetrieverManagerMixin 的 on_retriever_end 和 on_retriever_error方法,而vectorstore的执行过程不会触发回调。 - -```python -class MultiQueryRetriever(BaseRetriever): - retriever: BaseRetriever - llm_chain: LLMChain - def _get_relevant_documents(self,query: str,*,run_manager: CallbackManagerForRetrieverRun,) -> List[Document]: - queries = self.generate_queries(query, run_manager) - documents = self.retrieve_documents(queries, run_manager) - return self.unique_union(documents) -class MultiVectorRetriever(BaseRetriever): - id_key: str = "doc_id" - vectorstore: VectorStore - docstore: BaseStore[str, Document] - def _get_relevant_documents(self, query: str, *, run_manager: CallbackManagerForRetrieverRun) -> List[Document]: - sub_docs = self.vectorstore.similarity_search(query, **self.search_kwargs) - ids = [] # We do this to maintain the order of the ids that are returned - for d in sub_docs: - if d.metadata[self.id_key] not in ids: - ids.append(d.metadata[self.id_key]) - docs = self.docstore.mget(ids) - return [d for d in docs if d is not None] -# 将文档拆分为较小的块,同时每块关联其父文档的id,小块用于提高检索准确度,大块父文档用于返回上下文 -class ParentDocumentRetriever(MultiVectorRetriever): - child_splitter: TextSplitter - parent_splitter: Optional[TextSplitter] = None - def add_documents(self,documents: List[Document],ids: Optional[List[str]] = None,add_to_docstore: bool = True,) -> None: - documents = self.parent_splitter.split_documents(documents) - docs = [] - full_docs = [] - for i, doc in enumerate(documents): - sub_docs = self.child_splitter.split_documents([doc]) - for _doc in sub_docs: - _doc.metadata[self.id_key] = _id - docs.extend(sub_docs) - full_docs.append((_id, doc)) - self.vectorstore.add_documents(docs) - self.docstore.mset(full_docs) -``` - -RetrievalQA 则是retriever 的包装类,有点retriever 工厂的意思,根据不同的参数 选择不同的llm、retriever 来实现QA。 - -```python -qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff",retriever=self.vector_db.as_retriever()) -answer = qa(query) -``` -其实质是 通过retriever 获取相关文档,并通过BaseCombineDocumentsChain 来获取答案。 -``` -RetrievalQA.from_chain_type - ==> load_qa_chain ==> _load_stuff_chain ==> StuffDocumentsChain(xx) - ==> RetrievalQA(chain, retriever) -``` +## Memory -```python -# langchain/chains/retrieval_qa/base.py -@classmethod -def from_chain_type(cls,llm: BaseLanguageModel,chain_type: str = "stuff",chain_type_kwargs: Optional[dict] = None,**kwargs: Any,) -> BaseRetrievalQA: - """Load chain from chain type.""" - _chain_type_kwargs = chain_type_kwargs or {} - combine_documents_chain = load_qa_chain(llm, chain_type=chain_type, **_chain_type_kwargs) - return cls(combine_documents_chain=combine_documents_chain, **kwargs) -# langchain/chains/question_answering/__init__.py -def load_qa_chain(llm: BaseLanguageModel,chain_type: str = "stuff",verbose: Optional[bool] = None,callback_manager: Optional[BaseCallbackManager] = None,**kwargs: Any,) -> BaseCombineDocumentsChain: - loader_mapping: Mapping[str, LoadingCallable] = { - "stuff": _load_stuff_chain, - "map_reduce": _load_map_reduce_chain, - "refine": _load_refine_chain, - "map_rerank": _load_map_rerank_chain, - } - return loader_mapping[chain_type]( - llm, verbose=verbose, callback_manager=callback_manager, **kwargs - ) -def _load_stuff_chain(...)-> StuffDocumentsChain: - _prompt = prompt or stuff_prompt.PROMPT_SELECTOR.get_prompt(llm) - llm_chain = LLMChain(llm=llm,prompt=_prompt,verbose=verbose,callback_manager=callback_manager,callbacks=callbacks,) - return StuffDocumentsChain(llm_chain=llm_chain,...) -class RetrievalQA(BaseRetrievalQA): - retriever: BaseRetriever = Field(exclude=True) -``` +通过Chain,LangChain相当于以“工作流”的形式,将LLM与IO组件进行了有秩序的连接,从而具备构建复杂AI工程流程的能力。而我们都知道LLM提供的文本生成服务本身不提供记忆功能,需要用户自己管理对话历史。因此引入Memory组件,可以很好地扩展AI工程的能力边界。 -## Memory +![](/public/upload/machine/langchain_memory.jpg) 记忆 ( memory )允许大型语言模型(LLM)记住与用户的先前交互。默认情况下,LLM/Chain 是 无状态 stateless 的,每次交互都是独立的,无法知道之前历史交互的信息。对于无状态代理 (Agents) 来说,唯一存在的是当前输入,没有其他内容。LangChain通过Memory工具类为Agent和Chain提供了记忆功能,让智能应用能够记住前一次的交互,比如在聊天环境中这一点尤为重要。 @@ -562,6 +432,143 @@ class BaseMessage(Serializable): additional_kwargs: dict = Field(default_factory=dict) ``` +## 消除幻觉/Retriever + +RAG中关键组件:DocumentLoader/TextSplitter/EmbeddingsModel/VectorStore/Retriever。 + +检索器(retriever)是一个接口,它需要实现的功能是:对于给定的一个非结构化的查询,返回Document对象;它本身不需要存储数据,只是简单地返回数据。A retriever is an interface that returns documents given an unstructured query. It is more general than a vector store. A retriever does not need to be able to store documents, only to return (or retrieve) them. Vector stores can be used as the backbone of a retriever, but there are other types of retrievers as well. 比如 EnsembleRetriever 本身不存储数据,只是基于rrf 算法对 持有的Retriever 的返回结果进行汇总排序。 + +**Document 对象的艺术之旅**(从加载、转换、存储、到查询结果都用Document 表示) + +![](/public/upload/machine/langchain_retriever.jpg) + +```python +loader = TextLoader('./test.txt', encoding='utf8') +docs = loader.load() +print(docs) +# [Document(page_content='ChatGPT是OpenAI开发的一个大型语言模型,...', metadata={'source': './test.txt'})] +text_splitter = CharacterTextSplitter(separator = "\n\n",chunk_size = 1000,chunk_overlap = 200,length_function = len,is_separator_regex = False,) +texts = text_splitter.create_documents([d.page_content for d in docs]) +print(texts) +# [ +# Document(page_content='ChatGPT是OpenAI开发的一个大型语言模型,...', metadata={}), +# Document(page_content='我们将探讨如何使用不同的提示工程技术来实现不同的目标。...', metadata={}), +# Document(page_content='无论您是普通人、研究人员、开发人员,...', metadata={}), +# Document(page_content='在整本书中,...', metadata={}) +#] +embeddings = HuggingFaceEmbeddings(model_name='BAAI/bge-large-en',multi_process=True) +db = Chroma.from_documents(texts, embeddings) +query = "ChatGPT是什么?" +docs = db.similarity_search(query) +print(docs[0].page_content) +# ChatGPT是OpenAI开发的一个大型语言模型,可以提供各种主题的信息 +retriever = db.as_retriever() +retrieved_docs = retriever.invoke(query) +print(retrieved_docs[0].page_content) +``` + +retriever.invoke(query) ==> retriever.get_relevant_documents ==> VectorStoreRetriever.similarity_search + +```python +class BaseRetriever(ABC): + def invoke(self, input: str, config: Optional[RunnableConfig] = None) -> List[Document]: + config = config or {} + return self.get_relevant_documents(input,...) + def get_relevant_documents(self, query: str, *, callbacks: Callbacks = None, **kwargs: Any) -> List[Document]: + @abstractmethod + def _get_relevant_documents(self, query: str, *, run_manager: CallbackManagerForRetrieverRun) -> List[Document]: + async def aget_relevant_documents(self, query: str, *, callbacks: Callbacks = None, **kwargs: Any) -> List[Document]: +class VectorStoreRetriever(BaseRetriever): + def _get_relevant_documents( self, query: str, *, run_manager: CallbackManagerForRetrieverRun) -> List[Document]: + docs = self.vectorstore.similarity_search(query, **self.search_kwargs) + return docs +``` + +BaseRetriever 的基本工作就是 get_relevant_documents(留给子类 _get_relevant_documents实现),核心是vectorstore.similarity_search,对于 BaseRetriever 的扩展,则是在vectorstore.similarity_search 之前或之后做一些事情,这也是 retriever 和 VectorStore 要分为两个接口的原因,比如做以下的事儿 +1. 处理query,比如生成多个新的query,比如 MultiQueryRetriever +2. 对找回的documents 进一步的查询、转换等,比如ParentDocumentRetriever +3. 提供add_documents 接口,在存入 vectorstore 时即将 get_relevant_documents 用到的一些关联数据存入到docstore +4. 比如 EnsembleRetriever 本身不存储数据,只是基于rrf 算法对 持有的Retriever 的返回结果进行汇总排序。也就是 BaseRetriever 的主要子类是 VectorStoreRetriever,但也不全是VectorStoreRetriever。 +5. Retriever 查询过程中支持回调 RetrieverManagerMixin 的 on_retriever_end 和 on_retriever_error方法,而vectorstore的执行过程不会触发回调。 + +```python +class MultiQueryRetriever(BaseRetriever): + retriever: BaseRetriever + llm_chain: LLMChain + def _get_relevant_documents(self,query: str,*,run_manager: CallbackManagerForRetrieverRun,) -> List[Document]: + queries = self.generate_queries(query, run_manager) + documents = self.retrieve_documents(queries, run_manager) + return self.unique_union(documents) +class MultiVectorRetriever(BaseRetriever): + id_key: str = "doc_id" + vectorstore: VectorStore + docstore: BaseStore[str, Document] + def _get_relevant_documents(self, query: str, *, run_manager: CallbackManagerForRetrieverRun) -> List[Document]: + sub_docs = self.vectorstore.similarity_search(query, **self.search_kwargs) + ids = [] # We do this to maintain the order of the ids that are returned + for d in sub_docs: + if d.metadata[self.id_key] not in ids: + ids.append(d.metadata[self.id_key]) + docs = self.docstore.mget(ids) + return [d for d in docs if d is not None] +# 将文档拆分为较小的块,同时每块关联其父文档的id,小块用于提高检索准确度,大块父文档用于返回上下文 +class ParentDocumentRetriever(MultiVectorRetriever): + child_splitter: TextSplitter + parent_splitter: Optional[TextSplitter] = None + def add_documents(self,documents: List[Document],ids: Optional[List[str]] = None,add_to_docstore: bool = True,) -> None: + documents = self.parent_splitter.split_documents(documents) + docs = [] + full_docs = [] + for i, doc in enumerate(documents): + sub_docs = self.child_splitter.split_documents([doc]) + for _doc in sub_docs: + _doc.metadata[self.id_key] = _id + docs.extend(sub_docs) + full_docs.append((_id, doc)) + self.vectorstore.add_documents(docs) + self.docstore.mset(full_docs) +``` + +RetrievalQA 则是retriever 的包装类,有点retriever 工厂的意思,根据不同的参数 选择不同的llm、retriever 来实现QA。 + +```python +qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff",retriever=self.vector_db.as_retriever()) +answer = qa(query) +``` +其实质是 通过retriever 获取相关文档,并通过BaseCombineDocumentsChain 来获取答案。 +``` +RetrievalQA.from_chain_type + ==> load_qa_chain ==> _load_stuff_chain ==> StuffDocumentsChain(xx) + ==> RetrievalQA(chain, retriever) +``` + +```python +# langchain/chains/retrieval_qa/base.py +@classmethod +def from_chain_type(cls,llm: BaseLanguageModel,chain_type: str = "stuff",chain_type_kwargs: Optional[dict] = None,**kwargs: Any,) -> BaseRetrievalQA: + """Load chain from chain type.""" + _chain_type_kwargs = chain_type_kwargs or {} + combine_documents_chain = load_qa_chain(llm, chain_type=chain_type, **_chain_type_kwargs) + return cls(combine_documents_chain=combine_documents_chain, **kwargs) +# langchain/chains/question_answering/__init__.py +def load_qa_chain(llm: BaseLanguageModel,chain_type: str = "stuff",verbose: Optional[bool] = None,callback_manager: Optional[BaseCallbackManager] = None,**kwargs: Any,) -> BaseCombineDocumentsChain: + loader_mapping: Mapping[str, LoadingCallable] = { + "stuff": _load_stuff_chain, + "map_reduce": _load_map_reduce_chain, + "refine": _load_refine_chain, + "map_rerank": _load_map_rerank_chain, + } + return loader_mapping[chain_type]( + llm, verbose=verbose, callback_manager=callback_manager, **kwargs + ) +def _load_stuff_chain(...)-> StuffDocumentsChain: + _prompt = prompt or stuff_prompt.PROMPT_SELECTOR.get_prompt(llm) + llm_chain = LLMChain(llm=llm,prompt=_prompt,verbose=verbose,callback_manager=callback_manager,callbacks=callbacks,) + return StuffDocumentsChain(llm_chain=llm_chain,...) +class RetrievalQA(BaseRetrievalQA): + retriever: BaseRetriever = Field(exclude=True) +``` + ## Callback LangChain 的 Callback 机制允许你在应用程序的不同阶段进行自定义操作,如日志记录、监控和数据流处理,这个机制通过 CallbackHandler(回调处理器)来实现。回调处理器是 LangChain 中实现 CallbackHandler 接口的对象,为每类可监控的事件提供一个方法。当该事件被触发时,CallbackManager 会在这些处理器上调用适当的方法。 @@ -611,4 +618,16 @@ class AsyncCallbackHandler(BaseCallbackHandler): """Run on retriever end.""" async def on_retriever_error(self,error: BaseException,...): """Run on retriever error.""" -``` \ No newline at end of file +``` + +## 工作流 + +LangChain的表达式语言LCEL通过重载__or__运算符的思路,构建了类似Unix管道运算符的设计,实现更简洁的LLM调用形式。 +```python +# 创建Chain +chain = prompt | llm | output_parser +# 调用Chain +answer = chain.invoke({'question': '什么是图计算?'}) +print(answer) +``` +但依然有DAG天然的设计限制,即不能支持“循环”。于是LangChain社区推出了一个新的项目——LangGraph,期望基于LangChain构建支持循环和跨多链的计算图结构,以描述更复杂的,甚至具备自动化属性的AI工程应用逻辑,比如智能体应用。 \ No newline at end of file diff --git a/_posts/MachineLearning/2023-09-04-llm_source.md b/_posts/MachineLearning/2023-09-04-llm_source.md index 9d3851b7..80c5cbf0 100644 --- a/_posts/MachineLearning/2023-09-04-llm_source.md +++ b/_posts/MachineLearning/2023-09-04-llm_source.md @@ -418,7 +418,7 @@ def generate(self, [以LLAMA为例,快速入门LLM的推理过程](https://mp.weixin.qq.com/s/5lbrqbqiHPZIARsVW6l6tA) 建议细读。 -在GPT模型最后一层之前,推理的对象是以向量形式表征的语义,输出的是代表语义的一个“模糊”的向量。此处“模糊”指的是,这一向量或许并不对应任何一个已知的词。因此,整个模型最后需要再做一个推测,基于这个“模糊”的向量所包含的语义信息,在词表中寻找最符合这些特征的词,来作为真正的输出。在 transformer 中,最后的输出是一个概率分布,表示每一个词匹配这一“模糊”向量的概率。 +可以把解码器文本Transformer模型理解为一个函数,它以词元作为输入并生成一个概率数组,用于表示词汇表中所有词元的概率,然后,程序根据这些概率从所有词元中进行采样,以指导采样过程,并生成下一个词元,这一过程会重复进行。在GPT模型最后一层之前,推理的对象是以向量形式表征的语义,输出的是代表语义的一个“模糊”的向量。此处“模糊”指的是,**这一向量或许并不对应任何一个已知的词**。因此,整个模型最后需要再做一个推测,基于这个“模糊”的向量所包含的语义信息,在词表中寻找最符合这些特征的词,来作为真正的输出。在 transformer 中,最后的输出是一个概率分布,表示每一个词匹配这一“模糊”向量的概率。 [一网打尽文本生成策略(beam search/top-k/top-p/温度系数)](https://zhuanlan.zhihu.com/p/676398366)假设我们输入 “I am a”,GPT会对这个序列进行编码得到embedding,并预测下一个单词的概率。“I am a”作为输入,编码后也会得到三个token对应的embedding。GPT会使用输入序列最后一个token对应的embedding做预测,也就是说,”a”经过编码后的embedding会被映射到整个词表上,得到下一个单词的概率。因为GPT是使用masked attention的,每个token在编码时都只会和他前面的token交互。**那么最后一个token自然就包括了当前序列的所有信息,因此用于预测下一个token是最合理的**。 diff --git a/_posts/MachineLearning/2023-09-07-multimodal.md b/_posts/MachineLearning/2023-09-07-multimodal.md index 799d51ff..e1709a74 100644 --- a/_posts/MachineLearning/2023-09-07-multimodal.md +++ b/_posts/MachineLearning/2023-09-07-multimodal.md @@ -61,4 +61,6 @@ keywords: llm multimodal [一文带你了解OpenAI Sora](https://mp.weixin.qq.com/s/Efk-gP8iuau3crWB2wWizg) -[OpenAI 的 ​Sora 技术报告详解](https://mp.weixin.qq.com/s/MyWPPY19wwsJv8zdBMxdFg) \ No newline at end of file +[OpenAI 的 ​Sora 技术报告详解](https://mp.weixin.qq.com/s/MyWPPY19wwsJv8zdBMxdFg) + +[Sora 的基石:Diffusion Transformer 原理与源码解析](https://zhuanlan.zhihu.com/p/684125968) 未读 \ No newline at end of file diff --git a/_posts/MachineLearning/2023-09-25-llm_retrieval.md b/_posts/MachineLearning/2023-09-25-llm_retrieval.md index d6959a3b..33c7bad8 100644 --- a/_posts/MachineLearning/2023-09-25-llm_retrieval.md +++ b/_posts/MachineLearning/2023-09-25-llm_retrieval.md @@ -142,7 +142,7 @@ LLM 擅长于一般的语言理解与推理,而不是某个具体的知识点 召回的输入(不一定是用户原输入)?召回的输出(不一定是Vectordb原输出)?召回的方式(不一定直接查vectordb,微调embedding)? -**优化召回的输入**/如何使检索对用户输入的变异性稳健? +**优化召回的输入**/如何使检索对用户输入的变异性稳健/优化发送给检索器的搜索查询? 1. 查询转换 1. 将用户问题采用多个不同的视角去提问,借助子问题检索,然后 LLM 会得出最终结果。大多数人在问问题的过程中,如果不懂 prompt 工程,往往不专业,要么问题过于简单化,要么有歧义,意图不明显。那么向量搜索也是不准确的,导致LLM回答的效果不好。所以需要 LLM 进行问题的修正和多方位解读。MultiQueryRetriever 。[使用RAG-Fusion和RRF让RAG在意图搜索方面更进一步](https://mp.weixin.qq.com/s/N7HgjsqgCVf2i-xy05qZtA) 2. 结合历史对话的重新表述,在进行多轮对话时,用户的提问中的某个词可能会指代上文中的部分信息,因此可以将历史信息和用户提问一并交给LLM重新表述。 diff --git a/_posts/MachineLearning/2023-10-29-llm_prompt.md b/_posts/MachineLearning/2023-10-29-llm_prompt.md index 0e4972ee..cb6d44e9 100644 --- a/_posts/MachineLearning/2023-10-29-llm_prompt.md +++ b/_posts/MachineLearning/2023-10-29-llm_prompt.md @@ -63,6 +63,8 @@ GPT-3论文定义:如果需要(基于梯度下降为主的算法)对模型 [人人都需要掌握的Prompt Engineering技巧](https://mp.weixin.qq.com/s/JvoBOzdHmagLXiT2k1nYPQ)对于一些复杂的问题,Prompt写得好不好,直接影响着大模型给出答案的正确与否。本质上,**LLM是一个概率模型,它只是在给定的信息的前提下,给出概率最大的结果,它并不保证结果的合理性和正确性**。要让LLM给出的结果尽可能地合理、正确,这是我们使用LLM的人的职责。 +![](/public/upload/machine/prompt_principle.jpg) + AI界的大佬 --- Andrew NG推出过一个Prompt Engineering的短课程《ChatGPT Prompt Engineering for Developers》,提到写好Prompt的一些基本理念。PS: **ICL给示范/示例,CoT给思路**,老师教学也是这么搞的。 1. 明确、具体是关键。我们发给LLM的批令,越明确、越具体,对于LLM越友好。 ![](/public/upload/machine/prompt_tips.jpg) diff --git a/_posts/MachineLearning/2023-10-30-from_attention_to_transformer.md b/_posts/MachineLearning/2023-10-30-from_attention_to_transformer.md index 6a9e28ce..d30d7999 100644 --- a/_posts/MachineLearning/2023-10-30-from_attention_to_transformer.md +++ b/_posts/MachineLearning/2023-10-30-from_attention_to_transformer.md @@ -61,7 +61,7 @@ $$ ![](/public/upload/machine/self_attention_qkv.jpg) -所谓的Q K V矩阵、查询向量之类的字眼,其来源是X与矩阵的乘积,本质上都是X的线性变换。为什么不直接使用X而要对其进行线性变换?当然是为了提升模型的拟合能力,矩阵W都是可以训练的,起到一个缓冲的效果。所以 self-Attention最原始的形态其实是 $softmax(XX^T)X$。 +所谓的Q K V矩阵、查询向量之类的字眼,其来源是X与矩阵的乘积,本质上都是X的线性变换,经过不同的权重矩阵$W_Q$$W_K$$W_V$投影到不同的空间中。为什么不直接使用X而要对其进行线性变换?当然是为了提升模型的拟合能力,矩阵W都是可以训练的,起到一个缓冲的效果。所以 self-Attention最原始的形态其实是 $softmax(XX^T)X$。 1. $XX^T$代表什么?一个矩阵(一个句子)乘以它自己的转置,会得到什么结果,有什么意义?我们知道,矩阵可以看作由一些向量组成,**一个矩阵乘以它自己转置的运算,其实可以看成这些向量分别与其他向量计算内积**(一个句子的各个词向量的内积)。向量的内积,其几何意义是什么?表征两个向量的夹角,表征一个向量在另一个向量上的投影。**投影的值大,说明两个向量相关度高**(两个词相关度越高)。如果两个向量夹角是九十度,那么这两个向量线性无关,完全没有相关性!更进一步,这个向量是词向量,是词在高维空间的数值映射。词向量之间相关度高表示什么?是不是在一定程度上(不是完全)表示,在关注词A的时候,应当给予词B更多的关注? ![](/public/upload/machine/self_attention_xxt.jpg) @@ -90,6 +90,12 @@ $$ ![](/public/upload/machine/transformer_qkv.gif) +这个过程可以简单概括为 3 步: +1. 衡量QK 之间的相似性,这种相似性对于向量来说就是内积。$\sqrt{d_k}$ 作为调节因子,使得内积不至于太大,从而使梯度稳定很多。 +2. 查找权重 a。这是通过 SoftMax 完成的。相似性像一个完全连接的层一样连接到权重。SoftMax 之后的注意力分数,其分值大小代表了相关性强弱,这种差异在计算梯度时,可以相对均匀地流入多个token位置。 +3. 值的加权组合。将 a 的值和 V 对应的值相乘累加,最终输出是所需的结果注意力值。 + + ## MultiHeadAttention 自注意力机制的方式确实解决了“传统序列模型在编码过程中都需顺序进行的弊端”的问题,有了自注意力机制后,仅仅只需要对原始输入进行几次矩阵变换便能够得到最终包含有不同位置注意力信息的编码向量。**模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身的位置**(虽然每个编码都在z1中有或多或少的体现),因此作者提出了通过多头注意力机制来解决这一问题。同时,使用多头注意力机制还能够给予注意力层的输出包含有不同子空间中的编码表示信息,从而增强模型的表达能力(这些集合中的每一个W都是随机初始化的,在训练之后,每个集合都被用来将输入词嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间中)。 @@ -133,7 +139,7 @@ PS: 经过注意力层,输入向量和输出向量的shape是一致的。head Transformer提出了深度学习领域既MLP、CNN、RNN后的第4大特征提取器。一个好的特征提取器需要自带输入处理模块的前后顺序信息,而Attention机制并没有考虑先后顺序信息(源于注意力机制固有的排列不变性,因此修改tokens的顺序不会改变输出加权值。因此,注意机制本身缺乏对token顺序的意识),但前后顺序信息对语义影响很大,因此需要通过位置嵌入这种方式把前后位置信息加在输入的Embedding上。 -对self-attention来说,它跟每一个input vector都做attention,所以没有考虑到input sequence的顺序。更通俗来讲,大家可以发现我们前文的计算每一个词向量都与其他词向量计算内积,得到的结果丢失了我们原来文本的顺序信息。打乱词向量的顺序,得到的结果仍然是相同的。但实际上位置信息很有用,比如动词出现在句首的概率就比名词低,所以要把位置信息塞到学习过程中去。 +对self-attention来说,它跟每一个input vector都做attention,在计算注意力矩阵时每个 token 都与其他所有 token 交互,没有考虑到input sequence的顺序。更通俗来讲,大家可以发现我们前文的计算每一个词向量都与其他词向量计算内积,得到的结果丢失了我们原来文本的顺序信息。打乱词向量的顺序,得到的结果仍然是相同的。但实际上位置信息很有用,比如动词出现在句首的概率就比名词低,所以要把位置信息塞到学习过程中去。 Positional Embeddings 基于一个简单但有效的想法:使用与位置相关的值模式来增强词向量。为了在序列中编码位置信息,transformer的设计者使用了不同频率的正弦函数。他们还尝试了习得的位置Embeddings,但结果并没有什么不同。PS: 波形相加,不同的波。 @@ -248,6 +254,8 @@ NLP 神经网络模型的本质就是对输入文本进行编码,常规的做 [如何理解 Transformer 中的自注意力机制? - 宇文树雪的回答 - 知乎](https://www.zhihu.com/question/560879732/answer/3041597591)注意力机制中的“注意力”其实指的是序列中每两个元素之间的相关性程度,更进一步说,**这种相关性就是指两个元素在自然语句中同时出现的概率**。那么,序列元素之间的相关性是如何衡量的呢?在transformer的输入之前,往往要做词嵌入转换,把输入的文本序列转为降维到固定长度的矢量。在这个矢量空间中,其实就通过跳元模型或连续词包模型把词元之间的共现关系学习到一个高维的空间中了。通过**直接进行矢量乘法就能知道两个嵌入词向量的相似度**。词元矢量内积越大,说明相关性越强,在词嵌入空间中越近,更可能组成语句。也就是说,我们能基于词元矢量内积判断输入序列任意两个元素的共现的概率,也就是组成语句的可能性。(词嵌入原始的计算方式就是统计词元之间共同出现的频次,然后对共现矩阵做了奇异值分解得到降维后的词向量表示。)**既然词嵌入能学习到语义,为什么还要进行更复杂的训练呢?**这是因为嵌入词是在较小的窗口训练成的,不能反映大规模语句的上下文结构特征。因此,需要加一个权重对序列中每个嵌入词的重要性进行调整,这个权重需要要通过大量的语料训练得到。从而学习到自然语言序列固有的结构,并形成语言模型。 +[白话科普:Transformer和注意力机制](https://mp.weixin.qq.com/s/jyy7WXtOqJPXJYssPpfiUA)从Transformer整体来看,Encoder负责将输入序列(通常是自然语言的)变换成一个「最佳的」**内部表示**;而Decoder则负责将这个「内部表示」变换成最终想要的目标序列(通常也是自然语言的)。现在,我们先来看一下Encoder,它其实是由多个网络层组成的。输入序列进入Encoder之后,会经过多个Encoder Layer。每经过一层,相当于输入序列中的每个token进行了一次向量变换(非线性的),也就离那个「最佳的」内部表示又接近了一步。但是,每次变换都不改变向量的维度数量。每个Encoder Layer到底做了什么呢?这里面关键的一个机制是自注意力 (self-attention)。为什么需要自注意力呢?在模型内部,每个token都是用一个多维向量来表示的。向量的值决定了这个token在多维空间中的位置,也决定了它所代表的真实含义。一个token的真实含义,不仅仅取决于它自身,还取决于句子中的其它上下文信息(来自其它token的信息)。而借助向量,就可以用数量关系来描述这些现象了:相当于是说,**一个token的向量值,需要从句子上下文中的其他token中「吸收」信息,在数学上可以表达为所有token的向量值的加权平均**。这些权重值,我们可以称之为注意力权重 (attention weights)。在Encoder中,每经过一层Encoder Layer,一个token都会「参考」上一层的所有token,并根据对它们注意力权重的不同,决定「携带」它们中多少量的信息进来。对于这一过程,一个最简化的说法可以表达为:一个token会注意到 (attend to)所有其他token。对于Decoder这里的自注意力来说,生成的过程需要遵循因果关系。也就是说,生成下一个token的时候,它必须只能注意到 (attend to) 之前已经生成的token;所以,对于已经生成的序列来说,Decoder Layer对这个序列进行处理的时候,序列中每个token也都应该保持跟生成时一样的逻辑,即它只能注意到 (attend to) 在它之前的token。在计算上需要构建一个mask矩阵。而Encoder中的自注意力却允许序列中的每个token都可以注意到 (attend to) 所有的token(包括在它之前和它之后的)。 + ### 与MLP对比 特征矩阵X每一行代表一个 item,以每一列代表一个 feature。通常我们所说的线性层都是 $X^{t+1}=X^tW^t+B^t$,也就是在 feature 这个维度上作线性变换,完全没有考虑 item 与 item 之间的关系。这也是为什么 MLP 会比不过什么 CNN、attention之类的原因,在 MLP 的框架里每个 item 的运算都是独立的,不会与其他 item 产生交互。用代数的话来说,就是在矩阵乘法中,左乘的矩阵行其向量之间是不会产生交互的,相应的右乘的矩阵其列向量之间是不会产生交互的。 diff --git a/_posts/MachineLearning/2023-10-30-llm_agent.md b/_posts/MachineLearning/2023-10-30-llm_agent.md index 6344af20..9d0bef53 100644 --- a/_posts/MachineLearning/2023-10-30-llm_agent.md +++ b/_posts/MachineLearning/2023-10-30-llm_agent.md @@ -81,7 +81,7 @@ AI智能体可能扮演三种角色: [从 CoT 到 Agent,最全综述来了](https://mp.weixin.qq.com/s/bJYqfHF4RrYS8GkXfOMYGA) 1. 什么是“语言智能”?语言智能可以被理解为“使用基于自然语言的概念对经验事物进行‘理解’以及在概念之间进行‘推理’的能力”,随着参数量的飞升,以 Transformer 为基础架构的大规模语言模型以 “Chat” 的方式逐渐向人们展现出了它的概念理解与概念推理的能力。直观上,作为“语言模型”的大模型具备概念理解能力并不难理解,但是仅仅像 Word2vec 一样只能得到“国王”与“男人”的“距离”更近的结论对于语言智能而言必然远远不够。真正引发人们对大模型逼近“语言智能”无限遐想的,在于大模型展现出的概念推理能力。推理,一般指根据几个已知的前提推导得出新的结论的过程,区别于理解,推理一般是一个“多步骤”的过程,推理的过程可以形成非常必要的“中间概念”,这些中间概念将辅助复杂问题的求解。 2. 2022 年,在 Google 发布的论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》中首次提出,通过让大模型逐步参与将一个复杂问题分解为一步一步的子问题并依次进行求解的过程可以显著提升大模型的性能。而这一系列推理的中间步骤就被称为思维链(Chain of Thought)。区别于传统的 Prompt 从输入直接到输出的映射 `output>` 的方式,CoT 完成了从输入到思维链再到输出的映射,即 `reasoning chain——>output>`。如果将使用 CoT 的 Prompt 进行分解,可以更加详细的观察到 CoT 的工作流程。 -3. 在许多 Agent 需要处理的任务中,Agent 的“先天知识”并不包含解决任务的直接答案,因此 Agent 需要在一系列与外部环境的交互循环中,制定计划,做出决策,执行行动,收到反馈……在一整个计划、决策与控制的循环中,大模型需要具备“感知”,“记忆”与“推理”的能力。无论是环境的反馈,还是人类的指令,Agent 都需要完成一个对接收到的信息进行“理解”,并依据得到的理解进行意图识别,转化为下一步任务的过程。而使用 CoT 可以大大帮助模型对现有输入进行“感知”,譬如,通过使用“Answer: Let’s think step by step. I see $$, I need to ...”的 Prompt,可以让模型逐步关注接收到的信息,对信息进行更好的理解 +3. 在许多 Agent 需要处理的任务中,Agent 的“先天知识”并不包含解决任务的直接答案,因此 Agent 需要在一系列与外部环境的交互循环中,制定计划,做出决策,执行行动,收到反馈……在一整个计划、决策与控制的循环中,大模型需要具备“感知”,“记忆”与“推理”的能力。无论是环境的反馈,还是人类的指令,Agent 都需要完成一个对接收到的信息进行“理解”,并依据得到的理解进行意图识别,转化为下一步任务的过程。而使用 CoT 可以大大帮助模型对现有输入进行“感知”,譬如,通过使用“Answer: Let’s think step by step. I see $$, I need to ...”的 Prompt,可以让模型逐步关注接收到的信息,对信息进行更好的理解。 现有方案如CoT和基于分解的提示,都有擅长的任务类型,适合作为独立的原子模块,不具有普适性;[大模型自动推理?谷歌等发布SELF-DISCOVER!](https://zhuanlan.zhihu.com/p/682413793) @@ -657,8 +657,17 @@ PS: 你要是上万个tool的话,llm 上下文塞不下,此时让一个llm 6. 自定义流程助手,严格来说是上面的几种基础Agent能力的组合,理想中的AI Agent是在丢给他一个工具包与一些知识以后,借助于大模型的理解、推理能力,完全自主的规划与分解任务,设计任务步骤,并智能的使用各种工具,检索知识,输出内容,完成任务。但是在企业应用中,由于企业知识、应用、业务需求的千差万别,以及大模型自身的不确定性,如果这么做,那么结果很可能是“开盲盒”一样的不可控。所以这也是越来越多的Agents项目要强调可控性的原因,即能够对AI智能体的执行过程与细节进行更多的控制,来让AI按照人类确认过的工作流程来完成任务。 PS: 人规定流程 + 单个步骤代码化(有些场景代码无法实现 或 个性化成本太高) ==> 人规定流程 + 单个步骤智能化 ==> 自动分析流程 + 单个步骤智能化 +从需求满足的角度来聊一聊:我们首先以“用户去某地旅游”为需求来解释LLM、RAG、Agent三者的能力边界以及需求满足度。 +1. LLM:能够生成“无法考证可能正确”以及“不一定及时”的相关行程攻略,景点等信息。 +2. RAG:能够检索一些时效性高、内容可靠的信息源的内容,并生成相关的行程信息。PS:看能召回什么内容了 +3. Agent:能够基于用户的需求目标完成,通过使用各种工具和系统交互完成攻略制定,订票,制定行程日历等过程任务。PS:先去搜一些攻略,再去订酒店 ==> 从景色、经济、时间等各个角度做一些对比。 + + + ## 其它 +[基于大模型的Agent进行测试评估的3种方案](https://zhuanlan.zhihu.com/p/686839268?utm_psn=1751870991482105856) + [一句指令帮你操作手机,最新多模态手机助手Mobile-Agent来了!](https://mp.weixin.qq.com/s/fVpWW1P80JBQAzTjWAnR8Q)为了便于将文本描述的操作转化为屏幕上的操作,Mobile-Agent生成的操作必须在一个定义好的操作空间内。这个空间共有8个操作,分别是:打开App(App名字);点击文本(文本内容);点击图标(图标描述);打字(文本内容);上翻、下翻;返回上一页;退出App;停止。点击文本和点击图标设计了输入参数。 1. 在迭代开始之前,用户需要输入一个指令。我们根据指令生成整个流程的系统提示。在每次迭代开始时,Mobile-Agent会获取手机屏幕的截图,通过观察系统提示、操作历史和当前屏幕截图,输出下一步操作。如果Mobile-Agent输出的是结束,则停止迭代;否则,继续新的迭代。Mobile-Agent利用操作历史记录了解当前任务的进度,并根据系统提示对当前屏幕截图进行操作,从而实现迭代式自我规划流程。 2. 在迭代过程中,Mobile-Agent可能会遇到错误,导致无法完成指令。为了提高指令的成功率,我们引入了一种自我反思方法。这种方法将在两种情况下生效。第一种情况是生成了错误或无效的操作,导致进程卡住。当Mobile-Agent注意到某个操作后截图没有变化,或者截图显示了错误的页面时,它会尝试其他操作或修改当前操作的参数。第二种情况是忽略某些复杂指令的要求。当通过自我规划完成所有操作后,Mobile-Agent会分析操作、历史记录、当前截图和用户指令,以确定指令是否已完成。如果没有,它需要继续通过自我规划生成操作。 diff --git a/_posts/MachineLearning/2023-12-16-llm_inference.md b/_posts/MachineLearning/2023-12-16-llm_inference.md index 60866a33..2f45b3f6 100644 --- a/_posts/MachineLearning/2023-12-16-llm_inference.md +++ b/_posts/MachineLearning/2023-12-16-llm_inference.md @@ -112,6 +112,27 @@ Decoding 阶段不需要 tokenize,每一次做 decoding 都会直接从计算 ![](/public/upload/machine/vllm_arch.jpg) + +## 访存量 + +[LLM推理到底需要什么样的芯片?](https://zhuanlan.zhihu.com/p/683359705)LLM的访存特征并不复杂,权重是所有请求所有Token都共享的,也是固定大小的内存占用量,一般是1GB~100GB量级,取决于模型规模(Cache的大小只有几十M,因此权重在每次运行间不会保留在Cache中)。KV的内存占用量则是和模型相关,也和上下文长度成正比,并且每个请求独立的,并发的请求越多,KV需要占用的存储越大。今天在100GB~1TB区间上极限也就是做到100K量级的上下文长度,此时并发度往往是个位数甚至1。这个是很恐怖的,因为并发度提升一个数量级,或者上下文长度提升一个数量级,需要的KV存储也直接提升一个数量级,奔着1TB~10TB去了。而今天对于上下文长度的提升需求一定程度就是这样指数级的。每个请求实际上对应了一连串的Token生成,并且这一串Token是串行生成的。每个Token生成的过程都需要权重和这个请求对应的KV一起参与计算,这个访存量和硬件架构无关,只和模型以及上下文长度有关。而硬件能以多快的速度完成这个访存量,就决定了Token生成的时间下限。复用是一切花里胡哨的前提。一个系统同时并发处理大量这样的请求。权重部分的访存量所有Token都可以复用,而KV部分只有同一个请求的Token才共享,但这些Token的生成又是串行的,也没法共享。最终硬件拼的就是能够全量放下所有权重和并发请求对于KV的那个内存介质的带宽成本。PS: 提到了一个概念:**每生成一个Token的访存量** + +Token生成的质量其实抛开纯算法层面的因素,主要是取决于参与计算的权重和参与计算的KV,分别对应模型对世界的静态认知以及对当前请求上下文的感受野。提高Token质量的方式就是更精细地利用访存量,让参与到Token计算的模型权重和KV更重要,除了量化压缩这些在质量和访存量上取平坦斜率的玄学外,这里面最显著的花里胡哨也就是稀疏化。 +1. MOE算是稀疏化了权重,每个Token只访问了可能和这个请求更相关的权重,这样用更少的访存量就可以获得接近的权重质量,因为Token感受野里的世界理解以及上下文相关度更高。 +2. KV的稀疏化未来大概率也会爆发,当上下文长度飙升到M甚至G量级的时候,只访问其中相关度更高的子集来减少访问量 +LLM推理需要的芯片形态,最重要的是内存带宽和互联带宽,无比粗暴的100GB~1TB级别的scan模式访问(拒绝一切花里胡哨的复用),内存系统的噩梦。 + +不同场景的访存量 + +1. prefill(用户输入)和decode(模型输出)的token量在不同场景下也是不一样的。LLM的prefill和decode分别用来处理用户输入的token和产生模型输出的token。prefill阶段是一次性输入全部token进行一次模型推理即可,期间生成用户输入对应的KV补充到整个KV-cache中供decode阶段使用,同时也生成输出的第一个token供decode启动自回归。这是个计算密集的阶段,且计算量随着用户输入token长度增加成正比增加。而decode阶段因为每个token都需要对模型进行一次inference,并对权重和KV进行一次访问,总的访存量和用户输入token数成正比,计算量也是一样成正比。所以相同token长度下,prefill和decode计算量一致,decode阶段访存量远远大于prefill阶段的,正比于token长度。一次用户请求实际上是既包含prefill,也包含decode。一个是计算密集型,一个是访存密集型,对硬件的要求更夸张了。如果是简单对话场景,通常模型的decode输出会更多一些,而如果是超长上下文场景,用户先上传一本几十万字的书再进行问答,这本书的prefill会直接起飞。在Agent场景下,大量预设的prompt也会占据非常多的prefill,不过prompt的prefill有不少机会可以提前算好KV而无需每个用户请求单独重复计算。 +2. 同一个batch的prefill和decode长度也不一样。考虑到我们搭建这样一个庞大的大模型推理系统需要服务大量用户,每个用户的prefill和decode长度很难保持一致。考虑到prefill和decode截然相反的计算访存特性,再考虑到芯片系统里面的内存资源异常宝贵,其实此时对Infra层面的调度设计已经开始爆炸了,而芯片设计同样需要考虑给Infra层面提供什么样的设计空间。用户请求之间相互等待prefill和decode阶段的同步完成会产生很强的QoS问题,但如果同时进行prefill和decode硬件算力资源、内存资源、带宽资源的分配以及每一阶段的性能优化策略产生很强的扰动和不确定性,甚至产生内存不足等一系列问题。此外,面对不等长输入输出的更加复杂和精细的资源调度,也进一步产生大量更精细的算子编写和优化的工作量,对于芯片的可编程性进一步提出了变态要求。 + +海量用户的KV-cache需要频繁从高速内存中切入切出。当整个推理系统服务几千万用户时,一个batch的几十个用户请求支持开胃菜。每个用户会不间断地和大模型进行交互,发出大量请求,但这些请求的间隔时间短则几秒,长则几分钟几小时。因此我们上一章讲的占用内存空间巨大的KV-cache实际上只考虑了当前系统正在处理的用户请求总量,还有大量用户正在阅读大模型返还的文字,正在打字输入更多的请求。考虑人机交互的频率,一个用户请求结束后,对应的KV-cache继续常驻在高速内存中实际意义不大,需要赶紧把宝贵的高速内存资源释放出来。而其他已经发送到系统的新用户请求也需要把对应的KV-cache赶紧加载到高速内存中来开启对该用户请求的处理。每个用户聊天的KV-cache都是100MB~100GB量级的IO量(取决于模型和上下文长度,跨度比较大)。这个IO带宽要求也不小,因为要匹配系统内部的吞吐率,每个请求要进行一次完整的KV导入和导出,而系统内部的内存带宽需要读取的次数正比于token数,所以两者带宽差距取决于请求输出的文本长度,通常在100~1000左右,注意这里的带宽是芯片系统的总内存带宽,例如groq的是80TB/s * 500+ = 40PB/s,那么这个IO的总带宽需要飙升到40TB/s~400TB/s才能满足sram的吞吐要求。当然也可以考虑重计算,但这个重计算的代价一定是超过prefill的,因为聊天历史记录一定比当前这一次的输入长度要长的多,尤其对于超长上下文,用户上传一个文件后进行多轮对话,对文件的prefill进行一次即可,后续的交互中仅仅对用户提问进行prefill而无需对文件重复prefill,但需要将前面prefill的结果从外部IO倒腾进来,并在回答后将增量部分及时倒腾出去。虽然倒腾到高速内存系统外部了,但面对几千万用户时,每个用户的每个聊天对应的KV-cache量也是天文数字一样的存储,实际上也不需要都存,但确实需要综合考虑效率的问题。一个用户在看到大模型回复之后,可能在几秒钟内回复,也可能几分钟后回复,也有可能就离开电脑永远不回复了。此时已经是一个大规模集群层面的调度和存储资源、计算资源、带宽资源的综合管理了。多模态进一步加剧复杂程度。不同模态的流量潮汐、计算特点以及计算、内存、带宽资源占用情况,都会进一步加剧整个系统对于弹性的需求。 + +当然,软件问题也不能抛开不谈。实际上LLM推理系统远不是transformer模型怎么硬件实现最高效,软件就可以丢到一边不管或者丢给编译器就能了事的。我们也可以看到实际上LLM的推理对Infra层面的调度设计的复杂性压根不在transformer本身,**而是在“大”模型产生的各自带宽流量问题**,精细化利用高速内存和带宽资源催生的潜在的算子需求也已经开始爆炸,甚至复杂度是远高于原先的朴素算子的。这些算子和调度分别是在微观层面和宏观层面对硬件资源的极致利用,在今天这种对算力、带宽、容量、互联需求全都拉爆的应用上,这种极致利用会变得更加重要。今天在Infra的调度设计层面实际上在标准体系上还没有事实标准。这是无数Infra从业者又一次巨大的机会。同时,Infra对事实标准的竞争之下还有一条暗线,就是LLM芯片和系统形态的竞争。实际上NVidia就是借着深度学习框架的竞争,成功用CPU+GPU的异构形态干掉了CPU集群的形态。通过CPU+GPU的异构形态为所有深度学习框架的竞争者创造了一种更高的上限和更极致的设计空间,从而使得所有深度学习框架事实上都在CPU+GPU的异构形态下竞争。 + +[LLM推理的极限速度](https://mp.weixin.qq.com/s/v2rJmmnNr1VB0hg1tt1pmg)对于Mistral 7B,如果模型在矩阵元素上使用FP16,那么我们需要为每个词元读取约14.2GB的数据。在NVidia RTX 4090(1008 GB/s)上,读取14.2 GB需要约14.1毫秒,因此我们可以预期低位置编号的每个词元需要约14.1毫秒(KV缓存的影响可以忽略不计)。上述数字都是下限值,代表每个词元理论上的最短时间。要实际达到这一最短时间,你需要高质量的软件实现,以及能够达到理论峰值带宽的硬件。 + ## 具体技术 ### 流水线优化 @@ -178,6 +199,7 @@ KV Cache的优化方法 PS:Transformer (和Attention) layer 已经支持了缓存机制 (use_cache=true),kvcache 在代码上如何体现可以理解。pageattention 是不是可以理解为:pageattention 初始化了cache,只要把这个cache 引用传给 Transformer (和Attention) forward 函数参数,Transformer 就可以用这个cache 到计算过程中了? [图解大模型推理优化:KV Cache](https://mp.weixin.qq.com/s/7Lx26Pv1Pdf8uI3pakQZxg) +[LLM推理入门指南②:深入解析KV缓存](https://mp.weixin.qq.com/s/WxbMFoSrKl0xqsUkzPLJHw) 未读 ### Flash Attention @@ -217,25 +239,6 @@ Batching就是将一段时间内到达的用户请求合并到一起,提交到 [让LLM推理加速的batching是什么技术(in-flight batching)](https://zhuanlan.zhihu.com/p/679723881) -## 访存量 - -[LLM推理到底需要什么样的芯片?](https://zhuanlan.zhihu.com/p/683359705)LLM的访存特征并不复杂,权重是所有请求所有Token都共享的,也是固定大小的内存占用量,一般是1GB~100GB量级,取决于模型规模,KV的内存占用量则是和模型相关,也和上下文长度成正比,并且每个请求独立的,并发的请求越多,KV需要占用的存储越大。今天在100GB~1TB区间上极限也就是做到100K量级的上下文长度,此时并发度往往是个位数甚至1。这个是很恐怖的,因为并发度提升一个数量级,或者上下文长度提升一个数量级,需要的KV存储也直接提升一个数量级,奔着1TB~10TB去了。而今天对于上下文长度的提升需求一定程度就是这样指数级的。每个请求实际上对应了一连串的Token生成,并且这一串Token是串行生成的。每个Token生成的过程都需要权重和这个请求对应的KV一起参与计算,这个访存量和硬件架构无关,只和模型以及上下文长度有关。而硬件能以多快的速度完成这个访存量,就决定了Token生成的时间下限。复用是一切花里胡哨的前提。一个系统同时并发处理大量这样的请求。权重部分的访存量所有Token都可以复用,而KV部分只有同一个请求的Token才共享,但这些Token的生成又是串行的,也没法共享。最终硬件拼的就是能够全量放下所有权重和并发请求对于KV的那个内存介质的带宽成本。PS: 提到了一个概念:**每生成一个Token的访存量** - -Token生成的质量其实抛开纯算法层面的因素,主要是取决于参与计算的权重和参与计算的KV,分别对应模型对世界的静态认知以及对当前请求上下文的感受野。提高Token质量的方式就是更精细地利用访存量,让参与到Token计算的模型权重和KV更重要,除了量化压缩这些在质量和访存量上取平坦斜率的玄学外,这里面最显著的花里胡哨也就是稀疏化。 -1. MOE算是稀疏化了权重,每个Token只访问了可能和这个请求更相关的权重,这样用更少的访存量就可以获得接近的权重质量,因为Token感受野里的世界理解以及上下文相关度更高。 -2. KV的稀疏化未来大概率也会爆发,当上下文长度飙升到M甚至G量级的时候,只访问其中相关度更高的子集来减少访问量 -LLM推理需要的芯片形态,最重要的是内存带宽和互联带宽,无比粗暴的100GB~1TB级别的scan模式访问(拒绝一切花里胡哨的复用),内存系统的噩梦。 - -不同场景的访存量 - -1. prefill(用户输入)和decode(模型输出)的token量在不同场景下也是不一样的。LLM的prefill和decode分别用来处理用户输入的token和产生模型输出的token。prefill阶段是一次性输入全部token进行一次模型推理即可,期间生成用户输入对应的KV补充到整个KV-cache中供decode阶段使用,同时也生成输出的第一个token供decode启动自回归。这是个计算密集的阶段,且计算量随着用户输入token长度增加成正比增加。而decode阶段因为每个token都需要对模型进行一次inference,并对权重和KV进行一次访问,总的访存量和用户输入token数成正比,计算量也是一样成正比。所以相同token长度下,prefill和decode计算量一致,decode阶段访存量远远大于prefill阶段的,正比于token长度。一次用户请求实际上是既包含prefill,也包含decode。一个是计算密集型,一个是访存密集型,对硬件的要求更夸张了。如果是简单对话场景,通常模型的decode输出会更多一些,而如果是超长上下文场景,用户先上传一本几十万字的书再进行问答,这本书的prefill会直接起飞。在Agent场景下,大量预设的prompt也会占据非常多的prefill,不过prompt的prefill有不少机会可以提前算好KV而无需每个用户请求单独重复计算。 -2. 同一个batch的prefill和decode长度也不一样。考虑到我们搭建这样一个庞大的大模型推理系统需要服务大量用户,每个用户的prefill和decode长度很难保持一致。考虑到prefill和decode截然相反的计算访存特性,再考虑到芯片系统里面的内存资源异常宝贵,其实此时对Infra层面的调度设计已经开始爆炸了,而芯片设计同样需要考虑给Infra层面提供什么样的设计空间。用户请求之间相互等待prefill和decode阶段的同步完成会产生很强的QoS问题,但如果同时进行prefill和decode硬件算力资源、内存资源、带宽资源的分配以及每一阶段的性能优化策略产生很强的扰动和不确定性,甚至产生内存不足等一系列问题。此外,面对不等长输入输出的更加复杂和精细的资源调度,也进一步产生大量更精细的算子编写和优化的工作量,对于芯片的可编程性进一步提出了变态要求。 - -海量用户的KV-cache需要频繁从高速内存中切入切出。当整个推理系统服务几千万用户时,一个batch的几十个用户请求支持开胃菜。每个用户会不间断地和大模型进行交互,发出大量请求,但这些请求的间隔时间短则几秒,长则几分钟几小时。因此我们上一章讲的占用内存空间巨大的KV-cache实际上只考虑了当前系统正在处理的用户请求总量,还有大量用户正在阅读大模型返还的文字,正在打字输入更多的请求。考虑人机交互的频率,一个用户请求结束后,对应的KV-cache继续常驻在高速内存中实际意义不大,需要赶紧把宝贵的高速内存资源释放出来。而其他已经发送到系统的新用户请求也需要把对应的KV-cache赶紧加载到高速内存中来开启对该用户请求的处理。每个用户聊天的KV-cache都是100MB~100GB量级的IO量(取决于模型和上下文长度,跨度比较大)。这个IO带宽要求也不小,因为要匹配系统内部的吞吐率,每个请求要进行一次完整的KV导入和导出,而系统内部的内存带宽需要读取的次数正比于token数,所以两者带宽差距取决于请求输出的文本长度,通常在100~1000左右,注意这里的带宽是芯片系统的总内存带宽,例如groq的是80TB/s * 500+ = 40PB/s,那么这个IO的总带宽需要飙升到40TB/s~400TB/s才能满足sram的吞吐要求。当然也可以考虑重计算,但这个重计算的代价一定是超过prefill的,因为聊天历史记录一定比当前这一次的输入长度要长的多,尤其对于超长上下文,用户上传一个文件后进行多轮对话,对文件的prefill进行一次即可,后续的交互中仅仅对用户提问进行prefill而无需对文件重复prefill,但需要将前面prefill的结果从外部IO倒腾进来,并在回答后将增量部分及时倒腾出去。虽然倒腾到高速内存系统外部了,但面对几千万用户时,每个用户的每个聊天对应的KV-cache量也是天文数字一样的存储,实际上也不需要都存,但确实需要综合考虑效率的问题。一个用户在看到大模型回复之后,可能在几秒钟内回复,也可能几分钟后回复,也有可能就离开电脑永远不回复了。此时已经是一个大规模集群层面的调度和存储资源、计算资源、带宽资源的综合管理了。多模态进一步加剧复杂程度。不同模态的流量潮汐、计算特点以及计算、内存、带宽资源占用情况,都会进一步加剧整个系统对于弹性的需求。 - -当然,软件问题也不能抛开不谈。实际上LLM推理系统远不是transformer模型怎么硬件实现最高效,软件就可以丢到一边不管或者丢给编译器就能了事的。我们也可以看到实际上LLM的推理对Infra层面的调度设计的复杂性压根不在transformer本身,**而是在“大”模型产生的各自带宽流量问题**,精细化利用高速内存和带宽资源催生的潜在的算子需求也已经开始爆炸,甚至复杂度是远高于原先的朴素算子的。这些算子和调度分别是在微观层面和宏观层面对硬件资源的极致利用,在今天这种对算力、带宽、容量、互联需求全都拉爆的应用上,这种极致利用会变得更加重要。今天在Infra的调度设计层面实际上在标准体系上还没有事实标准。这是无数Infra从业者又一次巨大的机会。同时,Infra对事实标准的竞争之下还有一条暗线,就是LLM芯片和系统形态的竞争。实际上NVidia就是借着深度学习框架的竞争,成功用CPU+GPU的异构形态干掉了CPU集群的形态。通过CPU+GPU的异构形态为所有深度学习框架的竞争者创造了一种更高的上限和更极致的设计空间,从而使得所有深度学习框架事实上都在CPU+GPU的异构形态下竞争。 - - ## 一些材料 [大模型推理加速技术的学习路线是什么? ](https://www.zhihu.com/question/591646269/answer/3333428921) @@ -245,7 +248,7 @@ LLM推理需要的芯片形态,最重要的是内存带宽和互联带宽, 2. 模型压缩技术 3. 硬件加速 4. GPU加速 -5. 模型并行化和分布式计算技术。在Memory-Bound场景里,为了提升GPU利用率,一般会采用张量并行(Tensor Parallelism, TP),将LLM模型参数进行切分,从而减少从显存中读取模型参数的耗时。举例而言,对于13B的模型,如果使用FP16精度进行模型推理,那么模型参数所占的显存空间约为24.21 GB `(13*2/(1.024**3) ~= 24.21)`如果是使用单张L20卡进行推理,那么从显存中读取模型参数的耗时约为28.02毫秒`(24.21/864 ~= 0.02802)`如果是使用两张L20卡进行推理,并选择TP=2,那么从显存中读取模型参数的耗时约为14.01毫秒,当然TP策略会带领额外通信开销,所以也不是越多卡越好。进一步的,当单机8个GPU卡总的显存都放不下模型参数时,就需要使用流水线并行技术以便将模型参数切分到不同的服务器上,或者是采用ZeRO-Inference大模型推理技术,将模型参数切分以及将模型参数offload到CPU内存。 +5. 模型并行化和分布式计算技术。在Memory-Bound场景里,为了提升GPU利用率,一般会采用张量并行(Tensor Parallelism, TP),将LLM模型参数进行切分,从而减少从显存中读取模型参数的耗时。举例而言,对于13B的模型,如果使用FP16精度进行模型推理,那么模型参数所占的显存空间约为24.21 GB `(13*2/(1.024**3) ~= 24.21)`如果是使用单张L20卡进行推理,那么从显存中读取模型参数的耗时约为28.02毫秒`(24.21/864 ~= 0.02802)`如果是使用两张L20卡进行推理,并选择TP=2,那么从显存中读取模型参数的耗时约为14.01毫秒,当然TP策略会带领额外通信开销,所以也不是越多卡越好。进一步的,当单机8个GPU卡总的显存都放不下模型参数时,就需要使用流水线并行技术以便将模型参数切分到不同的服务器上,或者是采用ZeRO-Inference大模型推理技术,将模型参数切分以及将模型参数offload到CPU内存。PS:由于涉及使用速度较慢的存储介质,卸载操作会带来严重的时延,因此不适用于对时延比较敏感的用例。卸载系统通常用于面向吞吐量的用例,如离线批处理。 [迈向100倍加速:全栈Transformer推理优化](https://mp.weixin.qq.com/s/1QlZ_d4BrAcD9YE9BEdyYg)本文回顾了从GPU架构到MLsys方法,从模型架构到解码算法的全栈Transformer推理优化方法。可以看出,大部分性能提升都来自于一个原则的利用:Transformer推理受内存限制,因此我们可以释放额外的计算能力/flops。其次,优化要么来自于优化内存访问,比如Flash Attention和Paged Attention,要么来自于释放计算能力,比如Medusa和前向解码。我们相信MLSys和建模仍有许多改进空间。在即将到来的2024年,随着模型变得更大、上下文变得更长以及随着更多开源MoE(混合专家模型)、更高内存带宽和更大内存容量的硬件,以及具有更大DRAM和专用计算引擎的移动设备的亮相,将出现更强大且人人可操作、可访问的AI。一个新时代即将到来。 diff --git a/_posts/MachineLearning/2023-12-16-llm_train.md b/_posts/MachineLearning/2023-12-16-llm_train.md index 4ff4e21d..2978cd53 100644 --- a/_posts/MachineLearning/2023-12-16-llm_train.md +++ b/_posts/MachineLearning/2023-12-16-llm_train.md @@ -185,6 +185,7 @@ DLRover 推出了 Flash Checkpoint (FCP) 方案,同步将训练状态写到共 ## 其它 +[研发大模型的血液--万字长文详谈数据工程](https://mp.weixin.qq.com/s/izePeavfxezfEkkPzgMmjQ) 未读 [大模型训练为什么用A100不用4090](https://mp.weixin.qq.com/s/nHCznUDOpXk3G4zfhisf9w)大模型训练需要多少算力?训练总算力(Flops)= 6 * 模型的参数量 * 训练数据的 token 数。 1. 6 * 模型的参数量 * 训练数据的 token 数就是所有训练数据过一遍所需的算力。这里的 6 就是每个 token 在模型正向传播和反向传播的时候所需的乘法、加法计算次数。 diff --git a/_posts/MachineLearning/2024-02-02-llm_inference_framework.md b/_posts/MachineLearning/2024-02-02-llm_inference_framework.md index 800e38cd..853e6e63 100644 --- a/_posts/MachineLearning/2024-02-02-llm_inference_framework.md +++ b/_posts/MachineLearning/2024-02-02-llm_inference_framework.md @@ -248,6 +248,10 @@ openai 参数转为 model_worker api 参数,最终转为 (Transformer库或 [vLLM(二)架构概览](https://zhuanlan.zhihu.com/p/681716326) +[图解大模型计算加速系列:vLLM源码解析1,整体架构](https://mp.weixin.qq.com/s/r_t6_zMvPT7za82MZX4oRA) 未读 + +[图解大模型计算加速系列:vLLM源码解析2,调度器策略(Scheduler)](https://mp.weixin.qq.com/s/UCdqQUM_9a36uXkO36wpSg) 未读 + ## TensorRT-LLM [LLM推理:GPU资源和推理框架选择](https://mp.weixin.qq.com/s/coxDO2z2_w17UbbiTseNpw)TensorRT-LLM是Nvidia开源的LLM推理引擎,由开源项目FastTransformer演进而来,TensorRT-LLM需要结合Triton Inference Server才能构建完整的LLM推理服务。如果需要支持基于RESTFul API的流式输出(例如,类似OpenAI的LLM推理API接口),还需要进一步配合FastAPI才能支持流式输出。TensorRT-LLM目前还不是完全开源的,例如,Batch Manager 目前是不开源的。 diff --git a/_posts/Technology/Architecture/2019-04-19-talk_architecture.md b/_posts/Technology/Architecture/2019-04-19-talk_architecture.md index 95f241d4..7489b959 100644 --- a/_posts/Technology/Architecture/2019-04-19-talk_architecture.md +++ b/_posts/Technology/Architecture/2019-04-19-talk_architecture.md @@ -89,6 +89,12 @@ Martin Fowler 认为软件架构是:重要并且难以改变的决策。 ## 其它 +李云:我们在编程时,其实包含无意识的两大步骤:第一步完成的是根本任务,即构思好概念和概念之间的关系,这一步我称之为“软件设计”;第二步完成的是次要任务,即在满足时间冗余度和空间冗余度的情形下,将概念用编程语言表达出来,这一步就是编码工作。布鲁克斯指出,过去软件生产效率的巨大进步得益于在次要任务上投入了巨大的努力。比如,新的编程语言、更快的处理器等。然而,除非次要任务占整个软件开发活动的 90%,否则即便将次要任务所花费的时间缩减到零,也不能带来软件生产效率数量级的提高。这就是“没有银弹”四个字的核心所指。即便进入 21 世纪的今天,这一论断依然成立。软件行业在根本任务的生产效率上,并没有取得次要任务那样质的进步。回到“程序易于理解的核心是什么”这个问题上,我对好程序的第二层理解是:**好程序有着清晰、颗粒度合适、连贯且一致的概念**。强调概念质量的背后,表达的是对程序的软件设计质量的高要求,这样的程序才易于理解。概念能力是指个体理解、分析和处理复杂概念和问题的能力。这种能力通常涉及从现象中抽象出关键信息,形成整合的观念和理论,进而能够对复杂的情境进行有效的理解和处理。你知道吗?概念能力是人类应对复杂度的一种独特能力,帮助我们理解并解决大量个例问题。新概念的提出一开始会带来更高的概念成本,需要我们花一定的时间去学习和掌握。可一旦概念被普及,就能提升沟通的效率。那我们为什么最终会喜欢新的概念呢?因为概念将大大降低大脑需要处理的信息量,降低生物能耗,是进化带给我们的一种生存能力使然。在工作中,你可能听到过“分而治之”这个词,讲的是对一个复杂的软件系统,用以大化小、拼积木的方法来实现。当你知道了程序中概念的核心作用后,就可以理解为,复杂的软件系统是通过概念的切分与塑造来实现的。 +1. 第一层理解是:让人易于理解的程序才是好程序。 +2. 第二层理解是:好程序有着清晰、颗粒度合适、连贯且一致的概念。 +3. 好程序的第三层理解:好程序是让人容易修改的。 +“程序的性能、算法、内存开销等要素,为何没有作为好程序的评价指标?”好程序是通过优化而演进出来的。因此,只要程序易懂又好改,其他的问题都不是问题。 + [如何画好一张架构图?](https://mp.weixin.qq.com/s/2HjvNnfP7bLNQF5xh8PxIQ) 1. I claim that you want to start communicating between independent modules no sooner than you absolutely HAVE to, and that you should avoid splitting things up until you really need to, because that communication complexity often swamps the complexity of the actual pieces involved in it.(让我们认识到一种现象,把复杂系统拆分成模块,似乎并没有降低整个系统的复杂度。它降低的只是子系统的复杂度。而整个系统的复杂度,反而会由于拆分后的模块之间,不得不进行交互,变得更加复杂。) 2. The fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution. Architecture = Structure of Component + Relationships + Principles & Guidelines。 diff --git a/_posts/Technology/Basic/2020-10-26-cpu.md b/_posts/Technology/Basic/2020-10-26-cpu.md index 6f5212bb..0e910467 100644 --- a/_posts/Technology/Basic/2020-10-26-cpu.md +++ b/_posts/Technology/Basic/2020-10-26-cpu.md @@ -74,6 +74,8 @@ CPU 最早就是当年英特尔的一帮人,他们把储存器还有运算器 ## 多层次内存结构 +现代CPU和GPU进行ALU运算的速度(乘法、加法)远高于它们从内存读取输入的速度。AMD Ryzen 7950X的内存带宽为67 GB/s,浮点运算能力为2735 GFLOPS,FLOP:字节读取比为40:1。NVidia GeForce RTX 4090的内存带宽为1008 GB/s,运算能力为83 TFLOPS,FLOP:字节读取比为82:1。 + 总的思路:CPU 从单核发展为多核,增加缓存,导致出现了多个核间的缓存一致性问题 --> 为了解决缓存一致性问题,提出了 MESI 协议 --> 完全遵守 MESI 又会给 CPU 带来性能问题 --> CPU 设计者又增加 store buffer 和 invalid queue --> 又导致了缓存的顺序一致性变为了弱缓存一致性(引出了可见性问题 )--> 需要缓存的顺序一致性的,可见性问题抛给了开发者,需要软件工程师自己在合适的地方添加内存屏障。PS:**本质就是cpu 默认会进行性能优化,但如果多核共享缓存了(也就是多线程竞争变量了),cpu 也提供指令 放弃优化,由使用方在合适的位置 插入这些指令**,可以认为若不是为了优化MESI,多核对变量的原子操作应该是安全的。 ### 缘起 diff --git a/_posts/Technology/JVM/2016-06-17-jvm_gc.md b/_posts/Technology/JVM/2016-06-17-jvm_gc.md index a6482540..cd086dcb 100644 --- a/_posts/Technology/JVM/2016-06-17-jvm_gc.md +++ b/_posts/Technology/JVM/2016-06-17-jvm_gc.md @@ -271,7 +271,7 @@ Hotspot 的分代垃圾回收将老年代空间的 512bytes 映射为一个 byte [JVM中的G1垃圾回收器](http://www.importnew.com/15311.html) 1. Java垃圾回收器是一种“自适应的、分代的、停止—复制、标记-清扫”式的垃圾回收器。 -2. 在G1中没有物理上的Young(Eden/Survivor)/Old Generation,它们是逻辑的、使用一些非连续的区域(Region)组成的。G1 将 Region 作为单次回收的最小单元,**优先处理回收价值收益最大的 Region**,有计划地避免在整个 Java 堆中进行垃圾收集。**每个Region 在不同的时间点可能会扮演不同的角色**,一个新生代的Region gc 后成为可用Region,可能会被作为老年代Region。 +2. 在G1中没有物理上的Young(Eden/Survivor)/Old Generation,它们是逻辑分代的、使用一些非连续的区域(Region)组成的。G1 将 Region 作为单次回收的最小单元,**优先处理回收价值收益最大的 Region**,有计划地避免在整个 Java 堆中进行垃圾收集。**每个Region 在不同的时间点可能会扮演不同的角色**,一个新生代的Region gc 后成为可用Region,可能会被作为老年代Region。 ### Region 及 跨区引用 @@ -281,7 +281,7 @@ Hotspot 的分代垃圾回收将老年代空间的 512bytes 映射为一个 byte ![](/public/upload/jvm/g1_region.png) -Humongous 是专门用来存放大对象的,如果一个对象的大小大于一个 Region 的 50%(默认值),那么我们就认为这个对象是一个大对象。为了防止大对象的频繁拷贝,我们可以将大对象直接放到 Humongous 中。Eden、Survivor、Old 三种区域 与上文类似。PS:传统的标记清理算法 容易有内存碎片,分配大对象时容易无法找到连续内存空间而触发GC。[JVM 内存大对象监控和优化实践](https://mp.weixin.qq.com/s/qfsY7fk_-rMdXPGYb766PA) +Humongous 是专门用来存放大对象的,如果一个对象的大小大于一个 Region 的 50%(默认值),那么我们就认为这个对象是一个大对象。为了防止大对象的频繁拷贝,我们可以将大对象直接放到 Humongous 中。这些巨型对象,默认直接会被分配在年老代,但是如果它是一个短期存在的巨型对象,就会对垃圾收集器造成负面影响。Eden、Survivor、Old 三种区域 与上文类似。PS:传统的标记清理算法 容易有内存碎片,分配大对象时容易无法找到连续内存空间而触发GC。[JVM 内存大对象监控和优化实践](https://mp.weixin.qq.com/s/qfsY7fk_-rMdXPGYb766PA) G1 的垃圾回收模式有两种:分别是 young GC 和 mixed GC。 1. young GC:只回收年轻代的 Region。 diff --git a/_posts/Technology/Java/2017-05-02-write_java_framework.md b/_posts/Technology/Java/2017-05-02-write_java_framework.md index e1eac6f9..95b3a2c8 100644 --- a/_posts/Technology/Java/2017-05-02-write_java_framework.md +++ b/_posts/Technology/Java/2017-05-02-write_java_framework.md @@ -185,7 +185,7 @@ spi 是与 api 相对应的一个词,代码上会有一个接口类与其对 还有一种父类,参见netty-codec-http2,父类HttpRequestDecoder处理了http协议所有可能的场景,子类只需为父类某些参数设置特定值即可。构造子类时,不需要传入父类构造函数一样多的参数。 -不同的继承形式,就好比不同的家庭。有的是富二代,父类把所有活儿都干完了。有的父类则是下个指示,交给各个子女去执行。甚至于还有,子类忙的要死,将公共的活儿匀给父类干。 +不同的继承形式,就好比不同的家庭。有的是富二代,父类把所有活儿都干完了。有的父类则是下个指示,交给各个子女去执行。随着接入业务逐渐增多继承关系会越来越“胖”或者越来越“高”,当一个新的扩展品类来的时候,我们都需要决策一件事情,新来的品类是继承最根部base类(变胖),还是找一个实现逻辑最相近的类来继承(变高)。变胖带来的后果就是复用性不好,一样的实现逻辑可能会出现在多个流程中;变高带来的后果是父类实现的修改有可能会影响子类的业务。 ## 重新理解工厂模式 diff --git a/_posts/Technology/Netty/2016-07-25-netty_review.md b/_posts/Technology/Netty/2016-07-25-netty_review.md index 6aed7457..64883544 100644 --- a/_posts/Technology/Netty/2016-07-25-netty_review.md +++ b/_posts/Technology/Netty/2016-07-25-netty_review.md @@ -16,6 +16,8 @@ keywords: JAVA netty review [从操作系统层面分析Java IO演进之路](https://mp.weixin.qq.com/s/KgJFyEmZApF7l5UUJeWf8Q) netty 和 kernel 交互图 ![](/public/upload/netty/netty_kernel.png) +[这些年背过的面试题——Netty篇](https://mp.weixin.qq.com/s/JZE22Ndvo0tWC2P-MD0ROg) 未读。 + ## netty做了什么工作 Java 的标准类库,由于其基础性、通用性的定位,往往过于关注技术模型上的抽象,而不是从一线应用开发者的角度去思考。java nio类库的三个基本组件bytebuffer、channel、selector。java只是将这三个组件赤裸裸的提供给你,线程模型由我们自己决定采用,数据协议由我们自己制定并解析。 diff --git a/public/upload/machine/dlrover_arch.jpg b/public/upload/machine/dlrover_arch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8f06425574ab84a6d932e8071af7f001b38e4c9 GIT binary patch literal 156105 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
-!ZR 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 H`FrwjHdzYz literal 0 HcmV?d00001 diff --git a/public/upload/machine/langchain_memory.jpg b/public/upload/machine/langchain_memory.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bca41b0a7f6a47616410c1b749192ec90a38322 GIT binary patch literal 44736 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 literal 0 HcmV?d00001 diff --git a/public/upload/machine/prompt_principle.jpg b/public/upload/machine/prompt_principle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97e732f7997ee936eb32242a3b896fb27eb6d469 GIT binary patch literal 46667 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

&+l6xE>pCHln>IJ#W3Hq!!#JI`tE&2rw*<< z_IYdH>ZRoQ8E03uBXu^&67X7I^7ZgAmymZX8~c&ykBX6+hj90|GYcyq+PBibEZ}p% z$nb&lNAskm#dV0=i?;p6z4PksCA98+aehH5^_Z34BDSfB7aa@|6yLa_9^u2yRk;Z} zq**$??Lv!y`p9=>DO{0q4DY-m7XyAa`G)R}^n3xgs5A!)GsEj&0sJdVbII8EBN946 z4{_t2UawevHUqN1htKjT^QPmS{iH9a5WTB@%oGmgY2f9IcGg^Uc~m|QTxL>jo5Axo zsY8yk(yXu1jopb?b=bt=g?|!ntE^$sSot1IuAq8u4e6YTex{j;p1=i$*vRVHe813; zk&&!-G^?{S_RPWde<`4H)exC$m2GuBGwTH2gMR~Zf4hI8;~Z>BW8jMQzVd|v!d~A{ z@I>&*Vdrd4yc624a$|ya!W%l80Oi=##$=7>_ z^jMELj@9`)PCj8AyL;56@BnH?oX%s6UghOf^=p`yAE%^APn8guB#R0-RK#B+lLi!MttCq{wO~}I$KHdcjw!ru(+uw{leW}$m zMvqIeag`&;>$XgxbvMoSzjsN%I{@0gl ze}9bqotFiqDC7Y4T8R9M*QiUF>7@Hoy{$*5YU!t^*> zNXwQ5s2Tqd81c$cwZ{;zW-0JLk=oQZuuzc~1pI^7wis1!GPr1 zoC+%a4?$P?%x3R-K}e2w46U84`+8X#z2UKZH&M$tP-;-tkaO>Oy%zZ#2hA`8L!yYf zz?8n$hZL|`pQ*T&A>pT(j7kfh4{SA*Y&!8QQ}B(*+^U6|;bzzCbhqQy2u&=Bu&62l z_e&<-iCPZUu5H~a*tiz76}g+%>sn2AK#K3?h^6>MkCNOF~F|)y}t3R~gxBQOW;#w`l|~L#OTTUD!cUvAJI| zyhhhUTREelM?rYu?~BqVeNvgGJ1M~ilY>|r=BFCPaYd^?C@$Mm($(T4h}FF9LBHEh zv(@B=#imAGwwCseHTSZ|7uSTQd5B(f>GTjnNwcu@sUjKS=bJso_X1jU(3?i+E}UYw z9uQ}f;HP=hWcua+L}xoyH(Qe6n4x_Pk>pmnbG?()iC}sbS{D;k(1bAvMBc##EG~km zaGnn0@b%Xm%{sb6UJF|0|?dbN1JvMb86RGY6 z60LMTwQ-}Tzp5Kk)<#3Ui`eVWpWDnw(tVAbKJ@J>6*C z79tIGD%Z&R6S>rBtsZ0@1+w(Ni=|cqo?`#p!-|u=@Po}h#zl@)9imRkpQVkG+?!+u zP7CwboagQ~8?PcfP{X)KEeb*{;%BwOf}`@ENQaI;TcVvvUBjoz(!MeDlJ3LOfRHi4-*7T`I7<))(yVMXx-%RpE@CcQ+CcHV1pS;VNd zNAPb9uZ`$3Ced9d5>(S3o?_rL92NbUMV%tmzUr~e;rH7Yfl#CYaF_1Um}g9{ChnQY zFWqWUW4j{2_@AAekC1Nt({wEj$<{UF;EMPPOxzHI6|l3(Fl=j z!u5&UNg8Wh8@iF2`Yb!jFZ<+SSYNZ&QZC;Lg-PY@AU862hI^B%}chN-wIgA6>-z!TU#P!4|Js(v7jn+`v^ zV##|HWql&Ea9`c+;E+^sb?f}yp2tWxLko-o@C_0?@b@FwA}H#W{9HSan5i*~z3r05qSELSI*WG(y+-yN0b4^(qta zn&aRo_j)krmDHk1>Draz6n-T`_xzQa?~E?fF~f#z(ifi+J1N<+0y&dKGmT?y{-ZH1 zE=CW7ubC?UKJQ|kG1VwP7R5jN1?$H0tndh zC0p;TO>cg=?ez(z&lN_o4@nESq{~{^r~9B41!15bP<2uu@z`1QHr@PRV+4C{Uptz4 zMtuePR?sK!X4}|JpW)-?2p9L{4ftoeKLp9HACa2dIG{G*f4TYSKLrByWnPP%BWh{p z0won9lzWujhQ7)Vstf58{2W+=_5^K~I)f@Xo55kemhC~ZrGt*HSw(zd?C^P?0p^a zkAysc8I1EI;U*)L#=gAmHWYr{Z8tZmk5H!Rekd~y6%kVU^!D_ZX<_OJgoHCnQ=b3& zn&VeUA5T10bf}Vyyccc%yT}uUiC1FP91KisFP)npOHgnM&tIEw$?CrXY30%wgI*9h z+*)bUz3@=5R_6Dh=jH`N>jcR5Q%7DZUw2dar}wc$4*?<)ftLcqa;opX7~1%71(}KQ zeSwk44_jGyG`4t*%y|GAx@ofdW{{RA@suV{&2zh7VkhG^CMHB)ctu;K?|c%kf6kd= z&4WL+s()NJ+GlA?XtHL{!u-?wt)HwHf4{s8X1JqG2=hK@MVRutGa!Q95c;rqcf34a zz-ZVqK36#84ZB9^UAmIMV2&ex3siqElmgF;Mr0^rvVW#h=3>!{CY_*Efz^iC$M+JI z7uNZ!LLM*|%2oQ=5RGk>-vOE|IB9pAR78j3?Phz~t6jBBv$_nc-n^m20=y6N#&#QF z?V3Kp2lH+&=~lEiDnA92ymFO{q1G5H2Ly6G`EUE~(n;ibkw?*^Ulkcu?~KHg-=XwR zB{%`-p5+u*<4ff7Mz1Ava-!bCOAj30t%=xpecq~``GI~Kpdq*xRrd|>z^c0Yk|QPH zT&u)ayme^j)?;~|LIA%hxc(9Qw4PH}JIH91dBw!~HjS4b88^{X;lEvaeA$62L_ceE zLK$b5A|*1(dJ9ZCg<_d5?>?TRXl`%ty2`lZA0;eAC1F4^)N(Q7-c?tTf+xC})6lq0lET#x&BzH9xMIIS1)p;MKyLxKKxE zlO6ug#7Pl;`L$I355deJ%5n-DymNvODN!Z)hW}nI@%6q&$MrCa$e>++D1%KK!Lbr|>XCGGj@_A-H~$u!YjC|zypeN2M92HrnPI=7 zGgpHhnKW(uHnK^jr3#ma$+pgpIol+AFj$F=4#(IwcKzx5fHBwy+9xcGd=si%i5AfM zSI z^C=-w`X+I{Ul&zFh{Irxmz{C0%Y_FqAwue5_*ZqZ4C$F6Z<;3D@{)FqY9{W*?`$mB zT)734D87Ci!}4w36{>}tb%JN2)cp-sh6C|zC3f{#FKh_>STH_Ky{@)7+;hgtX{Ym+ z{JVFt2DaN!&oT4&%vscZ3f?O^Jy6_JBnLd?DOxCxn-he2n^hhieQ*O9V7Xy0&2WyZ3Xpy?R&8$xy6wvfd48(RP;kMzPoA#S9d5;!vMAMVDi^W9 zZxTz({~5#rf6d`BJx#(v;{8(yWtX}n=S2PY#7F%A06!iXSRm1E*n~~awmWy7fd|a8 zedWE~^o;(?tczH4G}(|T52yREx2MDPUC1|~eN1=!{91&Okk#C1jv2swGH%6-MWx)PGo3f$q;YRTvf#cm`4Q*97PJDuSzoJM4W| zK|O<%FKGAi;FadkvT{cnG^dmiSAf`}I@bo#K_T~YB5C)JEv>n+B6ZZvIcPHD#)ho>x8Dz^Q z$hQcJy@Gy7zL#Q3sQa}Xl^#9+|6Eg5Sh-1|l*RfWS=y7b;RH*OV`4`OQBN?+u;EdoKU z?i5QW90iYXU_7l!(RP*oVS%>Kv*`|Fk}y;Z%eE{i^u)$ZP;|${Wbx;t5}LyKJ#yy; z|5{P%A8Kk34trm(Ft^>^t$^RK;N%Ec?lphI6PFcAY(U`xd4EH|D_*D74d7=G;LUJF z&a7~7w};rAW+1jmJ?>tJ^_-_3acF zY8ejBcrbo^_0`}Qe7N5N#cLyzOOYl3AXLP6?K!6Y@&nL^|JFw42>M`+3}<-qq&|VMp;4w_T@ppN$D4 zds-TIfj+aq1hY!CT&FHV0*D{Qgp9|I<2+Qy_pBa}aauBN#rS!4nrjnyMKSQu6X({Wx2o`83%fz`$`W99iLKdsNFfd;kF$IIiP8mIBT>RVswiME@_ zX->`&MP9rp4uAuZ`H!^tl){WZ%l0lT?0M8V?>;k~ER82sgC8l~eab0~YKzBJq7VBs znQHWK7GI$%xp2vIG6U1*8jlNP0VmkU>Rr~G+566Qnp$$7eiawq^C3VOV0=*?z3pK@ zFzyD16qx=52_Ps@?F=yeu$8ZkCsGaGFz;Q1R218sYE7g<$<*k^W1}0)YS458&hiU& z*dKx#Wb%c;j+qoj@G5cnkPZ@IBm8@p+;XxMy3hJSatAZ`K8qqZD7?mnO6jMv#5QYr z$6*+f_c9AliyCq?7z3|B@KTVpAvT@b+IaF6Pge(QT(8v6(NCqQ+c{Br5fWS%xGkv;oCG#LSP8QAK@vJVa7 zQTR_s3f1!NB7xZoG`7^e_%6f~Qp$>jbwP${9rWG1Dqf5`Oa`K$d$p9C9{{IPIdLaR zo<}acTYcKy`%*8l%wf6a^N>4tG)=JeGFhU&NC)97gORp}0JvX=8UB8?%SFwtR9M&2 zR82v_qRx9x@8^XPw<^`$Wa)(0`u7tlh*$~mGdQE7T_i1zDN6?!8G3Xz)%OA+w-$8u z10%`ES)jji_b8bCIR?=bS33|b37UglQ?fE=Y)ih3bcYg{*(!=n0ZJ$g09Rw4H47D# zY#TRqJASog>LM%MsA&wkMmPFN=kVHthIJPih2%bH5SSrR0I*i@Lu!~(f!Fkne29C~D{m`U|7&gXvC6(M^;5=^ zJ|^Eq{-cC?0P?}g$3FTWB(sXSt0X5odL#WS6eer`@%fIy3UXXlh&z^w$@y@siAKak zC;}LdJ{^@eDuuT#Zg>j0S7aNm`Hb>G56W?y9Ha~jgyD(&>4uH>xF_aojN7&Ay#(Wc znZzrXAVA9f2d(x$fnfhXYq%Ff67m|Q&AR(&@>Ofz4)facUQG@-7cq^hy*_E!?}#A} zrM5Bgi_LK%p=?X74{WJ-z5V0xo&ArfCGzeY+b%Bp_=yYBb$6#KQyn{zbTkPD7VT&|e9pGHOB{gye&h1CXGNxD|Vsaoq{= zt(FzJSy5q{eHOCVct`Qa3&2_Cr zHh>J^23#@>8^Wu*&hx9?R~Dr7YnmnnETUl%hWY9l%p2TlV`{lo!Lv>pES$d}_&RR7E0b1U%wkoT*e(_(%bOpp1#7lmVh_LZGH`;XBY=wRc7T`? zhxUK`0WOLX=(jPeLsUA{yKnXC;u4Q8$jk3$IPNU)sIcQZcf9jr z8DaSFcvfS5WdPgE&`_6J1osERR=>`7R3thQIfjESMgYl1;|Bk6KWZ%=A%5A4q(LYx zt=VSMiuo_21Y@5rpH0IQwTvC+>v@d68P)^lC{XpodmOE@xVQmaM?~(V% z2dteWg;N?>zR`+_{2_Sn2Q=0VnZZ}GV~V^u((Wai8lrT$9(~DEG-57PE3|u`+e7zB zrn6}+AZU~NryjXt+E+y3*}m6JaK&A7ruAvxU^1JAZ;u~RjZ`skF9-Iyka2~-m#t`E zJvnQQWG^Y(ORGBA^XfHdYO1de08+lX%-Pq|*UZC0W(>L`*J@70*=c1V^H2|{b3YT8;U z8xPNiLq}S7&6gVQ)bj?_jtqYBt8aO^&dm{XZw@sF#`SZ zFm(HhLEj-easbRE0VY{68}?p_l6sLeaNeaaknz~1f{FINbhLH}_n8yB)68I4)b&~m3T@f=8S$mXm~}7##m%c|ph;lFY3IW4sbEMlmoIr0p8tXjI3W9} zQ!PdK8JFtcYsw!F`O41zOmP2VcY4m7-7NHbH>@<@tRbF>ultw*8`2A%v*wS9ZqBc{82+8pS9W8l zAzH?rBKv**!KM&Ql{W`AvpY3-q&Sa*Tp)04Mi}-C3S3-)>I&prLDG!y-E`~m^lYCH zQNKLG+lgt;3KgLxVLs=bmcj9-D>g$oSTN*B8(p+>mkH9l9tZnOM z7DCzQGDo1vH^lARf`d?wiJXZn=z(-fo9=*y$F3g%*9J*T`KoXb0AP^DSRh0&`}3#P z-C22IaS#mr!P=pQW?!Z>Qu5TWFi) zF6(n}L-QzaT>r)Mc_sR*XG`hGRl;zri_sD}>F!zeSK>C5$dis&QX?GOxE$8D$TF!x5&AMJ8(aFXMQHThO1wSKs2yIjVZ7POx?X zBswpL5U>@pWk7C+!n^xJ<%fh<6jPXj-dVDUwB;3DZ=LwWzFZ>`0T12NA{y4I{@2Qg ze^O3A_r-x6)au;6!>*A5`uEf}yW|~`wOHDug=x&N%zm`b4cEm6azTr}D)_;vdei8r zyd1?%^x`2~#v>Wi#$l64i%9Fwm@U6Ie>2K5$10i0EBfnoQ@akWhlMr&$teFXmg#@_ zLK3br<|jY>cud~i0(EJvJ6ZdoWmH)5GJN7T$+dQG!Rfi8@7x%(n3Hn(5%+dBQ(V9C zn0q>hpt#n{%2m(Unayxf2>PMUp#~S4Z4=*FLh= z_3HmG_&7lHq%QCOVg?Royf?`x`A}eKXAtA3qm09tQUWe3qlE5r%7c1_&&m7NY#O&e zyww!><(rWRBwWApS7w9B>q8+*m5vPDnqNQpH`0I>!l+GKGLO%uAIs{K21_)`t7QG! zb(#5I(7N_Ug?L_*)0=hczFxanQ+0zRJs@y~{*{E!La-GWoq!ezG)e;jDcsd}-HBU- z*rIJByp9&;*^Jl*;@(YGr72r%yjBzYOazT@W5STcEoX*+$?%X|UrV7z%BesH0SSBO za(D9eh6;%Hr-FK4MRElN`qI9Uj-W8ZY&jxm?GpRGA~zH-IxV2cXlQ$$-{=98zhPha z1B-c5{rKCXfvkNbTtM=KI67zbB6DUHbu;C6cC4VzN{bBQ;)OfJIdC>uumml$!)nVE6_ICPRAV@XGju^-yTVeY@_ zA&M2dq5*bv$)b7cBd$hQclRH{lY3czHZ!!PPzH9h%SLr3NxW^YN>bsScj&e!4LSil zOUvya5Iifxa~7+QIYFZWZZ-8lr5S|(0<)**G|b$$zgwR4)o-1?;_7ZzMnD_59#^`u z6nG_zODHj$;cYL0C-*E0p|L42$}V+R3x&SCciafc_x&!_YP~;4D4WWBJ^Q!XyOsiw zyl7BgdnlMeqMg1y><%U{kd2}i1`^+1`6t4DUV!3 z|H4rAcg@K~3^wfV?U$@K#{ZHG5nV7%3uBdu-~Qy!ZIzz=Mw&RL($`*F>sdmdFJ+BA z9S6$^#?`rKm(e&shvZX&t&8EXU8YT3URZwQGXp~A*wM(uZ+1U$X%`GTRojbl5gnYY z=#w8;g41rR1zO_q%92rey$mHD)UYJZYrl zoq@D85Byse)y}`QqH7JA>`S+JgEofReoQ{$?a7x(Huzzq- zv?6VzX2_+oD@`0&GFFBcj+ShdG4!#M5Uhl}kqfUOdBA%@GXUh}Z}7_*j0@DZiXN&> zpl;1TyLnnLQVa1iuX65VA81JAs1hJyS6#Bf1?U(6B>RWJLWk*@@$t&##f}+Bz_SsJ z&AzgH`uXVY`?FT^{VUc>-Z^MGxE>UAG8{ac90Y#16jB%CT!xp3GoRW=5vKu``+3E= z!WnhqK9SCTdKF3uL@lG^R?A5j1+SvYAnNWgSvPnt3(Ie=FC5C>JlaAIz!i?~@H#>qowAd|MXd z5sXV_`-obJ>Ug#O*_UCatOyGxFnE4h{)fQwBDe1Cgnf+-)wQOy%lonH*YyWO{dWjN z>O`QA;rv%OtwlTPmS_;1V?#A0nNQP#<<~;rUbMEae<`1uDP3-e%1)JVclZ*lz7Bne z*Sw5D65%!J7NBr11>qOTg4iMH%OulH+&AUQxyuu~BQpT2dR4A>t_5wloQesbmq@E= zNEUeF==Cv^|HN+h7#Xr+-S>w8v<;3%Tn*YMM|&#L!R5M)Ln2D-YX>P67sp_*6xHUiyQXRCX*H4}e(I!^y@&z~`PGdg zl$?mfW;c{xwdk5l(rmmZ9jIh9SXZY7c2XYNb_Y4!&fLcI__R$5-8z(%$)53|ZlX+Q0}ToV*qJ$cDN5dI<;K%1#%afz5W&`{yq?%#hpY-+ z`r`>2<=^Fn2$l=@)rc8`Tg1zWeS|83`I99`p-<~WPHMiu>3FsTvtUr@md=yph+{Bl zxGjvOm$@nB{aprwbRd_Zhs(IUczxBM0me}GM8t$H-KcTghuFL8m6ztkOXr5~lXTxU zVo}y4Al_e-d?vHn+s1I!vBZji7WV?mVe2P!bZp+!u_11k`KnXHH&MSF6o_P=i+z@S zh|ESq@$}7I9u7%uis-zbA6Y}0+sssFK5o?EDJ~D8)`sIMtMEC zd;$AWxp{vGn&_N@V#dXDf;v$!+3)#3TMRhiA>ECyT$+BVqc4-uE?@5co&ussN ze-N%@23^rrprL^!@q^kG+Qr2r8y2VO!x*^?qnMXw)E9clp(e-vLsHN8lpLAizq7_{ zr-i$uo^}d}BI-NVh-&aldzr;R=a)_#`=pA?cXf4lEWKDNJq6zfD(TGjYj|LVBr_bye8`R68!dmwr7gs_X(A>TC(x^L zW~BBDz4IiaKM?wr|3wf{o<_~qNR+JIXGwKm4ot>9@Q;F&H)Fc-PX?_llQKWe@@3a5 z%Ku|tYiVDV>KWo+KJ5n4Ak-&Eh8ZIO5B9aAQz@#)@3C8?2B~i~CcJ9Bf)EgtBnZ@Q z^Oc$mf^sB6aAXK-=}VLFAKsFE+c&PjY^b(m6Kjdm52a1aqBgutYvb4fj9H3w+p_B6 zR!p4tCuZ%TW|>4{cIO|XT;KOZH=AOGFCJvK&Zg$r^dkW%xBI`0)c>LnE7ah^@)zJo ze+W9rZJmf5Vj zGN8P8)swk6VR z#$aj9nw%RD1yL=d0G`%?MUx)$xubWn_~A|lET~T>l2yG+I5;^&VZ#1xbE8!>rQFlU zVAzBNTY1vdPrfTml7XB?|A1(J5U-y?g1EuAKLq3eS+%i62c<)a5W;MJsP$n&k>miE ztBqZSvW1xKtohpg)D`p#ZY#^E(A!OMnN5%#N~mGYs6FM-kIEcHeV%w_P}*(XPWsR5 zp``vl2^9*7-h|_bdO&s9u)M1wuX}y&5l?C{4&@|qu9yDqg|zFvMf2U9#?Spb3@wjc z*JDLSRx^uQu49^4%6k@kA?W@9_fNH^D&1W~@H++%{hgX)d&M5)4t7#l2-cu~ao;33 zN#$Q}zXiZr;n3czn}HWp_F7#?si}MDF*|)=Z_?}1xj_L%?S*O~L<%d@i@SBNiUjgB z?0!Q(fLO%Ak#%jnZRnGr$7iX&cX*J2KVRm|LbVb|xSV^0;-v~<2DAF< z9>lXj`J=9^w5_6|Qb?gp*f%!|10SHB`yA!4U#$1|2`w#80yg9;G5e+UvUBZ0{gUyPh&niIQS9V;GSB4 zvztm4gOVd1I~mkCv}X?({U(}Q^sP95^+zN2i0H}K4*4AXpw!edT#qX9?;;mn>V}OH zJuRCz^#O8lF2n4wN5zF*#nA*r71v59D*oj%$@b&hF}9DceC?WN=fpFaxTZsa9{92v zf1hMZ|79mJ9og^lAHyF!#;&A{lw3wc!te!Rx}Oa|L5Y-*5Aa z{CK?5Go6iJU_odAYq#l)t6K zIYp(W%5b)HA&B<@P#N;3&KEq$vD0hRp=}(ILNUbyJ*p^E5z)JiVVOyv`7W1toHWl8 zG3T6AHiUm0bB61^rM2_I_U<>e>9fA(6k1s+D3b;}@Zw`lFwR+rhGte4bU23cix01C z)j+mYeDiGEx5`)=1@yr0H|6nL3zx8EXqYds7?Q)LRN}N-!G)SesU-r|A?WbvoIkQ} zQ}GKwHao|vOcr-j0wj(qLzZ?SC7pS7Y*s3tJ%_$U{`TcC_?~lSgGug&aw6oKyuln> z243{xy+kHG`uBV_)>+iC4|)uksZ@RSXQSf^?66}-cKV~Ha|1V9T(X-UDx^Sw{WEP( zF`Ii5=v)1qZrF1<`1^AuXT_u|B~tFdwb+r(3}27bGrSIkpp}|0udg<`er%UqkI!1# zfNAPEV({QS?9duT{Q)U}e~Lo_n~b{HP(CV8!-e$uHeIQFo<4nQjWIsY=>nmjFGV9k zBC05|J$aRDJ{zgGh=%}*^oL^Vi&L{!R5_0KZ97HP(DD+?+`?nzngOBXE|rP$^b zj$s*j`!b;2W`T~Rv36{)Hc@A#y2W&Ji`TIFY@^~!aQ|3T&e;-vxV^l$jm??DcQ#Ke zP1ojOi?0@#u6d$PiKdbwrBFRYTe z=Sd%j@nSP#7MKs;zz^`Q7^Y5W#1+e1ZI8~>+QOKxm+_i+{}8lS2J7IxT7DW@1^sx* zrG6K!7fhzOJaYWQO7MX)V*C$*pOe0z+Qo+TKQj`dK|pVA^3f}Da_Effep<* zJ*|I50APYUSDGEed|B~2#Rv_|$8nyr1aqs@_YD(P-@@l~YCP=6MK*spJO`XgiuwtMjyTt|>4+BTuC?M9Jsb3!ig5*=a%ZjdNQbMZ=PIkyz3GrnW3%+-asqXR z!=4yc4Xh%l+R2nFPW`aF?A0~>u~A=7evh-~R-bR~D^lYhj36oDRNWot^f7Mcq9$f$ zLoqebB@>bOjRP0i@8Wss%@q60&#!wHbR2$Q#m1HFf>_%GT0Gk6{Cm}$8=oS zy+iYo;H8_#d;4!|Qtu07kgMH%4ZUq|ZbI{8&JQg48-Aig2Txc*%u=Nl?OfZ&zrOB= zZmkO`F#66IAr5pxrh*%9j~)$d*m8eLuc}XB;ZX+JB0O+{sB#)y=5l-ZShoo#9*4xW zp44s>aKw)9bB*OktEa+Q#c$Pis>Q#nd?WegM(hI5=AOms*I^pCN6!+v`6LYxa>)fz zwqp>RbA|Sq=@*T*D4(VW+DOW6noG;f|eYKbvtXIA@1 z#+`U+)M)wBBvxZ;(bt=N5E(-zVg~mI?>`%CQSVDPJ%Cd$r^jnj_NIqKyFqj}bZXS9 zjOG@4b~j|+{D@amzIV@QEuMe07BG@!>eu4}-7(}VOfe2uoZ7y*zijFm^_%RY_ET!d zDe`}*C5u#sW+jFUI7d47>H&ASg>VoPk{sP0q{zz_6B>`x-F)6s-#C@&qUl=n%z@Xo zH0$U~+~W@)4fJn{lD<>|rJ8XBcFscgM$sr=I)qMJC7P-=XImR(W4{scDnWfxd=fJB zuvl|bqC|?CT_WVG|k5#Y;Az;sgHecm4oxI5$^&DE`mOwY7k-xiCfN&F#5V(fbqz2;_+vUan9 zjhfpJ(SMADR~~Q-*+cY%3gLaRjYR^ zNG?H=d-cm#qbz!`8{_(u@=E&W2M2SRzmbpnDF{A?etE3q*{38ifMC2#6hHLm6l|H0 zXIS;61%KdvB!Cz6^u(5m_AcFt_=U)l~ejJI6hGS7*f5|L1za4 zUa-69G4}cBY$qE%>MR=A*oBo}O_=8JHQw3%StCr)nT2aN!noKmiG44*PDvco#0S{) z+L=c<@=tJG$$sc}n>sH%dJ!I>g}%%!c4q@q zanTaCz2@q(o^5nDq5sM3g?NpDV!b0E81?SMP+x}M2`6@~#5!lytyW6G3I$ z!&%a(_qBu7XVX;D$CAbC7Q~mr=;l`#irL`W3t5B)&YCK1HNu{ELt0+PF}EaxbIP8D zLS+8C0EtvsKHFpL`p3-&Y}cI#QBY#A?NV4NhPIkq(>N!ri< zE{{8o9HNMi5oY6Zd>GYlbFFE3CSvuf*>?Gm0)U+TrDV*^W`;?m@t5yY+HG7Iei|+` zQMINld6#CP)F~;J9xOn^C1|L~fOEy@FQKIRquvP9gToZ>!Sw;Q#6xY$($?0z9|h0i z)vAKWUZs-hjhwxBIxsFoXwBaW(ORJnu?EDeC%Ebtz_Ym+GDI4L=kj%PJF6*3k}I!S z)aLnc1eyI*$)c+H=s_|I#gpadq$PGsEG?!m%&Bf2U|h;%gtTmD+i_B~T${Zbd{qYm z7-Y8jhLeI;GjT731G=`Xs-Gz|vyO7ztZK(z| z|13(5W0*0@{b5`CskoYg-Q`MRx{Y*W^~6^aVV0~czBH6-z6o}%CkF5yM+sV?hfM)_*y4I9Z=yI5u7I!4xw z$mHtSDRUyxYNBH%liq}n1Q2N=Ac!D@A|N${9(qSWdQ*_zn-U_u_ogBp0qF@U(i2LIQoN&kyU#iI zf9|>u_vJp!n#trBvKW~8wolQ83*dHqX8YCyGliV&T+_5AlU4PO5-f#~MYc>fNdOE>%Hvjs9|L0B1>;P>>9k#|dI_LdDw7 zAr)2aBc1Ybz%+yCVXvp@Q-HcE$Ghek482w5gf;KCBQi<*KF#Y~gJ10I`JTg3=Rass zZHc!2g#-pzRs>m+kEaY&xTHg-R_pbnlpR+una!^(jTGWbZsqI-Fm^f|tZX*h63NT< zGtY;2O2|B-Q3Gj4oR9wmH8LdzT}PLm<%B|8Om5?2?GBt4=E%$Oar4qMEzx%ct1H4r z!pJ=iT0dG9lUwRwBiAbWkx5+)Ze&3kQ?utE*+!ePLUeMphnKTgtPeHTXWRpBSf{FR zHmip?h$V$Oip`_9M1;_}HvvUQT~40HIhQq`50WqD6pV3v%U}3!$k2k;H@LimH!%BX zw{WoFS8;rL59^=PaG? z3B}#nJVIXbb5pZu)5wC^D{m%T=lWV`j5s^X$aD}bsvPG)Alfq1OwD;6ORDS@K}z}z z2UHa&8r#ZD$CM^Lp>>TNW}kNx;@$kw@r6{873~!1bV9D3&q1lW>`Zoo*4Ou03QR2lob4tyJerzNt-d-_|M=er-iz?sgfz>zJ1^v?;`nZYGv_J=| zWFb_3??M>`h6u^WZXg=)qe6?kUr7`RpLR2F%A(b5-+7Ngf$-yWx4 za!h25p}+93@xn)wl;c~}2kZ$BMGRl94-LoF#BsS3xL7f`+3dnHY_9W|HtyO>#RH%@ z^;hRhJo_(tGa*Z9&u>Ou!li%Y=YLTK)u!SJHq0nvk`SlX2rFn?f{Z)`3f$`&ACnxO zTd?tV+)|!P{eG$?6o7lu;*o~fkow}SHi7wucFKas9jgc9?MV;kCEDD#!Bo{ zQVd2fudR%r8WDD|wr__^a3E>=O@F=s+{V;^bmjlFB-uDM0Jp*lS4L4SwyiT$5|5JZ zKe6YCeX~2Aa&yT<6@bCa(e(#V?zP|!EY6ao)89UEO~uYrZ|s^GcFWhbvkKuYVV>Kn zwJlhYHnXj|+mr(yDesUwnp~E8@{f;eo%yUQ7Mf8(WNXL^^U|4Xd4&2C z!YlexsMif~v(o9zE5>~HARvk#9u{`=1n;-cDKX7)NJ*I5K!7=G;&2S|;(7idw-?N( zax%7LT$6N%U^ic=bWyK3?1tnjIX+PHL!(9D-RZTanZ}{0{XN4Q^%hbcHrEnrU0>$=a_Uk+BF$4)D$g&6J2MY^SqsNxeN}feX!p_}2z~-#hpwgg(?pE9*1}7GN z?P8sBIijYT?=1(^4s97-LUl+@wG-~*sMAB$c%p1IN#ItaAPZG2v-A}ufe%(v1d@T%dSp* zp`z=W+O{5EQn|F2eIk37l1@A%?f^;R-ZB+6%d4I*RS#D*D@`G*x2tQHH0rKBdJyK3 zLaG>sMkkv+v#B$ry?{Lky z*&h=>`1y3Ub>dCj)aS!=T)a8+yo?-yPwuBG#knQ#C-z~=;Bx%_iPrhJyj>eGM5E-C zpG=8L9{@8ZLx&<2%Gw%JqF9b^MV@7UD~Jwltl0U6bt-Pe#3Z^<72SCAy4}kmfEliK zu}4!_A!__HAkf*=1p{)eE9YaOENC~p{wa0EvPIoKmm^=%Jb0JRkr?<_E!r;=iNEi54M+4|m-1;85NE@B;<)gC7ypvvsz=z~&e4U~<2D zhsJSIW1qi_ez#>T<~&T2@WOgb>&O!rB^;f{o%UJ*yr13&k|(jo-%xYmjaun!cbRI! zTX@&sx2Y}S!zxShz`Ww(y_Up<)wR{gogc76xbls2XyEuJV4LJ^@`bMxP&{`V7$-E} z;-U`XA%FD7Mkl9=XZ)T~Y|0wEKbSIrNVz_A*J54Be-|utKJm@i$3*b*ZjeYR#0gp7 z!sN>PTu-5rWNs=9Jc#uj2qnN1_iY$qkxzvs6(Fi@n(eJg9G$}yJ)e?PwxH<5K-_lD za6rP!<+HR7lB%HlADWq?5w+DFO0H)zBmUPcwqi0!iB-6zJuCpJMCC`xAN%{|C$Ji= z#pZtN7AtkYJe+QM^ws;v=GHj9A(17jpss!foCqQhk=WtmbFZx9G6k207DmZ}o9mh)G;K2Cab(Dj?S z$ScQqp9G8c&BKyb06k`2uAO2~35KB-V19uL34oaWYYOns_KRE*QwDNp1pW;rg;v=u z{Vwo5+cKshk7cgdYf7P#2{`RP=1{FU67h0}f;rNy3bf+3NIqCU)#g>m9D6u^%cMr( z{J}I~b{5BrH-mQ+Q-K-Thi@Mp2Y>1H{gLkYT>}4GjQi(xsnT`FLTd1&VsPPhzR-t` zE060CxFq_~R?=H+Clys2^A1hw0U+j@Q2h@b3h-B}P7Ck>T4(7T_4kfO@3L43u;UvR zl#B}E@7TA~MCC=e%FiSN3xO|^?fV;VLH%?3A3clT_~~Cm2j1#YE92=S5$Sc45B!io z1tSR^9*0XMT_AyjFAdwu2Gcu@P&w~24WibjygP5%BR%Ew3*+45Jk1v=A~k2d$7wcG zpsZ4T%VrkW{66U=RQv=XQ_Xs8>W<D;>=N|tnib)^S#|bMGwq01r8fH%Y1b%>;-V$JP5)R6#bYDh+c{nE z?_BHf@n{}ATdAMrPmom;Mj$GPBe;Cj&c6sRV->Nl>z!vETV0X$+~#>g&fORf?$=jF zXjGKV_T6AdC;o0?d|D!fnrWtw-D6p~M{bI*U1Lx4yU>w?9v>ptkHY0Mw8Y#E4$x=V zZZcyRUmT~m(ilqdPpu%Y?U_@dbp)?dh8b}@(vPn1wNp1$gB3A;#ISw38nRnw1}+xa zD`^o8lL&s!m+_$Yq`>df8sTv>N?<6N?DWwT=b@(dQK#W#S<*MHZZgIq$BA*ib`~4W z(B+0y*(8-avMeN(oTi26a{vwn-u)CThB29MB&}8y@XSzqn6v=RVOt!0(;B^8sL6-O zbxBDf-U;&*dUBS1%3}w#|3gIZ@z5ft74m6CC*MFAYH^fWKSuXMW`Bg0C{x;+sFzp$ zSiu_CgOsq6tUF{csC5E&6WSsg!gL7E6u_=2s z`CQ6xSSMd7Pa1m0qaU@N$6h^aTrFzrSmH}wyJVfr`ze%+fjU9BrcrrO2hFjZ7ZWQ* z>e9hfs4C>=bD*F`*ExC=CrZ8qiKZwKBt{bl*oP^VTP@!26$7wNe&csAzOl!Y)I$q- z<(U;0!?rZ0_8sn0+@m)$GSrIKe%-~o~wGCZP&a| z5S##&44=61NU@2RhV;9h$6$zh(DkNNFwyzQH%e=?BO!iH_3UhU>upKXc6|C%*x-mn z#yQ=m8o3RnkhwGD?aWn%bC!o6OLRrLBG*Tnjab}-9nqJ=m+IfWR2l^Z8gVspMT&OZ z4_t%lQ{mIxE<53BSC$@%J{Kt9=y*Ru|Adx!?wZO*vlOy2WFnh7I*1M>#*9DdUs#R) zjCC#Ie9o97lGWDL-1(f(J4p*hQQiAQz$pRj*+G#TBD-t~AZb9MedH+ERS5EF_FPnh zPVD*H@|F0JN%>OgJ-6E!Z7=Q&^2rUH2R!XVVw3#XM;+MXm# zCrZM7eVhnYI~^o|?{>gK?qLU`GSb2MU1W1Ll1$m!JirW8WJ->r)`-;i%t)gdW!oS^s`Zjcm5ExyM*()NBurIOhNcv^#~Y`@VydS~Qbb(#5(CIyXcJwc zm7Ni+WWUG`QVM&;kaHOzE&R*Q^bZa3&&l8BynoD2|Kr7W#cpv$I1+JEP8f64jB3@Nz9H;0h4#H_(qGHub*Qr+pIuhWzY z!|s&3_i;l!k`?^6H)q_ze89-S*;GpZsX*TXGWxz=!QCcKI>?I}iV0^05BItGi+9!Q z>s{BUc_Ir+9SftrJ3b5W&SZh<#OT;?Doxf3xXr0;W@HgavHrU`F;Zco zB<2G0jX8dLU#Ma@5B%+Pk=O<`fd~tEQ!0d=dT<68k@aUcL=W>5HxM?TV>BoLW z^WQO4`R9KTiK;%+8=^Gq+t6)Yy3!Vl3NC#GOZCaU{6-dW32N{q>~jzYisNRlJOwA` zl$mC8SUd6aW;xNpSb^{v9LU7foN_o4$&X!bj-NJdiJK+&d9t~EUNqwHMRC1bS=5u5 zbbnDDPBezqyjnk;*h8Z=emAKEeB9}?_{Fn5pxZE8*g#zd{z!YRyJ5d?H*{UIr+_g? z6w|rfnN)#hz7lbLFP_wPQPERDy63%noEFH_T|z!t6psRg#OweUi7uckfx^ezYzKq$ zc>EXS`=VTGP_1%)$>ZybOkTHoed z$WeV4DFQuWizt?{33)g|LvG7SCbr{L?hKZ~hLlwMAr0Fw-3jM!vNQ5{4@SJa9GtmE zrYRS@@ZO*Od2NYQ6!rzDcKS>fXYP^oxcW&5r2)d^U`tQiPDy{6n-klao56KF1TX`;o*ovo<6 zOH*$4mM)oYOVqLu-)a^k*WpQM)1{;i+$(r385u;{nO@u<_)nb)f1YZxqrs zKA+gcUbWP>u}foYa=%*}aR7s-X|VZ&Xb6r&pN7`QpFYIym7%Sep;M~GmYdtf9N_no zp4z3gbW4kkJwd~`*1q^iW{QcS)K}%^1y#m*DqIwJeVlwfSRDI#bs&CO8GXq?9yJm7>(@HjYba0+=F64y3&a}LOsrG5D~y_~X~x5oqeIy6VpaGWT}_qRT8OTd zX)9afB3|WSg?TA4#eb4EZ9F60NwDyyf8qB~zi0T_>?4lx`l-n7k4TG2S7-!gI2yjoWHBd2sbijQ*f8_iRAhI_8g|e1`~5H6 z6g09RcJEPdR4ICCT}Y}q%i!+5%BFrfLcaCMuY_6k@5kG(GWFlL-;cXL&%S?u& z4Q1ap$Eh{4>V1^sdhalEKS)UVshgslwHG?ayWvAVx9io!$g5oegz1Y&focA-l1ap< zae{M~QD(c{<5dWN@A4`Gs*Ge=0DU;h^jA%h@LTRm;#vz3vr+-}s68;|FS(k426|p4 zSL4GBWz>=y8aKKxOL1{HEm(APT>u32#mwNeyt@sgtxKxHB}xi2tq)hpW8lt$9!^&6 zb>Hih3C-~53maxYIk$2^-je^dF*&W!CGxe4;7Pz4bmAp*&}iIai)tfAmaqB-c%u*M z>p~}Yl6-U~O@DW zCH&-Q@##aGsLnvOiB;X!_VdN(C3LsiOJbNmkDrnYOk4;w3Dj;dj%$>jekOTmvGe3v z*%JEHcU@MIys)d?!$InRr`X?}qWQf?`aHo>KAuC@WeMs;9Le8_^M9NuGCKV1Rn`ll zB^t4B<97pQS1yV;u&6y3;0WlR(Bxa|X6Rqnr-JxJlWV(V1oyvt0a}ML?9Q;eLlycs z_}Ddx%PRn|UcSDY1(w$pt=20Q`9h24bt;xtnwq_E@EiOnrn~hgUei^eA13|{ z4zgb|va9qq4>n=&?IqpZGq7WWj03{^xl**<=uYjEe*BBSxd@AQg9KFW-C} z8Wh9wgKHx@z8@?fIgkw))(uuHElS4-4o$s#kz_FtcJE}JXXeqjnjMh5;o5_D-itY( zS7AV$y^-E7%ZB9Wg|4^j6H4cKPc1{T2H)r}iCL0|u%D#rVUdYz7%QArp0!u-S%qiQ z`p#zi$T(K!h(lj$#qbfUdzJ1Tkzw_=uJyZLIv{9COhJrWkQ!fgbG&`d`+Es*mcoZ! zC_d%)&>4GMct{~GOj{-`JY?Lvn5%Xb{ovh(lhwZQE;B=cq#O+9)}3jiN8J-57e5>z znLQv6AIs&*TRYe@fzrPC6p-X`{ASnSYY0Dr7v2<>9X@$5=~vjzVA|^)0;c!5y7$Cq%lakwJz6lJml$- z5A7(98$&qhEsf!fztde`0&d^xus?vD|I_|2L%+XKJO6Ewo=^lnvchlLXd>k8nuP`c z%0D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 CNT}ri literal 0 HcmV?d00001