Tendis实现
Tendis冷热混合存储方案
技术实现原理
采用异步写回方案同步redis中的数据到后端tendisPlus(基于rocksdb)组件。通过订阅redis的aof日志将数据通过kafka异步写到后端tendisPlus
缓存中保存全量key,数据淘汰到tendisPlus仅仅驱逐value,key还在reidis中。当某个key过期时,redis中触发淘汰,会在aof日志中有一条del记录,通过这条记录删除tendisPlus中的值。设置value-eviction-time值为7,表示7天未访问,会被驱逐到tendisPlus中。
读数据
从 Redis 读取数据 。
如果命中,那么就将数据返回给应用程序。
如果redis中key不存在,则返回数据不存在
如果未命中(key存在但数据已落地),阻塞当前客户端, Redis 负责将 Key 从 Tendisplus 中恢复,然后返回给用户。
写数据
写入 Redis 缓存,成功后返回。
后台异步回刷,将数据持久化到后端 Tendisplus。
监听写入速度,和redis落地和redis差距很大,则阻塞写
潜在常见问题
...
vllm源码剖析三:调度器剖析
vLLM v1 调度器深度剖析
目录
调度器概述
Continuous Batching 深度解析
核心数据结构
调度策略与请求队列
调度流程详解
调度器与 Model Runner 的协作
KV Cache 内存管理
抢占机制
特殊场景处理
关键配置参数
源码导读
1. 调度器概述
1.1 什么是调度器?
vLLM 的调度器(Scheduler)是整个推理引擎的"大脑",负责决定在每一次前向计算(forward pass)中:
哪些请求应该被处理
每个请求处理多少 token
如何分配 GPU 内存(KV Cache)
1.2 Continuous Batching 核心思想
vLLM 采用 Continuous Batching(连续批处理) 策略,其核心思想是:
12345传统批处理: [Req1 完成] -> [Req2 完成] -> [Req3 完成] ↓ 等待 ↓ ↓ 等待 ↓Continuous Batching: [Req1, Req2, Req3] 同时处理 ...
vllm源码剖析二:整体架构与调用链深度剖析
vLLM 核心架构与调用链深度剖析
一、整体架构概览
graph TB
subgraph Frontend["前端层 (Frontend)"]
API[API Server]
AsyncLLM[AsyncLLM]
end
subgraph Client["客户端层 (Client)"]
EngineCoreClient[EngineCoreClient]
MPClient[MPClient/AsyncMPClient]
end
subgraph EngineLayer["引擎核心层 (EngineCore)"]
EngineCore[EngineCore]
EngineCoreProc[EngineCoreProc]
InputProcessor[InputProcessor]
OutputProcessor[OutputProcessor]
end
subgraph Sch ...
vllm源码剖析一:启动流程分析
一、启动分析
使用vllm可以通过CLI命令行工具使用,也可以在代码中调用。
CLI启动链路分析
当使用如下命令行启动vllm
1vllm serve Qwen/Qwen3-1.7B --dtype=half
会构造出一个服务来提供请求。具体函数入口可以在pyproject.toml中看到:
12345[project.scripts]vllm = "vllm.entrypoints.cli:main"[tool.pipx]apps = ["vllm"]
1. CLI入口分析
根据toml的命令可知,命令行工具的入口文件为:vllm/entrypoints/cli/main.py,其中主要逻辑是根据请求的参数不同,调用不同模块:
1234567891011121314151617181920# 命令模块列表CMD_MODULES = [ vllm.entrypoints.cli.openai, # chat/complete命令 vllm.entrypoints.cli.serve, # serve命令 vl ...
传统推荐算法-FM
一、FM算法
什么是FM:FM(factor Machine,因子分解机)算法是一种基于矩阵分解的机器学习算法,是由Konstanz大学Steffen Rendle(现任职于Google)于2010年最早提出的,旨在解决稀疏数据下的特征组合问题
背景
什么是稀疏性
假设一个广告分类的问题,根据用户和广告位相关的特征,预测用户是否点击了广告。源数据如下:
Clicked
Country
Day
Ad_type
1
USA
26/11/15
Movie
0
China
1/7/14
Game
1
China
19/2/15
Game
“Clicked?“是label,Country、Day、Ad_type是特征。由于三种特征都是categorical类型的,需要经过独热编码(One-Hot Encoding)转换成数值型特征。
Clicked?
Country=USA
Country=China
Day=26/11/15
Day=1/7/14
Day=19/2/15
Ad_type=Movie
Ad_type=Game
1
1
0
1
0
0
...
dify使用
一、dify基础介绍
Dify 是一款开源的大语言模型(LLM)应用开发平台,使开发者可以快速搭建生产级的生成式 AI 应用。Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的工作流,并同时提供了一套易用的界面和 API。相教于使用langchain这种工具库去开发AI应用,Dify 提供了更接近生产需要的完整方案,可以为开发者节省许多重复造轮子的时间,使其可以专注在创新和业务需求上。
二、dify部署
dify本身就是按照微服务架构设计的,将各个模块通过http进行调用。所以可以单机通过docker compose将多个微服务docker组合进行部署,也可以直接在k8s集群中进行部署。以下通过一次推理分析整个流程:
用户访问暴露的api端口(80)进行访问
首先进入api服务,api服务首先拉去工作流信息、用户信息、聊天日志,这些都存在postgreSql里面。然后启动对应工作流。工作流中遍历各个节点
当节点是llm节点。由于llm是通过插件引入的,所以会通过http调 ...
大模型ReAct-基于langchain框架
大模型ReAct-基于langchain框架
ReAct智能体出自于paper “ReAct: Synergizing Reasoning and Acting in Language Models”
ReAct 是一个将推理和行为与 LLMs 相结合通用的范例。ReAct 提示 LLMs 为任务生成口头推理轨迹和操作。这使得系统执行动态推理来创建、维护和调整操作计划,同时还支持与外部环境(例如,Wikipedia)的交互,以将额外信息合并到推理中。其核心逻辑在于推理+执行,分为如下三个步骤:Thought、Action、Observation。
Thought:由LLM模型生成,要求模型执行之前必须先进行思考。让模型自己规划需要执行什么行为来完成任务
Action:Act是指LLM判断本次需要执行的具体行为。Act一般由两部分组成:行为和对象。用编程的说法就是API名称和对应的入参。LLM模型最大的优势是,可以根据Thought的判断,选择需要使用的API并生成需要填入API的参数。从而保证了ReAct框架在执行层面的可行性。
Observation:LLM框架对于外界输入的获取。 ...
大模型ReAct-基于llamaIndex框架
大模型ReAct-基于llamaIndex框架
llamaIndex的react的系统提示词如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556react_system_header_str = """\You are designed to help with a variety of tasks, from answering questions \ to providing summaries to other types of analyses.## ToolsYou have access to a wide variety of tools. You are responsible for usingthe tools in any sequence you deem appropriate to complete the task at hand.This may requir ...
mcp协议使用
一、mcp介绍
mcp结构图如下:
二、安装mcp
mcp python sdk:https://github.com/modelcontextprotocol/python-sdk
安装uv包管理工具
12# 全局安装uv包管理工具pip install uv
安装sdk:
12345uv add "mcp[cli]" httpx# 或者pip install "mcp[cli]"# 或者uv pip "mcp[cli]" httpx
三、创建mcp服务
mcp server可以有本地的通过stdio来和client交互的server端,也有远程通过http sse协议和client交互的server端
3.1 创建mcp本地server
创建一个本地server,通过标准输入输出(stdio)和mcp client进行通信
3.1.1 创建项目
12345678910uv init mcpstdioserver # 初始化项目cd mcpstdioserver# 创建并激活虚拟环境uv venvsource .venv ...
vllm使用教程-基于qwen模型
环境搭建
创建vllm,最好单独搭建一个vllm的环境
1234conda create -n vllm python=3.12 -yconda activate vllmpip install vllmpip show vllm # 0.8.5.post1
命令行启动vllm
qwen3开源包括两款MoE模型:Qwen3-235B-A22B(2350多亿总参数、 220多亿激活参数),以及Qwen3-30B-A3B(300亿总参数、30亿激活参数);
以及六个Dense模型:Qwen3-32B、Qwen3-14B、Qwen3-8B、Qwen3-4B、Qwen3-1.7B和Qwen3-0.6B。
首先尝试在T4显卡(15G显存,80G内存)启动dense稠密向量的qwen3-4b模型,由于T4不支持bf16,所以需要修改为float16格式(--dtype=half)
1vllm serve Qwen/Qwen3-4B --dtype=half
发现跑不起来,显存太少,修改了--gpu-memory-utilization=0.95 --max-model-len=16384依然无法跑 ...

