动机、参考资料、涉及内容

计划,资源,随笔

计划

未归类

  • Rust 入门 + text-generation-inference/huggingface Tokenizer 库
  • 《网络是怎样连接的》
  • lmdeploy 的组装 batch 的一些细节
  • 自动微分 + 陈天奇 dlsyscourse 课程
  • Tensor Parallel + Pipeline Parallel (lmdeploy 等框架)
  • qwen-agent
  • React + OpenDevin(目前好像改名为 OpenHands 了)
  • 强化学习相关, PPO, DPO, … (huggingface course)
  • Stable Diffusion (huggingface diffusers 以及课程)
  • GGML + GGUF + llama.cpp
  • 预测性解码 (transformers 和 vllm)
  • 结构化解码: outlines
  • guidance, Dify, SGLang
  • SSE(stream/socket/FastAPI/js)
  • FastAPI(backgroud task)

Python 相关

  • CPython Internel (微信公众号 + RealPython 书)
  • Python asyncio
  • Python ast, cst 模块 (Modular Transformers, Pydantic V1 -> V2)

huggingface 相关

  • ChatTemplate: 模板字符串使用 Jinja2 语法
  • Modular Transformers

pytorch 相关

  • torch.fx + torchscript + torch.compile
  • torch 原生支持的量化 + QAT + AWQ
  • torchao (pytorch的新仓库, 不确定和 torch.ao 的区别): 看起来 C 代码并不算太多, 可以学一学, 似乎包括了 GPTQ 等实现
  • DDP 与 FSDP, Pytorch 2.4 引入 FSDP2
  • torch.compile (depyf)

博客

  • 重组如下内容显得重复的 web 相关内容
    • 2021-12-15-html-css-javascript-tutorial.md: 拆掉, 往 notes 仓库里放
    • 2023-08-15-streamlit-tutorial.md: 调整内容结构
    • 2023-08-31-flask-tutorial.md: 调整内容结构
    • 2024-01-18-socket-http.md: 拆掉, 改为 requests 库的介绍
    • 2024-02-25-wsgi-asgi.md: 保留, Python 的 WSGI 与 ASGI
    • 2024-06-03-event.md: 计划删除, 但还不确定放哪
    • 2024-06-03-fastapi.md: 保留, 内容完善
    • 2024-08-28-socket.md: 计算机网络中 socket 层相关的概念, python socket 包的 API, 以及利用 socket 来实现各种高级任务

资源

Pytorch 与分布式训练相关

大模型部署相关

量化

W8A8 指模型权重和激活值都量化到 8 bit int; W4A16 指模型权重量化到 4 bit int, 激活值保持为 FP 16

pytorch 原生量化

pytorch 中的量化公式

rapidapi

rapidapi: ToolLLM paper

pytorch compiler 相关

新闻

LLM 工具

博客

未归类

随笔


链接:

2024/09/25 的 transformers 4.45.0 版本 Release 信息中提到, transformers 库引入了一种新的写法: modular_xxx.py, 用来替换以前的 modeling_xxx.py, configuration_xxx.py 的写法. 简要的工作方式如下:

在之前, 由于 transformers 代码库采用了 Repeat Yourself 的设计哲学, 避免了太深的继承关系(例如所有的 XXXModel 都不会有继承关系, 而是有统一的基类), 因此各个模型的代码会有大量的重复, 为了让读代码的人注意到这些复制代码的存在, 会使用 # Copied from ... 这种注释来表明引用关系, 并且 CI 时会使用一些工具例如 utils/check_copies.py 来确保这些复制的代码没有发生篡改, 以免误导读者. 但有个弊端是, 读者需要看太多的文件: modeling_xxx.py, configuration_xxx.py.

目前引入的解决方案是: 增加一个 modular_xxx.py 文件, 允许它使用继承, 然后使用自动化转化工具 utils/modular_model_converter.py 将它转化为: modeling_xxx.py, configuration_xxx.py 这种文件, 这么一来, 读者就可以有两个选项, 一是可以照旧看 modeling_xxx.py, configuration_xxx.py 这些文件, 好处是它们没有复杂的继承关系, 没有依赖; 二是只看 modular_xxx.py 文件, 好处是代码量少, 尤其是如果读者对它继承的模型相对熟悉时, 方便阅读, 并且只需要看这一个文件.

样例: models/gemma

# 使用 modular_gemma.py 生成 modeling_gemma.py 和 configuration_gemma.py 文件
python utils/modular_model_converter.py --files_to_parse /path/to/transformers/src/transformers/models/gemma/modular_gemma.py

原理: python 文件的转换使用了 libcst


Offloaded KV Cache

原理似乎是把所有的 KV Cache 保存在 CPU 上, 在计算时提前将下一层 KV Cache 转到 GPU 上:

例如当前需要计算第 n 层, 那么第 n 层已经在 GPU 上, 因此在由于 __getitem__ 触发第 n 层 KV Cache 获取时, 我们提前将第 n+1 层也放在 GPU 上(开另一个 CUDA Stream), 并且将 n-1 层移回 CPU. 总之, 同一时间有两层 KV Cache 在 GPU 上, 其余全部在 CPU 上.


transformers 的 generate 函数支持 torch.compile