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扩展

  1. 编写:
    PyTorch官方推荐pybind11进行混合编程。快速掌握是只需要关注前向传播结果和后向传播,误差。本人因为比较菜只能先看到这里了,详细可以参考这篇文章
    https://zhuanlan.zhihu.com/p/459955492
  2. 编译:
    目前有两种编译方法,先编译再调用(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
  1. 调用
    绝赞等待中
posted @ 2025-06-27 22:27  BingUw  阅读(10)  评论(0)    收藏  举报