从零到一的 AI-HPC 学习之路
引言
目前,以神经网络为代表的 AI 训练计算使得采用 SIMT(Single Instruction Multiple Threads)并行技术的 GPU 处理器的算力得到了很好地发挥,同时以 PyTorch 为代表的一系列 AI 框架简化了深度学习在异构系统上的编程,极大地推动了 GPU 在 AI 领域的广泛应用。
随着大模型产业的发展,对 AI 算力的需求也越来越大,AI 训练与推理需要大规模 HPC(High Performance Computing,高性能计算)的支撑,这极大地促进了 AI 框架开发、推理引擎开发、算子优化等岗位的人才需求。
本文主要记录我作为一名小白在 AI-HPC 领域中的学习历程。
Python
环境搭建
Anaconda 安装:……。
面向对象
类实例方法
类实例方法的第一个参数 self
表示实例本身,通过实例对象调用。
以 _
开头的方法,为大家约定俗成的 private 方法,但实际并不影响程序的行为。
类方法
类方法 @classmethod
只能访问类变量,并且对类属性进行的处理是有记忆的,在多个实例间共享。
参数 cls
指向类本身,允许我们在方法中操作类的属性或调用其他类方法。
类方法可以通过类名或实例对象调用。
class Man:
id = 0 # 类变量
def __init__(self, name):
self.name = name
self.id = self.id_number() # self可以访问类变量
@classmethod # 类方法
def id_number(cls):
cls.id += 1
return cls.id
a = Man('A')
print(a.id) # 1
b = Man('B')
print(b.id) # 2
使用类方法可以提供多个构造函数,提高了实例化对象的灵活性。
class Test:
def __init__(self, x, y)
self.x = x
self.y = y
@classmethod
def from_string(cls, str):
x, y = map(int, s.split(','))
return cls(x, y)
obj = Test.from_string('5,10')
参考资料:
静态方法
静态方法既不需要传递类对象 cls
也不需要传递实例对象 self
作为第一个参数。
静态方法可以通过类名直接调用,无需创建类的实例,属于类的命名空间中的独立函数。
一般用于工具类中提供的方法。
class Calculator:
@staticmethod
def add(x, y):
return x + y
@staticmethod
def multiply(x, y):
return x * y
sum_result = Calculator.add(3, 5)
product_result = Calculator.multiply(3, 5)
参考资料:
魔法方法
魔法方法是方法名前后各有两个下划线的方法,如 __init__
,可以使用 类名()
调用方法。
class MyDict(dict):
def __add__(self, other):
self.update(other)
return MyDict(self)
a = MyDict({'de': 'Germany'})
b = MyDict({'sk': 'Slovakia'})
print(a + b) # {'de': 'Germany', 'sk': 'Slovakia'}
参考资料:
Libs
- Python 常用工具包:Python进阶技能树 (csdn.net)。
C++
……
机器学习
……
深度学习
数据预处理
- One-Hot 编码:机器学习:数据预处理之独热编码(One-Hot)详解-CSDN博客。
激活函数
- 基础知识:机器学习中的数学——激活函数:基础知识_神经网络中激活函数的数学基础-CSDN博客;
- Sigmoid 函数:机器学习中的数学——激活函数(一):Sigmoid函数-CSDN博客;
- ReLU 函数:机器学习中的数学——激活函数(三): 线性整流函数(ReLU函数)-CSDN博客;
- Softmax 函数:机器学习中的数学——激活函数(七):Softmax函数_softmax激活函数的公式-CSDN博客。
学习资料
- AI 学习:von Neumann-CSDN博客。
PyTorch
环境搭建
PyTorch 与 CUDA 安装:……。
官方教程
- 总览:Welcome to PyTorch Tutorials — PyTorch Tutorials 2.4.0+cu121 documentation;
- 入门教程(old):Learning PyTorch with Examples — PyTorch Tutorials 2.4.0+cu121 documentation;
- 入门教程(new):Learn the Basics — PyTorch Tutorials 2.4.0+cu121 documentation。
Tensor
常用操作
方法名右边加 _
代表这是一个原地操作,操作结果会回写到调用函数的对象中(不会返回新的 Tensor)。
x = torch.rand(5, 3)
y = torch.rand(5, 3)
y.add_(x)
参考资料:
LLM
学习路线
- AI 大模型学习路线:radar-website (huawei.com)。
基本概念
token:文本中最小的语义单元,如:单词、符号等(tokenization:分词)。
编码(encoding):将子词序列转换为数值向量。
解码(decoding):将每个数值编码替换成其对应的子词,然后将相邻的子词合并成最长的匹配单词,从而得到一个文本。
嵌入(embedding):子词 -> 特征向量,表示该子词的语义。基于互联网上大量的文本资料,统计出两个词语在相邻/句子/文章中共同出现的概率并通过权重来汇总计算,就能分析出某个词语与另外一个词语的亲密度的数值,并将这个数值作为特征向量来描述这个词语。通过嵌入,我们就可以把每个子词看作是高维空间中的一个点,而这些点之间的距离和方向,就可以表示出子词之间的相似度和差异度(词义相似时,在空间上也相近)。
预测(prediction):根据给定的文本,计算出下一个子词出现的概率。下一个子词出现概率的计算,就是基于特征向量表进行的。
通过嵌入和预测,我们就可以实现从文本到数字,或者从数字到文本的转换。
生成:指根据给定的文本来生成新的文本的过程。生成可以分为两种模式:自回归(autoregressive)和自编码(autoencoding),GPT 系列主要采用了自回归模式。
训练 & 推理:
参考资料:
transformer
embedding
……
AI 算力
学习路线
基础知识
- CANN:安装须知-软件安装-CANN社区版8.0.RC3.alpha001开发文档-昇腾社区 (hiascend.com);
- CUDA;
- Nvidia GPU 架构;
- Ascend NPU 架构(达芬奇架构);
- Python、C++ 语言。
AI 框架
- PyTorch(模型搭建 & 训练框架);
- LLama.cpp(AI 大模型推理部署框架)。