大家好,今天开始讲述关于人工智能学习的基础篇。

(1)内存对齐

编译器的管辖范围

 

内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解更加底层的秘密,“内存对齐”对你就不应该再模糊了。

对齐原因

 

 

大部分的参考资料都是如是说的:

1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。

2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

对齐规则

每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。

规则:

1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。

2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。

3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。

Win32平台下的微软C编译器(cl.exefor 80×86)的对齐策略:

(1)结构体变量的首地址是其最长基本类型成员的整数倍;

备注:编译器在给结构体开辟空间时,首先找到结构体中最宽的基本数据类型,然后寻找内存地址能是该基本数据类型的整倍的位置,作为结构体的首地址。将这个最宽的基本数据类型的大小作为上面介绍的对齐模数。

(2)结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal padding);

备注:为结构体的一个成员开辟空间之前,编译器首先检查预开辟空间的首地址相对于结构体首地址的偏移是否是本成员的整数倍,若是,则存放本成员,反之,则在本成员和上一个成员之间填充一定的字节,以达到整数倍的要求,也就是将预开辟空间的首地址后移几个字节。

(3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会在最末一个成员之后加上填充字节(trailing padding)。

备注:

a、结构体总大小是包括填充字节,最后一个成员满足上面两条以外,还必须满足第三条,否则就必须在最后填充几个字节以达到本条要求。

b、如果结构体内存在长度大于处理器位数的元素,那么就以处理器的倍数为对齐单位;否则,如果结构体内的元素的长度都小于处理器的倍数的时候,便以结构体里面最长的数据元素为对齐单位。

(4) 结构体内类型相同的连续元素将在连续的空间内,和数组一样。

(2)大语言模型

大语言模型(英语:Large Language Model,简称LLM)是指使用大量文本数据训练的深度学习模型,使得该模型可以生成自然语言文本或理解语言文本的含义。这些模型可以通过在庞大的数据集上进行训练来提供有关各种主题的深入知识和语言生产 。其核心思想是通过大规模的无监督训练学习自然语言的模式和结构,在一定程度上模拟人类的语言认知和生成过程。

LLM在多种应用场景下表现出色,不仅能执行拼写检查和语法修正等简单的语言任务,还能处理文本摘要、机器翻译、情感分析、对话生成和内容推荐等复杂任务。通过在大规模数据集上进行预训练,大语言模型获得了强大的通用建模能力和泛化能力。近期,GPT-4和LLaMA等大语言模型在自然语言处理等领域取得了巨大的成功,并逐步应用于金融、医疗和教育等特定领域 。

2023年12月26日,大语言模型入选“2023年度十大科技名词” 。2024年4月,在第27届联合国科技大会上,世界数字技术院发布了《生成式人工智能应用安全测试标准》和《大语言模型安全测试方法》两项国际标准,由OpenAI、蚂蚁集团、科大讯飞、谷歌、微软、英伟达、百度、腾讯等数十家单位多名专家学者共同编制而成。

技术起源

大语言模型的起源可以追溯到20世纪50年代,当时人工智能领域的先驱们开始探索如何让计算机理解和生成人类语言。20世纪70年代由贾里尼克提出的N-gram语言模型是最常用的统计语言模型之一,广泛用于当今的多种自然语言处理系统中。N-gram模型将文本序列划分为长度为N的连续词组(N-gram),并利用大量语料库训练模型,以预测给定N-gram的后续词。N-gram模型虽然是一种有效的语言建模技术,但是存在着一些局限性,如数据稀疏性、计算复杂性和语言模型的可扩展性等。基于N-gram语言模型的不足,人们开始尝试用神经网络来建立语言模型。

今天就讲这些,下篇文章见。

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐