跳转至

Python

Python作为一门新兴的解释型语言,尽管其运行的效率远不及C/C++与Fortran等编译型语言,但由于其在AI领域的广泛运用以及其作为脚本语言的强大功能,我们仍需要掌握基础的Python知识。

本部分主要掌握Python的基础语法与数据结构和pytorch、mpi4py的使用。

事实上,在ChatGPT等大语言模型的普及背景下,我们不需要完全记忆下述内容,只需要构建相关框架,能够在需要使用时让大语言模型帮助我们编写出对应程序即可。

python环境搭建

推荐IDE:vscode+python插件,Pycharm

python安装教程

python基础

该部分需要掌握基础的python程序编写和常见的python数据结构的用法。

基础语法:

  • 打印语句:print()
  • 注释:单行注释和多行注释
  • 变量和数据类型
  • 基本运算符:算术运算符、比较运算符、逻辑运算符
  • 条件语句:if、elif、else
  • 循环语句:for、while

数据结构:

本部分练习:

不使用任何第三方库,尝试编写程序使用定积分的定义计算\(\int_{0}^{1} \frac{1}{x^2+1} \, dx\)的值。

PyTorch

PyTorch是一个由Facebook的人工智能研究团队开发的开源深度学习框架,以其易用性、灵活性和强大的功能在科研社区中广受欢迎。其也常常作为AI大模型赛题的实现框架。

PyTorch官网

该部分要求掌握PyTorch张量运算的基本规则,(选学)学习编写PyTorch的算子的方法。

参考链接:

张量的基本运算

PyTorch自定义算子手册

本部分练习:

  1. 使用PyTorch的张量类型,编写程序使用定积分的定义计算\(\int_{0}^{y} \frac{1}{x^2+1} \, dx\)的值
    • 输入:一维torch.Tensor张量,每个数字代表一个y的取值。
    • 输出:一维torch.Tensor张量,每个位置对应于输入的y计算得到的定积分的值。
  2. (选做)自己编写一个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。

本部分练习:

  1. hello,mpi4py.

    • 编写程序运行后打印自己的rank与当前的size并退出。
  2. mpi4py库中的点对点通信(ping - pong)

    • 编写程序让程序开始运行时0号进程发送'ping'信息给1号进程,1号进程发送'pong'信息给0号进程
    • 1号进程每次收到0号进程消息后打印输出并等待1s后返回'pong'信息给0号进程
    • 0号进程每次收到1号进程消息后打印输出并等待1s后返回'ping'信息给0号进程
  3. 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]]
      '''