安装flash-Attention报错的解决 编译flash-attn,python setup.py install

安装flash-Attention报错的解决 编译flash-attn,python setup.py install
sudo docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:24.06-py3

sudo docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:24.06-py3

sudo docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:24.06-py3
Unable to find image 'nvcr.io/nvidia/pytorch:24.06-py3' locally
24.06-py3: Pulling from nvidia/pytorch
a8b1c5f80c2d: Pulling fs layer
9c2a63d09670: Pulling fs layer
4f4fb700ef54: Pulling fs layer
c78c58a0000d: Waiting
ea63eb298c69: Waiting
aec371ddf6d1: Waiting
1925a16db8f6: Waiting
5767e2819d1e: Waiting
93fab9cd076a: Waiting
6bc5fc3bcef3: Waiting
a113fe9770cd: Waiting
aec371ddf6d1: Downloading [======>

编译flash-attn

[17/49] /usr/local/cuda/bin/nvcc --generate-dependencies-with-compile --dependency-output /data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/build/temp.linux-x86_64-cpython-312/csrc/flash_attn/src/flash_fwd_split_hdim32_bf16_sm80.o.d -I/data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/csrc/flash_attn -I/data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/csrc/flash_attn/src -I/data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/csrc/cutlass/include -I/home/apus/mambaforge/envs/Qwen_back/lib/python3.12/site-packages/torch/include -I/home/apus/mambaforge/envs/Qwen_back/lib/python3.12/site-packages/torch/include/torch/csrc/api/include -I/home/apus/mambaforge/envs/Qwen_back/lib/python3.12/site-packages/torch/include/TH -I/home/apus/mambaforge/envs/Qwen_back/lib/python3.12/site-packages/torch/include/THC -I/usr/local/cuda/include -I/home/apus/mambaforge/envs/Qwen_back/include/python3.12 -c -c /data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/csrc/flash_attn/src/flash_fwd_split_hdim32_bf16_sm80.cu -o /data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/build/temp.linux-x86_64-cpython-312/csrc/flash_attn/src/flash_fwd_split_hdim32_bf16_sm80.o -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''"'"'-fPIC'"'"'' -O3 -std=c++17 -U__CUDA_NO_HALF_OPERATORS__ -U__CUDA_NO_HALF_CONVERSIONS__ -U__CUDA_NO_HALF2_OPERATORS__ -U__CUDA_NO_BFLOAT16_CONVERSIONS__ --expt-relaxed-constexpr --expt-extended-lambda --use_fast_math -gencode arch=compute_80,code=sm_80 -gencode arch=compute_90,code=sm_90 --threads 4 -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=flash_attn_2_cuda -D_GLIBCXX_USE_CXX11_ABI=0
[18/49] /usr/local/cuda/bin/nvcc --generate-dependencies-with-compile --dependency-output /data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/build/temp.linux-x86_64-cpython-312/csrc/flash_attn/src/flash_fwd_split_hdim192_bf16_sm80.o.d -I/data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/csrc/flash_attn -I/data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/csrc/flash_attn/src -I/data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/csrc/cutlass/include -I/home/apus/mambaforge/envs/Qwen_back/lib/python3.12/site-packages/torch/include -I/home/apus/mambaforge/envs/Qwen_back/lib/python3.12/site-packages/torch/include/torch/csrc/api/include -I/home/apus/mambaforge/envs/Qwen_back/lib/python3.12/site-packages/torch/include/TH -I/home/apus/mambaforge/envs/Qwen_back/lib/python3.12/site-packages/torch/include/THC -I/usr/local/cuda/include -I/home/apus/mambaforge/envs/Qwen_back/include/python3.12 -c -c /data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/csrc/flash_attn/src/flash_fwd_split_hdim192_bf16_sm80.cu -o /data/zengzijian/Projects/InternVL-v2.0.0/flash-attention/build/temp.linux-x86_64-cpython-312/csrc/flash_attn/src/flash_fwd_split_hdim192_bf16_sm80.o -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''"'"'-fPIC'"'"'' -O3 -std=c++17 -U__CUDA_NO_HALF_OPERATORS__ -U__CUDA_NO_HALF_CONVERSIONS__ -U__CUDA_NO_HALF2_OPERATORS__ -U__CUDA_NO_BFLOAT16_CONVERSIONS__ --expt-relaxed-constexpr --expt-extended-lambda --use_fast_math -gencode arch=compute_80,code=sm_80 -gencode arch=compute_90,code=sm_90 --threads 4 -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=flash_attn_2_cuda -D_GLIBCXX_USE_CXX11_ABI=0

3.5-Sonnet

Poe

这些命令是在编译 Flash Attention 库的 CUDA 代码。让我为你解释一下这个过程的主要部分:

使用的编译器:
/usr/local/cuda/bin/nvcc - 这是 NVIDIA 的 CUDA 编译器。

输入文件:

  • flash_fwd_split_hdim32_bf16_sm80.cu
  • flash_fwd_split_hdim192_bf16_sm80.cu
    这些是 Flash Attention 的 CUDA 源文件。

输出文件:
编译后的目标文件(.o 文件)被放置在 build/temp.linux-x86_64-cpython-312/ 目录下。

包含路径 (-I 选项):
包括了 Flash Attention 的源代码路径、PyTorch 的头文件路径、CUDA 包含路径等。

编译选项:

  • -O3: 最高级别的优化
  • -std=c++17: 使用 C++17 标准
  • --expt-relaxed-constexpr: 允许在设备代码中使用更多的 constexpr 功能
  • --use_fast_math: 使用快速数学库,可能会轻微影响精度
  • -gencode arch=compute_80,code=sm_80 -gencode arch=compute_90,code=sm_90: 为特定的 GPU 架构(SM80 和 SM90)生成代码

定义的宏:
包括 TORCH_EXTENSION_NAME=flash_attn_2_cuda,这定义了 PyTorch 扩展的名称。

ABI 设置:
-D_GLIBCXX_USE_CXX11_ABI=0 指定使用旧的 C++ ABI,这通常是为了与预编译的 PyTorch 二进制文件兼容。

多线程编译:
--threads 4 指定使用 4 个线程进行编译,加快编译速度。

这个编译过程是为了将 Flash Attention 的 CUDA 代码编译成可以与 PyTorch 一起使用的扩展。它针对特定的 GPU 架构(SM80 和 SM90)优化,并使用了一些高级的 CUDA 编译选项来提高性能。

编译完成后,这些目标文件将被链接成一个 Python 可以导入的动态库,使得 Flash Attention 可以在 PyTorch 中高效运行。

Read more

科普文:软件架构数据库系列之【MySQL:innodb刷脏页之Checkpoint机制详解】

科普文:软件架构数据库系列之【MySQL:innodb刷脏页之Checkpoint机制详解】

概叙 CheckPoint是MySQL的WAL和Redolog的一个优化技术。 ‌MySQL的CHECKPOINT机制‌是一种优化技术,主要用于将缓存池中的脏页刷新到磁盘,确保数据的持久性和一致性。 CHECKPOINT机制通过记录一个特定的时间点(称为检查点),在该时间点上,所有在此之前的修改都会被刷新到磁盘上,从而在系统崩溃时能够快速恢复数据。 CHECKPOINT的作用 1. ‌缩短数据库的恢复时间‌:当数据库宕机时,由于CHECKPOINT之前的页已经被刷新到磁盘,因此只需要对CHECKPOINT之后的重做日志进行恢复,从而缩短恢复时间‌。 2. ‌缓冲池不够用时刷新脏页‌(buffer pool大小有限):当缓冲池空间不足时,系统会强制执行CHECKPOINT,将脏页刷新到磁盘,以释放空间‌。 3. ‌重做日志不可用时刷新脏页‌(redolog file组中日志文件大小有限制):当重做日志不可用时(例如重做日志循环使用),系统会强制执行CHECKPOINT,确保脏页至少刷新到当前重做日志的位置‌。 CHECKPOINT的触发时机 1. ‌定期执行‌:

By Ne0inhk
科普文:软件架构Linux系列之【搞懂计算机架构NUMA(Non-Uniform Memory Access)非一致性内存访问】

科普文:软件架构Linux系列之【搞懂计算机架构NUMA(Non-Uniform Memory Access)非一致性内存访问】

概叙 前面了解了cpu、内存、磁盘、磁盘阵列,我们再接着看看NUMA。 NUMA到底指的是什么?我们怎么可以感受到它的存在?以及NUMA的存在对于我们编程会有什么影响?今天我们一起来看一下。 计算机应用和计算机模式 NUMA 非一致内存访问结构 ( Non Uniform Memory Access ) 系统架构 , 可以 集成多个处理器 , 使得系统在 " 处理事务 " 方面 , 有着 很高的性能 ; NUMA 架构中 , 处理器 访问 自己的本地内存速度很快 , 但是 访问 其它处理器的内存速度慢 , 这样为了 保证事物的执行性能 , 需要 减少 CPU 处理器之间的数据交互 , NUMA 架构 只适合OLTP ( On-Line Transaction Processing 联机事务处理过程 ) 事务处理场景 ; 使用

By Ne0inhk
科普文:软件架构数据库系列之【MySQL:innodb对numa的支持】

科普文:软件架构数据库系列之【MySQL:innodb对numa的支持】

概叙 关于numa和其他cpu架构,可以看看上面的文章。 在数据库系统中,OLTP(在线事务处理)数据库通常面临着高并发和高吞吐量的要求。 在某些情况下,可以通过启用 NUMA(非统一内存访问)来改善 OLTP 数据库的性能。 NUMA 系统的内存分配策略与传统的对称多处理 (SMP) 系统不同。在 SMP 系统中,所有 CPU 核心都可以访问同一个共享的内存。而在 NUMA 系统中,内存访问被限制在特定的节点(或节点集合),这取决于 CPU 核心的物理位置。 为了在 OLTP 数据库中使用 NUMA 技术来提升性能,可以考虑以下策略: 1. 内存分配:确保数据库进程被调度到具有足够内存的 NUMA 节点上。 1. 文件系统和磁盘:使用本地磁盘和文件系统来减少跨节点的通信。 1. 数据库配置:调整数据库的内存配置,使其尽可能利用本地内存。

By Ne0inhk
科普文:微服务之容器化【8种JDK性能测试:K8s上应该用哪种JDK?】

科普文:微服务之容器化【8种JDK性能测试:K8s上应该用哪种JDK?】

概叙 这次我将通过多次重复进行非常准确的比较以获得可重现的结果。 我将测试以下 JVM 实现: * Adoptium Eclipse Temurin * Alibaba Dragonwell * Amazon Corretto * Azul Zulu * BellSoft Liberica * IBM Semeru OpenJ9 * Oracle JDK * Microsoft OpenJDK 对于所有测试,我将使用 Paketo Java buildpack。我们可以使用 Paketo 轻松地在多个 JVM 实现之间切换。我将测试一个简单的 Spring Boot 3 应用程序,它使用 Spring Data 与 Mongo 数据库进行交互。 如果您已经使用 Dockerfile 构建了镜像,那么您可能使用的是来自 Docker Hub

By Ne0inhk