【AI-HPC】从零到一的 AI-HPC 学习之路

从零到一的 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

C++

……

机器学习

……

深度学习

数据预处理

激活函数

学习资料

PyTorch

环境搭建

PyTorch 与 CUDA 安装:……。

官方教程

Tensor

常用操作

方法名右边加 _ 代表这是一个原地操作,操作结果会回写到调用函数的对象中(不会返回新的 Tensor)。

x = torch.rand(5, 3)
y = torch.rand(5, 3)
y.add_(x)

参考资料:

LLM

学习路线

基本概念

token:文本中最小的语义单元,如:单词、符号等(tokenization:分词)。

编码(encoding):将子词序列转换为数值向量。

解码(decoding):将每个数值编码替换成其对应的子词,然后将相邻的子词合并成最长的匹配单词,从而得到一个文本。

嵌入(embedding):子词 -> 特征向量,表示该子词的语义。基于互联网上大量的文本资料,统计出两个词语在相邻/句子/文章中共同出现的概率并通过权重来汇总计算,就能分析出某个词语与另外一个词语的亲密度的数值,并将这个数值作为特征向量来描述这个词语。通过嵌入,我们就可以把每个子词看作是高维空间中的一个点,而这些点之间的距离和方向,就可以表示出子词之间的相似度和差异度(词义相似时,在空间上也相近)。

预测(prediction):根据给定的文本,计算出下一个子词出现的概率。下一个子词出现概率的计算,就是基于特征向量表进行的。

通过嵌入和预测,我们就可以实现从文本到数字,或者从数字到文本的转换。

生成:指根据给定的文本来生成新的文本的过程。生成可以分为两种模式:自回归(autoregressive)和自编码(autoencoding),GPT 系列主要采用了自回归模式。

训练 & 推理

参考资料

transformer

embedding

……

AI 算力

学习路线

基础知识
AI 框架
  • PyTorch(模型搭建 & 训练框架);
  • LLama.cpp(AI 大模型推理部署框架)。
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值