2025.6.27学习日记
1.Linux部分命令
1.1 搜索命令grep
grep的全称为Global Regular Expression Print,使用正则表达式的文本搜索工具,例如查询conda环境下是否有numpy模块文件使用
conda list |grep numpy
即可实现查询,但查询速度较为缓慢
2.Python部分知识点
2.1 pypi与pip
- pypi全称是Python Package Index,是python官方开发的仓库,用于存储第三方库或者支持开发者上传自己开发的库。
- pip是包管理工具,用于从Python Package Index仓库中下载相应的模块,支持版本控制,支持指定下载源(编辑配置文件/root/.pydistutils.cfg)
2.2 源码包和二进制包
源码包的安装过程需要先解压,再编译(转成2进制),最后才安装,本质上是一个压缩包,通常以zip,tar结尾
二进制包的安装过程省去了编译的过程,直接进行了解压安装,通常以egg,whl结尾。例如我们从pip从Package Index中下载的其实绝大多数都是二进制包。
【注】:请注意对于不同平台,编译出来的二进制包无法通用,发布时需要选择对应操作系统的egg或者whl
2.3 包分发工具
打包意味着将源代码进一步封装,将所有文件模块部署完毕后,使用者可以拿到后可以直接使用,常用的打包工具包括disutils(经典工具),setuptools(常用工具),easy_install(setuptools的派生)。
- 程序信息分类
使用setup的classifiers参数 - 文件分发
打包分发最关键的一步是编写setup.py文件,详细步骤为:导入setuptools模块中的setup函数,再setup.py文件中使用setup函数并指定参数,示例如下
from setuptools import setup
setup(
name="YourProject",
version="1.0",
author="YourName",
author_email="YourEmail",
description="Learn to Pack Python Module",
url="ProjectURL",
#需要安装的文件
data_files=[],
#希望打包的文件
package_data={Key:Value}
#不希望打包的文件
exclude_package_data={Key:Value}
除此之外还可以写一个MANIFEST.IN文件列出详细的文件清单
- 依赖包下载安装
绝赞等待中 - 安装外部扩展
PyTorch支持使用C++/cuda自定义函数来实现指定的运算,使用方法如下:
1.编写c++/cuda拓展源文件->2.使用setuptools进行c++/cuda拓展的编译->3.torch.autograd.Functio类封装
2.4 Pytorch的C++/CUDA扩展
- 编写:
PyTorch官方推荐pybind11进行混合编程。快速掌握是只需要关注前向传播结果和后向传播,误差。本人因为比较菜只能先看到这里了,详细可以参考这篇文章
https://zhuanlan.zhihu.com/p/459955492 - 编译:
目前有两种编译方法,先编译再调用(ahead of time)与调用时编译(just in time-又称为JIT),前者使用setuptools,后者使用torch.utils.cpp_extension_load(),一般使用前者,下面将详细介绍。
setuptools编译C++/cuda主要是将源代码编译成动态链接库(Linux下后缀为.so,全称为Shared Object),而后再.py文件中import该拓展模块了。
类的使用可以是torch.utils.cpp_extension中的CUDAExtension,CPPExtension,BuildExtension。前两者都继承自setuptools中的Extension类,后者集成子setuptools.command.build_ext负责。构造参数如下
- name:import该拓展的名称,支持层级命名,也就是Folder.Module
- source:源代码的文件名,传递为列表
- include_dirs:传给gcc的头文件目录,传递为列表
- extra——compile——args:传给gcc的额外编译参数,如-std=c++11
- define_macros:定义宏
【注】:一般写cuda代码,是为了加速运算过程,但是由于语言特性的原因,需要进行编译才可以使用,越复杂的Cuda
- 调用
绝赞等待中

浙公网安备 33010602011771号