矩阵链乘法问题
问题描述在科学计算中,我们经常需要计算多个矩阵的乘积。由于矩阵乘法满足结合律,而各个矩阵的规模可能差异很大,通过改变乘法的计算顺序(即添加括号),对实际的计算量会有显著的影响。 对于矩阵 $A \in \mathbb{R}^{r \times s}, B \in \mathbb{R}^{s \times t}$,计算乘积 $A B \in \mathbb{R}^{r \times t}$ 的每一项都需要 $s$ 次乘法,因此乘法计算量为 $r s t$。 例如计算 $A B C$,A 的尺寸为 500×2,B 的尺寸为 2×500,C 的尺寸为 500×2,下面两种运算顺序的乘法运算量有巨大差异: $(A B) C$ 的运算量为 $O(500\times 2 \times 500) + O(500 \times 500 \times 2)$; $A (B C)$ 的运算量为 $O(2\times 500 \times 2) + O(500 \times 2 \times 2)$。 我们希望使用最优的一种做法来加速计算,这就是矩阵链乘法(Matrix-chain multipl...
LLM 学习笔记——大模型的训练流程
Some content in this article was created with AI assistance. Please verify as needed.这份笔记关注大模型是怎样训练和部署出来的。 这里我们以 decoder-only 自回归语言模型 为主,也就是 GPT、LLaMA、Qwen 这一类的主流路线,描述一个典型现代大语言模型的训练周期。从随机初始化权重开始,到最终变成可聊天、可编程、可工具调用的模型。 训练过程大致分成两段: 预训练:让模型形成能力上限。 后训练与部署:让模型更像一个可用产品。 一个更详细的流程如下: flowchart TD; A[随机初始化] B[分词器] C[预训练(得到 Base Model)] D[监督微调(SFT)] E[偏好学习] F[安全对齐] G[专项能力训练] H[评测 / 蒸馏 / 压缩 / 量化] I[部署] A --> B --> C --> D --> E --> F --> G --&...
LLM 学习笔记——理论基础
Some content in this article was created with AI assistance. Please verify as needed.这份笔记关注大模型的理论基础。 毫无疑问的是,在大模型领域,实践是远远走在理论前面的,但是基础理论的缺乏并不是致命的阻碍。一个历史上的例子是:“在蒸汽机已经大规模应用的年代,热力学的重要定理一条都还没搞出来,工程师完全凭借的是经验或错误的热质说。等到这些热力学定理终于写出来时,蒸汽机已经跑了几十年甚至上百年。” 为什么大语言模型能够成功近年来,大语言模型(Large Language Models, LLM)在自然语言处理领域取得了显著进展。相比早期的机器学习方法,大语言模型能够在统一模型框架下完成多种语言任务,并在多个基准测试中取得较好的性能。 这种成功通常被认为是多个因素共同作用的结果,包括: Transformer 架构提供了可扩展的序列建模方式。 预训练语言模型范式让模型可以先学通用能力,再适配具体任务。 海量文本和代码数据提供了足够丰富的训练数据。 自监督学习让数据规模可以大到互联网级别。 ...
Vibe coding 网页归档
记录一下通过 Vibe coding 实现的简单网页,包括一些简单的数值模拟、小工具和经典小游戏。 三体数值模拟👉 three-body.html Euler 方程组 Riemann 问题精确解演示👉 euler-exact-riemman-solver.html 数值微分公式快速计算👉 fd-coefficients.html 图片低秩压缩演示👉 lowrank-image-compression.html 绘图配色方案选择器👉 color-manager-browser.html 贪吃蛇👉 snake.html 扫雷👉 minesweeper.html 更新:给扫雷加上了基于已知信息进行的辅助提示,终于可以无脑玩了。 👉 minesweeper-assist.html 华容道👉 huarongdao.html 日历👉 calendar.html 日历打印辅助工具👉 calendar-paper-maker.html 课程表👉 schedule.html 时钟👉 clock.html
LLM 代码练习——MCP demo
两个文件,对应一个 MCP server 和一个调用者(需要第三方依赖 httpx),用于展示 MCP 的基本原理。 mcp-server.py123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126import sysimport jsonimport subprocess# --- 安全白名单配置 ---# 仅允许执行以下键对应的命令SAFE_WHITELIST = {"list_files": "dir", "who_am_i":...
LLM 代码练习——API 代理
一个单文件的 OpenAI 兼容 API 代理脚本,用来转发请求到上游服务,并记录请求与响应日志,可以用来测试大模型服务。 flowchart LR; A[OpenAI 兼容客户端] -->|HTTP 请求| B[llm-proxy] B -->|转发请求| C[上游大模型服务] C -->|返回响应| B B -->|返回响应| A B -.->|记录请求与响应| D[日志文件] 用法直接运行: 1uv run llm-proxy.py --upstream-base-url https://your-upstream.example.com/v1 常用参数: --upstream-base-url:上游服务地址 --host:监听地址,默认 127.0.0.1 --port:监听端口,默认 8000 --log-dir:日志目录,默认 ./logs --upstream-timeout:上游请求超时,默认 300 llm_proxy.py 头部已内联声明依赖,uv run 会自动处理单脚本的依赖:提...
Python 运行时、环境和虚拟环境
Python 运行时Python 运行时指的是 使 Python 程序能够执行的一组核心文件。从结构上看,主要包含三部分: 解释器(interpreter) Python 标准库(standard library) 内建模块(built-in modules) 扩展模块(extension modules) 第三方库(如 numpy、requests)通常安装在 site-packages 中,不属于 Python 自带运行时,但在执行视角下可以视为运行时的一部分。 抽象结构: 123456Python Runtime│├─ interpreter├─ standard library├─ built-in modules└─ extension modules Python 运行时的目录结构在 Linux / macOS 的典型结构如下: 1234567891011121314151617181920python-3.12/├── bin/│ └── python3.12│├── lib/│ └── python3.12/│ ├── os.p...
实用 Shell 工具
整理一些优化 shell 使用体验的小工具。 starshipGithub: starship starship 是跨平台支持不同 shell 的命令行主题配置工具。 安装配置: 在 Windows 可以使用 winget 安装 1winget install --id Starship.Starship 在 Linux 可以使用下面的命令进行全局安装 1curl -sS https://starship.rs/install.sh | sh 也可以直接在 Github Release 手动下载预编译版本(使用 rust 编写,解压出来就是单文件),存放在 ~/.local/bin 即可。 需要在每一个 shell 的启动配置文件中都加入对应的配置 ~/.bashrc1eval "$(starship init bash)" ~/.config/fish/config.fish1starship init fish | source $profile1Invoke-Expression (&starship init powershell) ...
Python uv 使用笔记
uv 是一个用 Rust 编写的极速 Python 包安装器和解析器,由 Astral 团队开发(也是 Ruff 的作者)。它旨在替代传统的 pip + venv + pip-tools 组合,同时提供类似 pipx 的全局工具管理功能。 uv 提供与 pip 高度兼容的接口,但不是 pip 的等价实现,通过底层优化实现了数倍到数十倍的速度提升。 uv = Python 版本管理 + 虚拟环境管理 + 包管理 + 项目依赖管理 + 工具安装 安装 uv使用下面的命令可以安装 uv 12345# Linux/MacOScurl -LsSf https://astral.sh/uv/install.sh | sh# Windowsirm https://astral.sh/uv/install.ps1 | iex 安装后,uv 的可执行文件(uv,uvx)会被存放到 ~/.local/bin/uv,可以在任何目录下直接使用。 基本使用uv 提供了与 pip 几乎完全相同的子命令,只需将 pip 替换为 uv pip 即可: 12345uv pip install re...
C/C++ 创建 PPM 图像/视频
Portable Pixmap Format(PPM)格式是非常简单的图片/视频格式,它结构非常简单,不含任何压缩和优化处理,图片就是直接存储所有像素(P3:ASCII格式,P6:二进制格式),视频则是通过一组 PPM 图像创建。 因此可以用 C/C++ 直接写入,无需专门的图形处理库。但是 PPM 格式的图像查看有点麻烦,可以使用 ffmpeg 转换为 png 格式,生成视频的过程也需要依赖 ffmpeg。 例如 P3 格式的 PPM 文件是完全使用 ASCII 格式明文存储的,格式规定如下: 第一行是魔数 P3 第二行说明图像的宽度和高度 第三行说明像素值的最大值(通常是255) 第四行开始是 RGB 像素数据矩阵 示例文件如下 12345P34 2255255 0 0 0 255 0 0 0 255 255 255 0255 255 255 0 0 0 128 128 128 255 0 255 P6 格式则是把数据存储从 ASCII 格式改成了二进制格式,除此之外和 P3 格式一样。 参考资料: https://x.com/t...
