Python¶
约 990 个字 19 行代码 预计阅读时间 4 分钟
Python 作为一门新兴的解释型语言,尽管其运行的效率远不及 C/C++ 与 Fortran 等编译型语言,但由于其在 AI 领域的广泛运用以及其作为脚本语言的强大功能,我们仍需要掌握基础的 Python 知识。
本部分主要掌握 Python 的基础语法与数据结构和 pytorch、mpi4py 的使用。
事实上,在 ChatGPT 等大语言模型的普及背景下,我们不需要完全记忆下述内容,只需要构建相关框架,能够在需要使用时让大语言模型帮助我们编写出对应程序即可。
python 环境搭建 ¶
推荐 IDE:vscode+python 插件,Pycharm
python 基础 ¶
该部分需要掌握基础的 python 程序编写和常见的 python 数据结构的用法。
基础语法 :
数据结构 :
- 列表(List
) :定义、遍历、列表操作 - 元组(Tuple
) :定义、不可变性、元组与列表的区别 - 字典(Dictionary
) :定义、键值对、字典操作 - 集合(Set
) :定义、集合操作
本部分练习 :
不使用任何第三方库,尝试编写程序使用定积分的定义计算 \(\int_{0}^{1} \frac{1}{x^2+1} \, dx\) 的值。
PyTorch¶
PyTorch 是一个由 Facebook 的人工智能研究团队开发的开源深度学习框架,以其易用性、灵活性和强大的功能在科研社区中广受欢迎。其也常常作为 AI 大模型赛题的实现框架。
该部分要求掌握 PyTorch 张量运算的基本规则
参考链接 :
本部分练习 :
- 使用 PyTorch 的张量类型,编写程序使用定积分的定义计算 \(\int_{0}^{y} \frac{1}{x^2+1} \, dx\) 的值
- 输入:一维 torch.Tensor 张量,每个数字代表一个 y 的取值。
- 输出:一维 torch.Tensor 张量,每个位置对应于输入的 y 计算得到的定积分的值。
- (选做)自己编写一个 PyTorch 算子(基于 C++ 或 CUDA
) ,输入一个张量 x,返回张量 \(\frac{1}{x^2+1}\)。并在 python 中调用这个算子运用定积分的定义计算 \(\int_{0}^{y} \frac{1}{x^2+1} \, dx\) 的值(输入输出要求与 1 中相同)
mpi4py(选学)¶
mpi4py 是一个 Python 库,提供了 MPI(消息传递接口)的绑定,使得 Python 程序能够进行并行计算。它支持多种并行模式,包括点对点通信、集合通信(如广播、分散和聚集)以及使用 NumPy 数组的快速缓冲区通信。
尽管 python 中自带有 multiprocessing 库实现多进程,但是其只能在单机上实现并行。如果需要使用多机的并行仍需使用 mpi4py。
本部分练习 :
-
hello,mpi4py.
- 编写程序运行后打印自己的 rank 与当前的 size 并退出。
-
mpi4py 库中的点对点通信 (ping - pong)
- 编写程序让程序开始运行时 0 号进程发送 'ping' 信息给 1 号进程,1 号进程发送 'pong' 信息给 0 号进程
- 1 号进程每次收到 0 号进程消息后打印输出并等待 1s 后返回 'pong' 信息给 0 号进程
- 0 号进程每次收到 1 号进程消息后打印输出并等待 1s 后返回 'ping' 信息给 0 号进程
-
mpi4py 库中的集合通信
- 编写函数 mpi_np_gather(send_buffer: np.ndarray)-> np.ndarray。
- 实现功能 :send_buffer 为将发送二维的 np.ndarray 对象,所有进程发送的 np.ndarray 对象列数相同,行数可以不同。返回值为各个程序的发送的 np.ndarray 对象按照 rank 的顺序拼接而成的 np.ndarray 数组。
-
示例:
# 假设size=4 if rank == 0: mpi_np_gather(np.array([[0,1]])) elif rank == 1: mpi_np_gather(np.array([[1,0],[2,3]])) elif rank == 2: mpi_np_gather(7*np.ones((3,2))) elif rank == 3: print(mpi_np_gather(np.array[[114, 514]]) ''' 输出结果: [[0 1] [1 0] [2 3] [7 7] [7 7] [7 7] [114 514]] '''