冰岛大学云计算和大数据笔记-全-

冰岛大学云计算和大数据笔记(全)

001:课程序言(第一部分)

在本节课中,我们将学习云计算与大数据课程的总体结构、核心动机以及课程内容概览。我们将了解课程如何将云计算、大数据、机器学习等前沿技术联系起来,并介绍课程项目与评估方式。

课程结构概览

课程结构与2024年课程类似,但会融入机器学习、深度学习和大语言模型等快速发展的领域的最新内容。课程的核心思想保持不变。

以下是课程的主要模块及其关联:

  • 云计算与大数据导论:介绍基本概念。
  • 机器学习入门:一个无需先修知识的简单介绍,并将在云环境中应用简单模型。
  • 虚拟化与可扩展数据中心设计:讲解云计算如何通过虚拟化技术支撑大规模应用(如社交媒体)。
  • 深度学习:介绍当前消耗大量计算资源的主流技术,课程侧重实践应用而非深层数学理论。
  • 大语言模型:新增讲座,探讨生成式AI及其与云计算的必然联系。
  • 经典范式转变:介绍MapReduce、Apache Spark等大数据处理范式,并与高性能计算进行对比。
  • 云服务模型:讲解基础设施即服务、平台即服务、软件即服务等核心概念。
  • 大数据分析与数据挖掘:介绍相关技术及应用场景。
  • Docker容器管理:讲解如何管理云环境中的容器化应用。
  • 超参数优化:介绍机器学习中需要大量计算资源的重要技术。
  • OpenStack云操作系统:讲解如何利用开源组件构建私有云或混合云。
  • 职业展望:分析课程内容与云计算领域职位要求的关联。

课程将包含大量实践内容,并与行业项目紧密结合。我们鼓励学生尽早开始行业项目,以避免后期时间紧张。

课程动机与学习目标

课程的动机源于“大数据”及其引发的技术浪潮。海量数据需要通过机器学习进行分析,而这离不开强大的计算基础设施、工具集和相关技能。

完成本课程后,你将能够:

  • 理解并行处理是云计算的基础,因为云服务需要同时被海量用户访问。
  • 了解支撑云服务的底层计算与数据处理机制。
  • 熟悉GPU等尖端技术在云计算和机器学习中的作用。

讲师与背景介绍

讲师Morris在云计算、高性能计算、大数据和机器学习领域拥有超过20年的经验。他曾在德国于利希超算中心长期工作,目前是冰岛大学教授,并领导冰岛国家高性能计算与人工智能能力中心。

研究项目涉及多个领域,包括与CERN的合作以及当前在遥感、大语言模型和欧洲AI工厂等方面的研究。这些实践经验将融入课程教学。

核心概念辨析:AI、ML与DL

理解人工智能、机器学习和深度学习之间的关系至关重要:

  • 人工智能:一个广泛的领域,包含机器人学、认知系统等。
  • 机器学习:AI的一个子集,专注于从数据中学习的算法(如支持向量机、随机森林)。
  • 深度学习:机器学习的一个分支,采用神经网络架构,能够自动学习数据特征。

它们并非相互竞争,而是互补的关系。传统机器学习模型在小数据上表现良好,而深度学习模型需要大数据和强大算力,但通常能获得更高的准确性。

为何需要机器学习?

在以下情况下,机器学习是必要的工具:

  1. 存在某种潜在模式。
  2. 没有已知的物理公式来描述该模式。
  3. 存在足够量的相关数据集。

数据科学正是这些领域的交叉点,并严重依赖于计算基础设施。

深度学习的革新

与传统机器学习需要手工设计特征不同,深度学习模型(如卷积神经网络)能够自动从原始数据(如图像)中学习层次化的特征表示(如边缘、形状、物体部件),从而实现更强大的性能。

计算的作用

传统机器学习模型处理大数据集时可能遇到性能瓶颈。深度学习模型虽然能提供更高精度,但需要巨大的计算资源进行训练。因此,强大的计算能力是连接大数据与先进机器学习(尤其是深度学习)的关键桥梁。

此外,开源软件框架(如PyTorch、TensorFlow)和专用硬件(如GPU)的普及,共同推动了当前深度学习的热潮。

课程安排与评估

课程将通过Canvas平台进行管理,包含公告、资料和作业提交。

评估方式如下:

  • 三次作业:共占50%分数(两次各20%,一次热身作业10%)。
  • 行业项目:占50%分数,强调团队合作与实践。

课程核心内容(在幻灯片中以黄色标出)是学习的重点。讲座将被录制并分享,部分视频会公开在YouTube上,部分仅通过Canvas内部访问。

无需购买教科书,因为该领域发展迅速。每讲将提供详细的参考文献。

延伸学习

如果你对本课程内容感兴趣并希望进行更深入、技术性更强的学习,可以考虑在明年春季选修高性能计算课程。该课程将更深入地探讨并行处理、MPI编程,并涵盖更多基于物理定律的计算应用。

本节课中,我们一起学习了云计算与大数据课程的总体框架、核心技术的关联以及课程的基本要求。我们明确了大数据、机器学习与强大计算基础设施之间的紧密联系,这是贯穿整个课程的主线。在接下来的课程中,我们将逐一深入这些激动人心的主题。

002:序言(第二部分)

在本节课中,我们将继续课程序言,深入探讨课程各章节的核心内容、技术背景及其与行业实践的联系。我们将了解从基础概念到前沿应用(如大语言模型)的完整知识脉络,以及如何将理论知识与产业项目相结合。

课程内容纵览

上一部分我们介绍了课程的整体运作方式。本节中,我们将详细拆解后续各个讲座的主题与目标。

以下是课程各核心章节的概要介绍。

  • 讲座一:引言与基础术语

    • 本讲将澄清基础术语,例如CPU(中央处理器)与GPU(图形处理器)的区别。GPU对于当今的机器学习和深度学习至关重要,其强大的并行计算能力是云服务(如亚马逊、谷歌提供的服务)的基石。我们还将回顾云计算从网格计算演变而来的历史。
  • 讲座二:机器学习入门

    • 本讲将以最简化的感知机学习模型为起点,介绍机器学习。感知机是深度学习的基础单元,类似于简化的人脑神经元。我们将使用PythonJupyter Notebook进行实践,并展示如何将应用轻松移植到Google Colab等云平台。

  • 讲座三:Apache Spark与大数据处理

    • 我们将快速过渡到Apache Spark。这是继Hadoop之后的新一代大数据处理框架,为许多云服务提供支持,用于处理SQL查询、数据库、机器学习流等任务。其核心在于可扩展的并行处理
  • 讲座四:可扩展性概念与数据中心

    • 本讲将概念化如何实现可扩展性。关键概念是虚拟化,它是现代数据中心和可扩展性的基础。我们将讨论“按使用付费”等商业模式,并计划参观冰岛本地的数据中心,让大家亲身感受基础设施。
  • 讲座五:深度学习基础

    • 我们将从简单的感知机扩展到深度学习。通过将许多神经元连接成多层网络,形成人工神经网络。我们会介绍反向传播等学习算法,并探讨用于图像分析的卷积神经网络和用于时间序列数据的长短期记忆网络等模型。
  • 讲座六:大语言模型与生成式AI

    • 本讲将连接计算能力与模型规模的关系。深度学习模型的可学习参数数量不断增长,这直接催生了大语言模型。我们将以ChatGPT为例,探讨生成式AI,并讨论欧洲建立AI工厂以保护数据隐私的相关议题。
  • 讲座七:MapReduce范式

    • 这是一个更传统但重要的大数据处理范式。MapReduce的核心思想是“分而治之”,适用于高吞吐量、任务间独立的数据处理场景(例如,从大量文本中统计特定关键词)。它与需要频繁同步参数的深度学习训练形成对比。
  • 讲座八:云服务模型

    • 本讲将深入云计算的层级模型:
      • 基础设施即服务:提供虚拟化的计算和存储资源,可按需灵活扩展。
      • 平台即服务:为开发者提供包含中间件、数据库等服务的平台,用于构建和部署应用。
      • 软件即服务:用户直接使用的完整软件应用(如Google Docs, Facebook),其背后利用了IaaS和PaaS。
  • 讲座九:云上的数据分析与挖掘

    • 我们将探讨如何利用云的可扩展性进行数据分析。例如,使用聚类算法处理海量点云数据重建城市,或构建推荐引擎。亚马逊的成功正得益于其强大的云基础设施。
  • 讲座十:容器化与管理

    • 当需要管理并迁移数据分析环境时,容器化技术(如Docker)是关键。它将应用及其依赖打包,使其能在不同云平台(如AWS, Azure)间轻松迁移,避免“供应商锁定”。

  • 讲座十一:超参数优化

    • 机器学习模型的性能极大程度上受超参数(如学习率、网络层数)影响。本讲将介绍系统化的超参数优化技术,这需要大量的计算资源进行搜索,以找到最佳配置,可能带来显著的性能提升。
  • 讲座十二:自动化机器学习

    • 这是更高级的主题,不仅优化超参数,还可能自动选择或组合模型架构。AutoGluon等工具利用预训练的基础模型,只需少量计算进行微调,就能在特定任务上获得优异表现。

  • 讲座十三:构建私有云

    • 如果需要在内网构建私有云(出于数据安全考虑),可以使用OpenStack。它像一套乐高积木,提供了构建类似AWS或Azure功能的各种软件模块,让你能在自有硬件上搭建可扩展的云环境。
  • 讲座十四:课程总结与职业展望

    • 最后一讲将以俯瞰视角总结课程,并展示课程中涉及的技术如何直接对应业界职位描述,帮助大家将所学知识与未来职业道路联系起来。

产业项目介绍

接下来,课程的另一位教师将简要介绍本学期的产业项目安排。

以下是关于产业项目的具体信息。

  • 产业项目占课程成绩的50%,将于周四正式开始。
  • 目前已引入两家公司:
    • Orb Green:将介绍其项目。
    • Cateralgi:一家零售云公司,也将介绍其项目。
  • 学生可以组成3-4人的小组选择项目,每个公司项目允许多个小组参与。
  • 后续还将引入另外三家公司,其项目均涉及人工智能与云服务(如AWS)的应用。

总结

本节课中,我们一起详细预览了《云计算与大数据》课程的全部核心内容,从机器学习、深度学习的基础,到大数据处理框架、云服务模型,再到前沿的生成式AI和私有云构建。同时,我们也了解了课程重要的实践环节——产业项目的初步安排。希望这能帮助大家对整个课程体系建立起清晰的认知。

003:云计算与大数据导论(第一部分)

在本节课中,我们将学习云计算与大数据的基础概念。课程将从回顾上一讲的内容开始,然后深入探讨云计算的核心技术基础,包括并行与分布式计算、多核CPU与多核GPU的区别,以及“即服务”模型。我们还将初步了解大数据的概念及其带来的挑战。

课程回顾

上一讲(第0讲)是课程的序幕,我们概述了课程的整体内容。我们学习了数据量(数据集体积)的持续增长,这催生了“大数据”的概念。当数据量变得非常庞大时,传统的串行计算工具(如Scikit-learn、Matlab)在个人电脑上可能难以处理。这时,我们需要转向远程计算范式,例如云计算或高性能计算。

云计算在本课程中意味着一种更无缝地获取计算资源的方式,因为它提供了大量服务。这些服务通常来自亚马逊、谷歌云、微软Azure等主流云供应商,甚至是像EOSC这样的科研云平台。

另一个关键点是,要运行当前媒体中常见的大型深度学习模型(如大语言模型),不仅需要大数据,还需要大量的计算资源和训练时间。因此,要获得顶尖的模型性能,我们必须依赖云计算和高性能计算,而无法仅在个人笔记本电脑上完成训练(尽管进行推理是另一回事)。

此外,推动云计算在过去十年成功发展的三个关键因素是:

  1. 数据可扩展性:越来越多的大型数据集变得可用且成本降低。
  2. 硬件演进:特别是通用GPU的出现,极大地提升了计算能力。
  3. 开源软件:如TensorFlow、PyTorch、Keras等工具的普及,降低了开发门槛。

这些因素共同促进了科学、工程领域的突破,也催生了新的商业模式和学习策略(如生成式AI)。

云计算基础

现在,让我们进入今天的正题。本节将探讨云计算的基础,理解为什么并行和分布式计算如此重要,以及互联网云系统背后的技术。

数据中心与虚拟化

云计算的基础是大型数据中心。这些数据中心包含大量基础设施,其中虚拟化的资源可供用户远程访问。这是云计算的一个关键要素:你可以在家或任何地方使用笔记本电脑,通过互联网向“云”发送请求。

云的一个核心特性是弹性。这意味着你可以根据需求动态地增加或减少存储、计算硬件等资源。当然,这通常会产生相应的费用。这种服务特性非常重要,它使得用户可以通过网页浏览器轻松访问各种服务,并将基础设施即服务、平台即服务和软件即服务等不同层次的服务组合起来。

为了实现这一切,虚拟化是一个非常重要的技术概念。我们将在第4讲中再次详细讨论它。

并行与分布式计算

云计算看似一直存在,但其背后是并行和分布式计算技术的长期演进。这里有两个重要的计算范式:

  • 高性能计算:通常指大型超级计算机,其特点是节点间具有非常高速的互联网络。
  • 高吞吐量计算:通常由许多较小的计算实体组成,节点间的网络连接可能不那么关键。

这两种范式在课程中都会出现,并且各有其适用场景,不能互换。例如,训练深度学习模型时使用的分布式技术(如Horovod)会借鉴HPC中的一些方法(如MPI消息传递)。而在进行大数据分析时,可能更侧重于高吞吐量计算。

从历史角度看,互联网云的形成是多种技术融合的结果。早期的HPC系统昂贵且难用,而HTC系统(如早期的P2P网络)更侧重于大规模数据分析。网格计算试图将两者结合。随着Web 2.0、物联网的发展,以及面向服务的架构的兴起,云计算最终成型。它抽象了底层的复杂性,使得服务的使用变得非常简单,从而极大地推动了其在工业界的应用。

核心硬件:多核CPU vs 多核GPU

了解不同类型的计算资源至关重要。在云计算中,你需要清楚多核CPU和多核GPU的区别。

  • 多核CPU:在一个芯片上集成多个处理器核心。每个核心通常具有较高的时钟频率,擅长复杂的串行计算和逻辑处理。但由于功耗和散热限制,无法无限制地增加高频核心的数量。
  • 多核GPU:在一个芯片上集成成千上万个处理核心。每个核心的时钟频率相对较低,但通过大规模并行处理数据,特别适合图形渲染、矩阵运算等任务。正是这种架构使得GPU能够为深度学习和科学计算提供巨大的计算能力。

在云计算中,你可以按需获取包含多核CPU或大量GPU的实例(如亚马逊的EC2实例),以满足不同计算任务的需求。

“即服务”模型

云计算通过分层服务模型提供不同级别的抽象:

  1. 基础设施即服务:提供最基础的虚拟化计算资源(如虚拟机、存储、网络)。用户需要自己管理操作系统、中间件和应用。例如:亚马逊EC2。
  2. 平台即服务:在IaaS之上,提供开发、测试、部署和管理应用程序的平台。用户无需关心底层基础设施,只需关注自己的代码。例如:谷歌应用引擎。
  3. 软件即服务:提供完整的、可直接使用的应用程序。用户通过浏览器即可访问,无需任何安装或维护。例如:Gmail、Salesforce、亚马逊SageMaker。

这种分层模型使得开发者能够像搭积木一样,利用云平台现有的服务(如支付模块、存储服务)快速构建和扩展自己的应用。

案例分析:弹性与可扩展性

以游戏《愤怒的小鸟》为例。它一夜之间获得了数百万用户。如果开发者使用自家地下室的服务
器,根本无法应对这种突如其来的流量高峰。而云计算提供的弹性可扩展性使得他们能够根据用户量动态调整资源,从而支撑了业务的爆炸式增长。这体现了云计算的“规模经济”优势:无需前期巨额投资购买硬件,按需付费,并能始终使用最新的技术。


本节课中,我们一起学习了云计算的基础知识。我们回顾了课程动机,探讨了数据中心、虚拟化、并行与分布式计算的区别,理解了多核CPU与多核GPU的核心差异,并介绍了基础设施即服务、平台即服务和软件即服务这三种关键模型。这些基础概念为我们后续深入学习大数据、机器学习在云上的实践以及具体的云服务打下了坚实的基础。

004:大数据导论与挑战 🚀

在本节课中,我们将要学习大数据的基本概念、核心挑战以及它与云计算的紧密联系。我们将探讨为什么传统计算方法在处理海量数据时会失效,并了解现代数据驱动应用(如深度学习)对计算基础设施提出的新要求。

上一节我们介绍了云计算的基础概念与服务模型,本节中我们来看看数据侧的关键问题。

什么是大数据?💾

大数据通常指数据量过大,以至于无法用传统方法进行处理的数据。一个关键的定义是:大数据是规模大到无法用常规方法处理的数据。例如,当你在个人笔记本电脑上尝试用串行实现的SVM算法处理TB级数据时,系统可能会崩溃,这就是大数据挑战的开始。

大数据最初由“3V”定义,但后来其内涵不断扩展。

以下是“3V”及其扩展的核心概念:

  • Volume(体量):数据的绝对大小。例如,卫星数据、大型强子对撞机实验数据或人类大脑扫描图像,其规模可达TB、PB甚至EB级。
  • Velocity(速度):数据生成和处理的速率。问题不仅在于存储1PB数据,而在于每秒都产生1PB新数据。例如,平方公里阵列射电望远镜每20秒就产生约1PB数据。
  • Variety(多样性):数据的类型和格式多种多样。包括图像、文本序列、传感器测量值等,这些多模态数据需要整合才能用于机器学习等任务。

后来,定义中又加入了Veracity(真实性)Validity(有效性)等更多“V”,但核心挑战在于这些维度的结合使得数据处理极为困难。

大数据的核心挑战 🧱

大数据带来的挑战是多方面的,其中最关键的是“内存墙”或“DRAM差距”问题。

尽管计算能力(CPU/GPU)飞速发展,但存储技术(尤其是大容量、低成本存储)的带宽和访问速度未能同步提升。像磁带库这样的归档存储虽然容量大、成本低,但速度极慢;而像内存这样靠近CPU的高速存储则非常昂贵。

公式数据处理瓶颈 ≈ 数据移动速度 << 数据处理速度

这意味着,即使拥有强大的计算集群,如何快速地将海量数据从存储介质“喂”给CPU进行计算,已成为当今最大的挑战之一。这对于需要从全量数据中学习的机器学习模型(如大语言模型)尤为关键。

云计算作为解决方案 ☁️

面对大数据挑战,云计算提供了关键的解决方案。它通过提供可扩展、按需付费的服务,解决了自建基础设施的诸多难题。

以下是云计算服务相较于自建基础设施的主要优势:

  • 可扩展性:云服务可以轻松应对负载峰值(如购物节),自动增减资源,而无需团队耗费精力管理硬件。
  • 高持久性与可用性:云提供商通过虚拟化、数据备份和快速故障转移等机制,能提供高达99.9%的服务可用性,即使底层硬件不断发生故障。
  • 安全性:大型云服务商在数据中心物理安全、网络安全和数据加密方面投入巨大,通常比大多数企业自建系统更安全。
  • 易于迁移与集成:基于标准API(如REST)的服务,使得不同服务之间易于集成和迁移,支持快速的、基于服务的开发模式。
  • 成本效益:无需前期巨额硬件投资和持续的运维团队成本,按使用量付费。

对于大多数初创公司和企业而言,在云上构建服务比自建数据中心更具性价比和灵活性。除非有特殊的、大规模的HPC需求或极高的数据隐私要求,才会考虑混合云模式(部分数据和服务留在私有基础设施中)。

大数据处理范式:从Hadoop到Spark ⚙️

为了高效处理大数据,出现了新的编程模型和框架。其核心思想是“将计算移向数据”,而非将海量数据移向计算。

MapReduce 是一种经典的分布式计算范式,它遵循“分而治之”的原则。其工作流程可以概括为 Map -> Sort/Shuffle -> Reduce

代码/流程描述

  1. Map阶段:多个工作节点并行处理输入数据块,生成一系列中间键值对 (key, value)
  2. Shuffle & Sort阶段:系统根据键(key)对所有中间结果进行分组、排序和重新分发,确保相同键的数据到达同一个Reduce节点。
  3. Reduce阶段:Reduce节点对分配到它的、具有相同键的所有值进行聚合计算,产生最终结果。

Apache Hadoop 是早期实现MapReduce的流行框架。而 Apache Spark 作为后起之秀,通过更多地利用内存进行计算,在迭代计算(如机器学习算法)等场景下性能大幅提升,成为了当前大数据处理的主流引擎之一。

大数据分析与机器学习 🔍

大数据基础设施的最终目的是为了从数据中获取洞见和价值,这引向了大数据分析机器学习

需要区分两个重要概念:

  • 相关性分析:发现数据中变量之间的统计关联。例如,通过谷歌搜索趋势预测流感爆发。但相关性不等于因果关系,可能产生误导(如“送子鸟数量”与“婴儿出生率”相关)。
  • 因果性分析:致力于解释事件发生的根本原因,通常需要更严谨的模型和领域知识。

机器学习是利用算法让计算机从数据中学习规律的技术。在大数据背景下,我们主要关注:

  • 监督学习:使用带标签的数据训练模型,用于分类(如图像识别)、回归(如房价预测)等任务。
  • 无监督学习:从无标签数据中发现结构,如聚类(客户分群)。

一个典型的大数据机器学习工作流程如下:

以下是基于云平台(如Microsoft Azure)进行大数据分析的一般步骤:

  1. 问题识别与资源订阅:确定分析目标,在云平台创建集群(如Spark集群)并获取计算资源。
  2. 环境部署与数据准备:部署开发环境(如Jupyter Notebook),连接数据源,进行初步的数据探索和可视化。
  3. 模型训练与评估:在分布式集群上运行机器学习算法训练模型,并使用测试数据评估模型性能。
  4. 模型优化与部署:根据评估结果调整模型参数(超参数优化),迭代改进,最终将模型部署用于预测。

开放科学与FAIR原则 🌍

许多大数据来源于公共资金支持的科学研究(如气候模拟、卫星观测)。为了最大化其价值,推动开放科学FAIR原则 至关重要。

FAIR原则要求数据应具备:

  • 可发现性
  • 可访问性
  • 互操作性
  • 可重用性

开放共享数据和模型(如开源的大语言模型)能避免重复劳动和能源消耗,让整个社会在“巨人的肩膀上”创新。欧洲开放科学云等倡议正是为了推动这一目标。


本节课中我们一起学习了大数据的多维定义、它带来的核心“内存墙”挑战,以及云计算如何提供可扩展、高可用的解决方案来应对这些挑战。我们了解了MapReduce和Spark这样的分布式处理范式,并看到了大数据如何驱动机器学习与数据分析。最后,我们认识到在科学研究领域,遵循FAIR原则开放共享数据对于促进创新和节约资源具有重要意义。下一讲,我们将更具体地进入机器学习的世界,从一个简单的分类例子开始。

005:云中的机器学习模型(第一部分)🚀

在本节课中,我们将要学习机器学习的基础知识,特别是线性学习模型。我们将从最基础的概念开始,这些概念是构建更复杂模型(如人工神经网络和深度学习)的基石。课程内容将尽可能简单直白,确保初学者能够跟上。


课程回顾 📚

在深入今天的内容之前,让我们快速回顾一下上一讲的内容。上一讲是对云计算和大数据的一个宏观介绍。

我们了解到,云计算的基础是服务。云平台通过服务抽象了硬件和存储的细节,提供了极大的灵活性。这种灵活性正是“云计算”这一术语的由来。无论是谷歌云、亚马逊AWS还是其他专业平台,它们都深刻影响着我们的生活,我们手机上的应用、物联网设备等都离不开云服务的支持。

云计算与高性能计算(HPC)的一个关键区别在于其互联性抽象性。云数据中心遍布全球,你可以根据需要选择区域,而无需深入了解底层硬件的编程细节。

另一个重要概念是大数据。我们面临的挑战不仅是数据量(Volume)巨大,还包括数据多样性(Veracity)。例如,卫星数据、医疗影像数据等各有特点,不能简单地套用同一个机器学习算法。云计算能够弹性伸缩,以应对这种数据增长和多样性带来的挑战。

此外,我们简单区分了CPUGPU。CPU是强大的“计算核心”,擅长串行任务;而GPU则拥有“众核”架构,擅长并行处理,这在机器学习和深度学习领域至关重要。


机器学习基础入门 🤖

现在,让我们进入今天的主题——机器学习。我们将从一个非常基础的线性学习模型开始。

什么是机器学习?

机器学习,顾名思义,是从数据中学习。它需要满足几个前提条件:

  1. 存在模式:数据中必须存在某种可以学习的规律。
  2. 无法用公式直接描述:如果问题能用明确的物理或数学公式解决,则不一定需要机器学习。
  3. 拥有数据:学习过程必须基于数据。

机器学习与统计学、数据挖掘等领域有重叠,但其核心目标是利用计算能力,从数据中学习模型,以对新的、未见过的数据进行预测或分类。

监督学习简介

机器学习主要分为监督学习、无监督学习和强化学习。今天我们重点介绍监督学习

在监督学习中,我们拥有带有标签的数据集。例如,在分类问题中,每个数据点都有一个已知的类别标签(如“猫”或“狗”)。我们的目标是学习一个模型,使其能够根据输入数据(特征)预测出新数据点的标签。

以下是监督学习的关键步骤:

  • 输入:数据特征向量 x
  • 输出:已知的标签 y
  • 目标:构建一个函数 f(x),使其能准确预测新数据的 y

CRISP-DM 模型:一个实践框架

在实际的数据科学项目中,一个结构化的流程非常重要。CRISP-DM(跨行业数据挖掘标准流程)就是这样一个常用的框架。

它包含以下几个阶段,并且这些阶段通常是迭代循环的:

  1. 业务理解:明确项目目标和需求。
  2. 数据理解:收集并初步探索数据。
  3. 数据准备:清洗、转换数据,为建模做准备。
  4. 建模:选择和应用机器学习算法。
  5. 评估:评估模型性能,看是否满足业务目标。
  6. 部署:将模型投入实际使用。

机器学习是一个过程,而非一蹴而就的编程。我们需要不断调整数据、模型参数(超参数),并在此框架内迭代优化。


实战案例:鸢尾花分类 🌸

为了让大家更好地理解,我们来看一个经典的例子:鸢尾花分类。

问题定义与数据理解

我们的目标是构建一个模型,能够根据鸢尾花的花瓣尺寸,判断它属于 Iris-setosa 还是 Iris-versicolor 品种。

首先,我们需要理解数据。通过观察和可视化数据,我们发现花瓣长度和花瓣宽度这两个特征,似乎能够很好地区分这两个品种。当我们把数据点按品种着色并绘制在二维平面上时,可以清晰地看到两个簇。

从可视化到决策边界

数据可视化帮助我们看到了模式,但机器学习的目标是自动化这个过程。我们需要找到一个决策边界,将这两个簇分开。对于这个二维问题,一个简单的直线就可以作为决策边界。

这条直线可以用一个线性方程表示:
y = w1 * x1 + w2 * x2 + b
其中 x1(花瓣长度)和 x2(花瓣宽度)是输入特征,w1w2b 是模型需要学习的权重偏置

感知机:一个简单的线性学习模型

寻找这条最佳边界的过程,就是一个简单的机器学习模型——感知机(Perceptron)的工作。感知机是神经网络中神经元的基础模型。

它的工作原理如下:

  1. 输入:特征向量 x
  2. 加权求和:计算 z = w · x + b(即 w1*x1 + w2*x2 + b)。
  3. 激活函数:通过一个符号函数(如 sign(z))输出预测类别(例如+1代表 setosa,-1代表 versicolor)。

感知机的学习算法非常直观:

  1. 初始化权重。
  2. 遍历数据,找到一个分类错误的点。
  3. 根据这个点的真实标签,更新权重向量(加上或减去该点的特征向量)。
  4. 重复步骤2-3,直到所有点都被正确分类或达到迭代次数。

核心思想:通过不断修正权重,来“旋转”和“平移”那条决策边界,直到它能完美分开两类数据。这个过程在数据是线性可分的情况下会被证明是收敛的。

训练、测试与预测

当我们通过上述算法学习到一组权重后,就得到了一个训练好的模型。

  • 训练集:用于学习权重的数据。
  • 测试集:用于评估模型在新数据上性能的数据,这部分数据在训练过程中从未使用过。
  • 预测:对于一个新的鸢尾花测量数据(花瓣长、宽),我们将其输入训练好的模型,模型会根据它落在决策边界的哪一侧来预测其品种。

机器学习的核心目标,就是获得在测试集或未来真实数据(样本外数据)上的良好表现,而不仅仅是拟合训练数据。


本节总结与下节预告 🎯

本节课我们一起学习了机器学习的基础入门知识。我们首先回顾了云计算的核心概念,然后引入了机器学习,并重点讲解了监督学习CRISP-DM实践框架。通过鸢尾花分类的案例,我们深入探讨了如何从数据理解过渡到建模,并详细介绍了最简单的线性学习模型——感知机,包括其模型结构、学习算法以及训练/测试的概念。

我们了解到,感知机虽然简单,但它清晰地展示了机器学习“通过数据学习权重参数以进行预测”的核心思想。然而,它的一个主要限制是只能处理线性可分的数据。

在下一部分(第二部分)中,我们将探讨逻辑回归。逻辑回归同样是一种线性模型,但它通过一个不同的函数(Sigmoid函数)将输出转化为概率,使其能够处理更复杂的分类问题,并自然地引入损失函数和梯度下降等优化概念,为我们后续学习更复杂的模型打下基础。

006:云中的机器学习模型(第二部分)🚀

在本节课中,我们将要学习如何将机器学习模型部署到云端,并深入探讨一个更高级的算法——逻辑回归。我们将通过一个银行客户存款预测的实际案例,来理解从数据准备到模型评估的完整流程,并对比不同云服务(如Google Colab与Apache Spark)在可扩展性上的差异。

概述

在第一部分中,我们学习了机器学习的基础知识,从一个简单的线性感知器模型开始。这个模型虽然历史悠久,但它抓住了机器学习从数据中学习的本质。然而,我们当时处理的是一个线性可分的数据集,这在现实世界的工业项目中并不常见。因此,我们需要更先进的算法来处理非线性可分的数据集。

上一节我们介绍了机器学习的基础,本节中我们来看看如何应用更高级的模型,并利用云计算的强大能力来处理更复杂的任务。

从理论到实践:CRISP-DM框架

为了将机器学习应用于实际问题,我们推荐使用CRISP-DM框架来构建你的项目。这是一个非常实用的行业标准方法,可以帮助你系统地处理数据。

以下是CRISP-DM的核心步骤:

  1. 业务理解:明确你要解决的问题和目标。
  2. 数据理解:探索和熟悉你所拥有的数据。
  3. 数据准备:清洗、转换数据,使其适合建模。
  4. 建模:选择并训练机器学习算法。
  5. 评估:评估模型的性能,看它是否满足业务目标。
  6. 部署:将模型投入实际使用。

应用案例:芝加哥食品检查

让我们看一个实际应用案例:预测芝加哥的餐厅是否会通过卫生检查。我们相信,餐厅的某些特征(如评论中的关键词)与检查结果之间存在某种模式。由于没有现成的数学公式可以预测,这正是机器学习的用武之地。这个案例中的数据很可能不是线性可分的,为我们引入了更复杂的现实场景。

迈向云端:为何需要云计算

当你的笔记本电脑或本地资源无法处理大规模数据或复杂计算时,就需要转向云端。云计算提供了灵活性和强大的可扩展性。

以下是向云端迁移的典型步骤:

  1. 选择云服务:从AWS、Microsoft Azure、Google Cloud等供应商中选择。
  2. 考虑可扩展性:对于需要并行处理的大数据任务,Apache Spark等技术是关键。
  3. 利用生态系统:云平台通常集成了数据存储(如SQL/NoSQL数据库)、机器学习库等工具,简化了部署。

例如,Microsoft Azure的HDInsight服务就提供了预配置的Apache Spark集群,省去了手动集成各种开源组件的麻烦。

实践演练:银行客户存款预测

现在,我们通过一个具体的例子来实践上述步骤:预测银行客户是否会购买定期存款产品。

1. 业务与数据理解

我们相信客户的职业、婚姻状况、教育水平等属性与其储蓄行为存在关联。我们从Kaggle获得了一个已标注的数据集,其中包含客户特征和“是否存款”的标签。这是一个典型的监督学习问题。

在数据理解阶段,我们需要检查类别平衡。在这个数据集中,存款与不存款的客户数量大致相当,这有利于模型学习。如果某一类样本极少,模型将难以学习,或产生偏差。

2. 数据准备与特征工程

原始数据是表格形式,包含“职业”、“婚姻状况”等分类特征。机器学习模型需要数值输入,因此我们需要进行转换。

一种常见的方法是独热编码。例如,将“职业”这个特征转换为一个向量,其中每个元素代表一种职业(如教师、科学家、商人),如果客户是该职业,则对应位置为1,否则为0。

以下是使用Pandas进行数据处理的简化示例:

import pandas as pd
# 读取数据
data = pd.read_csv('bank.csv')
# 进行独热编码
data_encoded = pd.get_dummies(data, columns=['job', 'marital', 'education'])

通过这种方式,我们将多个分类特征转换成一个长的数值型特征向量,便于模型处理。同时,我们可能会删除一些无关的特征(如“月份”、“日期”)。

3. 构建数据处理管道

为了保证训练和未来预测时数据处理的一致性,我们需要构建一个可复用的数据处理管道。这样,当有新客户数据到来时,可以经过完全相同的清洗和转换步骤,再输入给训练好的模型。

4. 建模:逻辑回归

我们选择逻辑回归作为本次的机器学习算法。它与感知器类似,但有一个关键改进:

  • 感知器:输出是 +1-1(通过符号函数 sign(w·x + b))。
  • 逻辑回归:输出是介于0和1之间的概率值(通过逻辑函数 σ(w·x + b) = 1/(1+e^-(w·x+b)))。

这个概率值表示样本属于正类(如“会存款”)的可能性。

5. 模型训练与优化

训练模型就是寻找一组最佳的权重 w 和偏置 b,使得模型的预测概率尽可能接近真实标签。这通过最小化一个损失函数(如交叉熵损失)来实现。

优化过程通常使用梯度下降法。想象你站在一个代表误差的山坡上,目标是走到最低点(最小误差)。梯度下降通过计算误差函数的梯度(最陡下降方向),并沿着该方向以小步长(学习率)更新参数,逐步逼近最低点。

# 梯度下降的简化概念
w_new = w_old - learning_rate * gradient_of_loss_function

选择合适的学习率至关重要:太小会导致收敛过慢,太大可能越过最低点甚至导致发散。

6. 模型评估

模型训练完成后,需要使用未参与训练的测试集来评估其泛化能力。常见的评估指标包括:

  • 准确率
  • 精确率与召回率
  • F1分数(精确率和召回率的调和平均)
  • AUC-ROC曲线:通过绘制真正例率 vs. 假正例率来评估模型整体性能,曲线下面积越大越好。

为了更稳健地评估模型,我们还可以使用交叉验证,例如十折交叉验证,将数据多次分割为训练集和验证集,以得到更可靠的性能估计。

总结

本节课中我们一起学习了如何将机器学习项目部署到云端。我们从CRISP-DM框架出发,通过银行客户存款预测的案例,详细演练了从业务理解、数据准备、特征工程到模型训练与评估的完整流程。我们介绍了逻辑回归模型,它通过输出概率提供了比感知器更丰富的信息,并简要探讨了通过梯度下降进行模型优化的原理。最后,我们对比了像Google Colab这样的轻量级云服务与Apache Spark这样的可扩展大数据平台的区别,为后续深入学习云上的大规模机器学习奠定了基础。记住,在实际应用中,数据处理和参数调优往往与选择算法本身同等重要。

007:面向云应用的Apache Spark(第一部分)🚀

在本节课中,我们将要学习如何将Apache Spark应用于云环境,以处理大规模数据分析和机器学习任务。我们将从回顾上一讲的基础知识开始,逐步探讨Spark的核心概念、架构及其在云服务(如Azure HDInsight)中的实际应用。


回顾:机器学习基础

上一节我们介绍了机器学习的基础概念。本节中,我们来看看这些概念如何为后续的云应用奠定基础。

机器学习算法大致可分为几类。其中,监督学习分类模型是最为人熟知的。此外,还有用于发现数据中潜在分组的聚类算法,以及用于趋势分析等任务的回归算法。

一个机器学习问题通常包含三个基本要素:

  1. 存在模式:数据中必须存在可学习的模式。
  2. 无现成公式:如果已有精确的数学公式解决问题,则无需使用机器学习。
  3. 数据可用:机器学习依赖于数据,因此必须有数据可供学习。

我们曾探讨过一个最简单的机器学习问题:二元分类。并介绍了对应的简单模型——感知机模型。其核心思想是模拟神经元,通过输入数据 X(不同属性)和对应的监督标签 Y 来学习一组权重 W 和偏置 b

其数学形式可表示为:

输出 = sign(W^T * X + b)

其中,sign 函数用于二元分类(输出+1或-1)。学习过程就是调整权重 W,以在数据空间中移动决策边界,直到所有数据点被正确分类。然而,感知机算法的局限在于要求数据必须是线性可分的。

为了处理更复杂的情况,我们引入了逻辑回归模型。它在线性模型 W^T * X 的基础上,使用了逻辑函数(Sigmoid函数)将输出压缩到0到1之间,从而提供更平滑的概率估计。

这些模型已应用于实际问题,例如:

  • 花卉分类:根据萼片和花瓣的长度、宽度等属性,区分鸢尾花的种类。
  • 银行营销:根据客户的职业、教育程度、婚姻状况等多维属性,预测客户是否会订阅定期存款。


课程概述与目标

在回顾了基础知识后,本节我们将转向云计算的实践,探讨如何利用Apache Spark构建可扩展的云应用。

本节课是第三讲,我们将延续第二讲的内容,更深入地探讨Apache Spark如何为云应用赋能,特别是在构建数据处理和机器学习流水线方面。

我们将通过一个具体的案例来理解为何在真实数据科学项目中,需要从Google Colab这类工具转向更强大的云服务。核心原因在于数据规模计算需求的急剧增长。

以下是本节课的主要路线图:

  1. 引入Apache Spark:介绍这一可扩展的数据分析框架及其核心架构。
  2. 转向云服务:更新我们的实践方法,使用Microsoft Azure HDInsight(一种云服务)替代Google Colab。
  3. 分析新案例:以“食品检查”预测为例,系统化地理解机器学习的数学构建模块。
  4. 展望第二部分:后续将更系统地介绍云计算中的流水线概念。


从Google Colab到可扩展云服务

上一节我们提到了数据规模的挑战,本节中我们来看看Google Colab在实际生产中的局限性。

在之前的课程中,我们使用了Google Colab。它提供了基于Web浏览器的Jupyter Notebook界面,便于快速开始。我们甚至可以在其中部署一个小型的Spark集群并运行Python代码进行数据分析与机器学习。

然而,Google Colab本质上并非一个真正的可扩展集群。用户通常只能选择单个GPU,且无法拥有多个工作节点。这对于入门和原型设计是很好的工具,但无法满足大规模生产需求。

让我们通过一个真实案例来感受“大规模”的含义。以我们的行业合作伙伴SME Greenfish为例,他们使用哥白尼海洋数据存储库进行渔业预测。仅获取过去五年的全球海面温度数据,就可能达到370 GB。尝试在Google Colab中上传一个2.8 GB的文件都可能耗时极长,更不用说370 GB。即使通过API获取,Colab通常约68 GB的存储空间也远远不够。

在进行更复杂的分析时,例如海洋波浪传播模拟,数据量可能迅速增长到5.8 TB。这远远超出了Colab的免费或付费升级套餐的存储上限。因此,存储是首要瓶颈。

其次,计算能力同样受限。在Colab中,用户只能在有限的几种GPU类型(如T4, A100)中选择,且需要订阅付费的Colab Pro才能获得更快的GPU。然而,在真实的高性能计算场景中,我们可能需要同时使用数十甚至上百个GPU。例如,在一次卫星图像土地覆盖分析中,我们使用了24个节点,每个节点配备4个GPU,总计96个GPU并行工作。这是Google Colab无法提供的计算规模。

因此,对于像SME Greenfish这样的生产级应用,我们需要探索更具扩展性的解决方案。这也引出了本课程的核心:学习如何利用云服务来满足大规模机器学习的计算和存储需求。


Apache Spark 框架简介

认识到对可扩展计算的需求后,本节我们介绍能满足这一需求的核心技术——Apache Spark。

Apache Spark是一个用于大规模数据处理的统一分析引擎。它源于对不断增长的数据进行分布式处理的需求。与早期的Hadoop框架相比,Spark利用内存计算进行了优化,速度显著更快,特别适合需要多次迭代的机器学习算法。

Spark不仅仅是一个执行引擎,它周围有一个庞大的生态系统,与众多开源项目(如Cassandra、Airflow、Kubernetes、MongoDB)集成良好。Spark本身专为大规模数据科学设计,其内置的机器学习库(MLlib)包含了许多本身就支持并行执行的算法。

Spark应用运行时的核心架构如下:

  1. SparkSession:应用程序的入口点,用于创建SparkContext。
  2. 集群管理器:负责管理集群资源(如Hadoop YARN)。它支持多用户同时使用同一集群(多租户),这涉及到虚拟化技术。
  3. 工作节点:真正执行计算任务的节点。可扩展性的关键就在于可以动态增加或减少工作节点的数量,以适应不同计算任务的需求。

Spark具有良好的互操作性,支持Python(通过PySpark)、SQL(Spark SQL)等,并且能够与PyTorch等深度学习框架以及MLflow等MLOps工具协同工作。目前,所有主流云服务提供商(AWS、Azure、Google Cloud)都提供托管的Spark服务。


实践:使用 Azure HDInsight

了解了Spark的理论后,本节我们来看看如何在微软Azure云平台上具体使用它。

我们将使用Azure HDInsight服务来部署和管理Spark集群。与Google Colab的“开箱即用”不同,使用生产级云服务需要更多的配置和管理意识。

以下是关键步骤和注意事项:

1. 订阅与配置
使用HDInsight需要有一个Azure订阅(例如“即用即付”模式)。即使有了订阅,也需要先注册“HDInsight集群”资源提供程序,才能创建集群。这个过程旨在让用户明确意识到即将使用一个可能产生高成本的生产级服务。

2. 集群成本与规模
成本控制是云使用的核心。在HDInsight中,您需要决定集群的规模,特别是工作节点的数量。每个工作节点都对应着特定的虚拟机配置(CPU、内存、GPU)。内存越大、核心数越多,成本就越高。

  • 头节点:管理集群,通常需要两个以实现高可用。
  • ZooKeeper节点:管理集群协调,所需资源较少。
  • 工作节点:执行实际任务,数量可弹性伸缩,是成本的主要部分。

用户可以根据需求随时扩展或收缩工作节点,这正是云计算的核心理念之一。例如,在年底处理大量数据时扩展到100个节点,而在平时缩减到几个节点。

3. 配额与资源可用性
为了防止意外产生巨额费用,云平台会设置资源配额。如果您需要创建超出配额限制的大型集群(例如需要特定类型的数百个CPU核心),必须手动申请提高配额。

4. 重要注意事项:集群生命周期管理
这一点与Google Colab有本质区别:关闭Jupyter Notebook界面并不会停止Spark集群。只要集群在运行,就会持续产生费用。因此,务必在不使用时通过管理控制台停止(Stop)集群(注意不是删除)。停止后不再计费,且以后可以重新启动。务必对集群规模和使用时间保持警惕,管理好成本。


应用案例:食品检查预测

在搭建好云环境后,本节我们引入一个新的应用案例来系统化实践机器学习流程。

我们将分析芝加哥市的食品检查数据,目标是通过餐厅的历史检查记录(如违规类型、厨房清洁度等文本数据),构建一个二元分类模型,预测餐厅在未来的检查中是否会“不合格”。这是一个典型的监督学习问题,因为历史数据已经被标记了“通过”或“失败”的标签。

我们将遵循一个系统化的机器学习流程,其数学构建模块如下:

1. 训练样本
这是机器学习的基础,没有数据就没有学习。数据通常表示为:

D = {(x1, y1), (x2, y2), ..., (xn, yn)}

其中 x 是特征向量(属性),y 是对应的标签。正如哥白尼海洋数据案例所示,真实场景中的 D 可能非常庞大。

2. 未知目标函数
存在一个未知的理想函数 f,它完美地定义了特征 x 与标签 y 之间的关系(即 f(x) = y)。我们的目标就是学习一个尽可能接近 f 的假设函数。


总结与预告

本节课中我们一起学习了将Apache Spark应用于云计算环境的核心知识。

我们首先回顾了机器学习的基础,指出了简单工具在应对大规模数据时的局限性。接着,我们深入介绍了Apache Spark这一可扩展的分布式计算框架及其架构。然后,我们详细讲解了如何在Microsoft Azure HDInsight云服务中部署和管理Spark集群,并重点强调了成本控制与资源管理的重要性。最后,我们引入了一个新的应用案例——食品检查预测,并开始构建系统化的机器学习流程视图。

在接下来的第二部分,我们将继续这个案例,深入探讨如何构建机器学习流水线,并利用Spark在云中高效地执行数据准备、模型训练、评估等完整步骤。

008:面向云应用的Apache Spark(第二部分)

在本节课中,我们将继续学习如何在云环境中使用Apache Spark进行机器学习。我们将基于第一部分的基础,深入探讨如何构建一个完整的机器学习管道,从数据准备、模型选择、训练到最终的评估。我们将使用一个食品检查数据的实际案例,演示如何使用Spark的MLlib库实现逻辑回归分类。


概述与回顾

上一节我们介绍了如何从Google Colab迁移到Microsoft Azure云平台,并设置了一个可伸缩的Apache Spark集群来处理更大规模的数据集。我们讨论了云计算的成本考量以及Spark集群管理的基本概念。

本节中,我们将聚焦于机器学习的实际应用流程。我们将加载一个真实的数据集,进行数据理解和预处理,选择一个机器学习模型(逻辑回归),构建训练管道,并最终在独立的测试集上评估模型性能。整个过程将在我们之前建立的Spark集群上分布式执行。


启动Spark会话

首先,我们需要在已运行的Spark集群上启动一个Jupyter Notebook会话并初始化Spark环境。

以下是初始化Spark会话并导入必要库的代码:

from pyspark.sql import SparkSession
from pyspark.ml import Pipeline
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.feature import HashingTF, Tokenizer
from pyspark.sql.functions import *

执行这段代码会启动一个Spark应用。与Google Colab不同,你会看到类似yarn application ID的输出,这表明你的应用已经连接到YARN集群资源管理器。该管理器负责调度和管理所有工作节点上的任务。现在,Spark上下文(SparkSession)已准备就绪,可以在Notebook中使用Python进行操作。


加载与理解数据

我们的应用案例是分析食品检查数据,目标是构建一个模型来预测检查结果是“通过”还是“失败”。这是典型的二分类问题。

我们有两个数据文件。首先,我们加载训练集 food_inspections1.csv

# 辅助函数:读取CSV数据
def load_data(file_path):
    # 此处为读取和解析CSV文件的代码
    ...

# 加载训练数据
training_data = load_data(‘food_inspections1.csv‘)

我们暂时将测试集 food_inspections2.csv 放在一边。在机器学习中,必须将训练数据和测试数据严格分开。模型只能从训练数据中学习,然后用从未见过的测试数据来评估其泛化能力。这是检验模型能否对未知数据做出准确预测的关键。

为了理解数据,我们可以查看一条记录:

# 查看一条数据样本
sample_inspection = training_data.take(1)
print(sample_inspection)

执行此操作时,Spark会在集群上启动一个作业(Job)。即使是一个简单的take(1)操作,也会触发分布式执行。你会看到类似“Spark有6个执行器,15个核心在运行”的信息。这直观地展示了云计算的分布式特性。

通过查看数据,我们发现数据集中包含Results(结果)和Violations(违规项)等字段,这些字段对于我们的分类预测至关重要。


数据准备:处理类别不平衡

在深入建模之前,我们需要进行数据准备。首先,我们检查目标变量Results的类别分布。

# 统计结果类别的分布
result_counts = training_data.groupBy(‘Results‘).count().collect()
print(result_counts)

分析发现,原始数据中有5个类别:Fail, Pass, Pass with Conditions, Business Not Located, Out of Business。然而,我们的目标是二分类(通过/失败)。因此,我们需要进行数据转换。

以下是数据准备步骤:

  1. 合并相关类别:将PassPass with Conditions合并为“通过”(标签1)。
  2. 保留核心类别Fail作为“失败”(标签0)。
  3. 移除无关类别Business Not LocatedOut of Business的样本数极少,对整体模型影响不大,因此将其过滤掉(标记为-1后删除)。
# 创建二进制标签
from pyspark.sql.functions import when

labeled_data = training_data.withColumn(‘label‘,
    when(training_data[‘Results‘] == ‘Fail‘, 0)
    .when(training_data[‘Results‘].isin([‘Pass‘, ‘Pass with Conditions‘]), 1)
    .otherwise(-1)  # 其他类别标记为-1
)

# 过滤掉标签为-1的数据,只保留0和1
binary_data = labeled_data.filter(labeled_data[‘label‘] >= 0)

这个步骤是CRISP-DM(跨行业数据挖掘标准流程)中“数据准备”阶段的一部分,目的是使数据适应我们选择的模型。


选择模型与假设集

现在数据已经准备好,我们需要选择一个机器学习模型。这对应着从庞大的“假设集”中选择一个特定的假设类型。

  • 假设集(H):所有可能模型的集合。例如,支持向量机(SVM)、神经网络、决策树、逻辑回归等都是不同的假设集。
  • 具体假设(h):在一个特定的模型(如逻辑回归)中,不同的模型参数(权重W)会构成无数个具体的假设(h1, h2, h3...)。
  • 目标(g):我们的学习算法将从假设集中选出一个最佳的假设g,希望它能很好地近似未知的真实目标函数f

我们选择逻辑回归作为我们的模型(假设集)。它是一个简单的线性学习模型,其输出通过逻辑函数映射到[0,1]区间,非常适合二分类问题。在Spark MLlib中,它已经内置实现。


构建机器学习管道

为了将整个流程系统化、可重复化,并便于未来部署,我们构建一个Spark ML管道。管道将数据预处理、特征工程和模型训练串联起来。

我们的管道主要包括以下阶段:

  1. Tokenizer(分词器):将文本字段(如Violations)拆分成单词。
  2. HashingTF(哈希词频):将单词转换为固定长度的特征向量。这是一种高效的特征工程方法,将文本转换为数学模型可以处理的数值形式。
  3. LogisticRegression(逻辑回归模型):这是我们选择的分类器。
# 定义管道的各个阶段
tokenizer = Tokenizer(inputCol=“Violations“, outputCol=“words“)
hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol=“features“)
lr = LogisticRegression(maxIter=10, regParam=0.01)

# 构建管道
pipeline = Pipeline(stages=[tokenizer, hashingTF, lr])

# 在训练数据上拟合管道,得到模型
model = pipeline.fit(binary_data)

拟合管道的过程会触发一系列Spark作业。你会看到多个任务在集群上执行,包括分词、特征哈希和模型优化迭代。


学习算法与误差度量

仅仅选择模型(如逻辑回归)还不够,我们还需要一个学习算法来找到模型的最佳参数(权重W)。

  • 学习算法:例如,随机梯度下降(SGD)或其变种(如Adam)。该算法通过迭代优化来最小化误差(损失)函数
  • 误差函数:衡量模型预测与真实标签之间的差距。对于逻辑回归,常用的损失函数是对数损失(Log Loss)。

公式表示为:min_W Loss(y, σ(W^T * x)),其中σ是逻辑函数。

在Spark中,优化器(如SGD)和损失函数(对数损失)都已集成在逻辑回归模型中。我们通过设置maxIter(最大迭代次数)和regParam(正则化参数)等超参数来影响学习过程。正则化有助于防止模型在训练数据上过拟合。


模型评估

模型训练完成后,我们必须评估其性能。现在,我们拿出之前预留的、从未使用过的测试集 food_inspections2.csv

# 加载测试数据
test_data_raw = load_data(‘food_inspections2.csv‘)

# 使用与训练集相同的数据准备步骤处理测试集
test_data_labeled = ... # 同样的标签转换
test_data = test_data_labeled.filter(...) # 同样的过滤

# 使用训练好的管道模型对测试集进行预测
predictions = model.transform(test_data)

model.transform() 方法会应用整个管道(包括特征处理),并使用训练好的逻辑回归模型进行预测。

接下来,我们使用混淆矩阵来评估预测结果:

from pyspark.ml.evaluation import MulticlassClassificationEvaluator

# 选择需要评估的列
evaluator = MulticlassClassificationEvaluator(labelCol=“label“, predictionCol=“prediction“, metricName=“accuracy“)
accuracy = evaluator.evaluate(predictions)
print(f“Test Accuracy = {accuracy}“)

# 也可以计算更详细的混淆矩阵
from pyspark.mllib.evaluation import MulticlassMetrics
# ... 将预测结果转换为RDD并计算指标

混淆矩阵展示了:

  • 真正例(TP):实际为“失败”且预测为“失败”。
  • 真负例(TN):实际为“通过”且预测为“通过”。
  • 假正例(FP):实际为“通过”但预测为“失败”。
  • 假负例(FN):实际为“失败”但预测为“通过”。

根据这些指标,可以计算出准确率、精确率、召回率等,全面评估模型性能。


总结

本节课中,我们一起学习了在云环境下使用Apache Spark完成一个端到端的机器学习项目。

  1. 环境与数据:我们在Azure HDInsight Spark集群上启动会话,并加载了食品检查数据集。
  2. 数据理解与准备:我们分析了数据分布,处理了多类别问题,将其转换为二分类问题,并清洗了数据。
  3. 模型选择:我们选择了逻辑回归模型,理解了其作为“假设集”的含义。
  4. 管道构建:我们创建了一个Spark ML管道,集成了文本特征工程(分词、哈希)和模型训练。
  5. 训练与优化:管道在训练集上拟合,利用内置的优化算法和损失函数自动学习模型参数。
  6. 评估与验证:最后,我们在独立的测试集上评估了模型性能,使用混淆矩阵等指标判断模型泛化能力。

整个过程充分利用了Spark的分布式计算能力,能够处理远超单机内存限制的大规模数据。同时,管道化的设计使得整个机器学习工作流可重复、易维护,为生产环境部署奠定了基础。

009:虚拟化与可扩展数据中心设计(第一部分)

在本节课中,我们将要学习虚拟化的基础知识,并探讨它如何成为现代云计算和多租户数据中心的关键推动力。我们将回顾虚拟化的核心概念,理解其如何提升资源利用率和系统灵活性,并为后续学习数据中心设计打下基础。

上一讲我们重点介绍了机器学习在云应用中的形式化方法,包括训练集、假设集、学习算法等核心概念。本节中,我们来看看支撑这些大规模计算和存储需求的底层技术——虚拟化。

虚拟化技术回顾

虚拟化是当今每位计算机科学家或工程师都应掌握的基础技术。它本质上通过一个抽象层,使云计算和多租户数据中心成为可能。

从传统计算到虚拟化

在传统计算机中,物理硬件之上直接运行着主机操作系统(如Linux或Windows),操作系统对硬件拥有完全的控制权。

传统架构

物理硬件 -> 主机操作系统 -> 应用程序

引入虚拟化后,架构发生了变化。在物理硬件之上,我们增加了一个虚拟化层(或称为管理程序)。这个层创建了一套虚拟化的硬件资源,可以被多个客户操作系统共享。

虚拟化架构

物理硬件 -> 虚拟化层(管理程序) -> 客户操作系统1 -> 应用程序1
                                     -> 客户操作系统2 -> 应用程序2

这种架构带来了巨大的灵活性。用户可以在同一台物理机器上同时运行Linux和Windows系统,并且每个虚拟机都是相互隔离的。

虚拟化的核心优势

以下是虚拟化带来的几个关键优势:

  • 提升服务器利用率:通过在一台物理服务器上运行多个虚拟机,可以将服务器利用率从传统的5%-15%显著提升至60%-80%甚至更高。这对于大规模数据中心节约成本和资源至关重要。
  • 支持多租户与隔离:不同用户或租户可以安全地共享同一硬件资源,因为每个虚拟机都是隔离的环境。这是云计算商业模式的基础。
  • 灵活性与可移植性:虚拟机可以轻松地暂停、存储状态、恢复,甚至迁移到另一台物理主机上。
  • 高可用性与容错:通过实时迁移技术,当一台物理主机出现故障时,其上的虚拟机可以几乎无感知地迁移到其他健康的主机上,从而保障服务的高可用性。这帮助云服务提供商实现其服务等级协议中承诺的高正常运行时间(如99.9%)。

虚拟机、镜像与实例

在云计算的语境下,有几个重要术语需要区分:

  • 虚拟机:一个完整的、隔离的软件计算机系统,它模拟了物理计算机的功能。
  • 虚拟机镜像:一个预配置的、包含操作系统和应用程序的静态文件模板。例如,一个预装了Ubuntu和Web服务器的镜像。
  • 虚拟机实例:从一个镜像启动并正在运行的虚拟机。你可以创建同一个镜像的多个实例。

主流云服务提供商(如AWS、Microsoft Azure、Google Cloud)都基于这些概念提供服务,允许用户从市场中选择预制的镜像快速启动实例。

虚拟化实现方式

虚拟化的实现主要有两种架构:

  1. 裸机虚拟化:虚拟化管理程序直接安装在物理硬件之上。这是性能最高、数据中心最常用的方式。
    物理硬件 -> 管理程序 -> 客户操作系统
    
  2. 主机虚拟化:虚拟化软件作为一个应用程序安装在现有的主机操作系统之上。这种方式更常见于个人电脑(例如,在Windows上安装VMware Workstation来运行Linux虚拟机)。
    物理硬件 -> 主机操作系统 -> 虚拟化应用 -> 客户操作系统
    

需要注意的是,容器化技术(如Docker)是另一种轻量级的虚拟化方案,它主要在操作系统层面进行隔离,共享主机内核,我们将在后续课程中详细讨论。

数据中心中的虚拟化管理

将虚拟化技术扩展到数据中心规模,带来了复杂的管理挑战和机遇。

大规模虚拟化基础设施

在数据中心,虚拟化不再仅仅是几台虚拟机,而是涉及成千上万的物理服务器、存储和网络设备,以及运行在其上的海量虚拟机。这需要一个强大的云操作系统虚拟化管理平台来统一管理。

以下是该平台需要处理的核心任务:

  • 资源供应:动态分配和回收物理资源(CPU、内存、存储、网络)给虚拟机。
  • 监控与计量:跟踪所有资源的使用情况,用于性能分析、计费和容量规划。
  • 安全管理:确保不同租户之间的隔离,管理访问权限和密钥。
  • 高可用与备份:实施灾难恢复策略,定期备份虚拟机数据。
  • 调度:智能地将虚拟机任务分配到最合适的物理服务器上,以优化资源利用率和能效(类似于Hadoop YARN或Spark集群的调度器,但范围更广)。

商业与开源解决方案

市场上有许多成熟的虚拟化解决方案,既包括商业软件如VMware vSphere,也包括开源方案如KVM。这些平台提供了上述大部分管理功能,帮助企业和服务提供商构建私有云、公有云或混合云基础设施。

本节课中我们一起学习了虚拟化的基本原理及其对云计算的革命性影响。我们了解了虚拟机如何通过抽象硬件来实现资源的高效利用、多租户隔离和高可用性。我们还探讨了虚拟机、镜像和实例的概念,以及虚拟化在数据中心规模下面临的管理挑战。在下一部分,我们将深入探讨可扩展数据中心的设计,包括物理布局、冷却系统和容错机制。

010:虚拟化与数据中心设计(第二部分)

在本节课中,我们将继续探讨数据中心设计,了解其核心原则、成本模型、基础设施考量以及实现可扩展性的关键因素。我们将看到,虚拟化技术如何支撑起现代大规模数据中心的经济效益和灵活性。

上一部分我们回顾了虚拟化的基本概念,如虚拟机、虚拟设备和虚拟机管理程序。本节中,我们将把这些概念置于更广阔的数据中心设计背景下进行考察。

数据中心设计原则

数据中心并非简单地将服务器堆放在房间里。在专业托管的数据中心中,计算资源以机架为单位进行组织。机架是一种紧凑的设计,能够容纳大量服务器,并优化冷却和网络互连。

以下是数据中心设计的一些核心原则:

  • 高密度与紧凑性:现代机架设计非常紧凑,能在有限空间内容纳更多计算和存储单元。
  • 高效冷却:冷却系统是数据中心运营的关键成本和设计重点,设计目标是最大化散热效率。
  • 高速网络互连:机架内部及机架之间需要高速、可靠的网络连接,以实现资源的紧密集成。
  • 规模经济:数据中心规模越大,其基础设施(如冷却、电力)的运营成本分摊越低,从而降低单位计算成本。

这种规模效应是云计算提供商(如微软、亚马逊)在全球建设数百个大型数据中心的主要原因,它们能够以更低的运营成本提供服务。

虚拟化与资源利用

在抽象层面,我们可以将庞大的数据中心建模为一个由许多物理服务器组成的集群。虚拟化技术在此发挥了核心作用,它允许创建虚拟集群,这些虚拟集群可以灵活地映射到底层物理硬件上。

虚拟化驱动了数据中心的高利用率,因为不同用户和应用有不同的需求。例如:

  • 一个虚拟集群可以横跨多个物理集群,以提高应用的可用性(如当某个物理集群因网络问题宕机时)。
  • 另一个虚拟集群可能完全独占一组物理资源,以满足特定的性能或隔离要求。
  • 像Apache Spark这样的应用,其虚拟集群可以根据工作负载需求动态扩展或收缩,增加或减少工作节点。

这种灵活性使得数据中心能够同时服务多用户和多应用领域,只要应用能够运行在虚拟机中,并利用虚拟化的计算资源。例如,某些虚拟集群可以提供配备GPU的节点,专门用于机器学习任务,而用户只需为实际使用的GPU资源付费。

成本模型:固定成本 vs. 可变成本

自行建设和运营数据中心与使用云服务在成本结构上有本质区别。

公式:总成本 = 固定成本(资本支出) + 可变成本(运营支出)

  • 自建数据中心:需要高昂的固定成本,包括购买服务器、GPU、网络设备、存储系统以及建设冷却和电力基础设施。此外,IT技术更新换代极快(例如NVIDIA GPU架构从Kepler、Ampere、Hopper到Blackwell),每隔几年就可能需要再次投入巨资进行硬件更新。
  • 使用云服务:用户主要承担可变成本,即“按使用量付费”。云服务提供商负责所有固定成本投入和基础设施维护,用户只需像使用水电一样,为实际消耗的计算、存储和网络资源付费。

这种“按需付费”的模式,尤其对于中小型企业、初创公司或需要尖端AI算力的用户而言,极大地降低了使用高性能计算资源的门槛,是云计算商业模式的一个突破。

数据中心基础设施考量

数据中心的基础设施成本因地理位置和规模差异很大,但有一些共同的核心考量因素:

以下是建设数据中心需要考虑的关键基础设施要素:

  1. 冷却系统:这是主要运营成本之一。寒冷地区(如冰岛、芬兰)可以利用环境空气进行自然冷却,具有显著优势。其他技术还包括温水冷却、浸没式液体冷却等。
  2. 电力供应与分配:需要稳定的电力来源。许多数据中心配备柴油旋转不间断电源(UPS),在主电源中断时提供短期备用电力,以满足服务级别协议(SLA)。
  3. IT设备:包括服务器、GPU、网络交换机、存储阵列等。高性能GPU和高速网络设备成本尤其高昂。
  4. 网络连接:数据中心内部(机架内/间)及对外都需要高带宽、低延迟的网络连接。
  5. 物理安全与认证:包括门禁系统、监控、防火(如使用惰性气体灭火系统)以及获得各种行业认证(如Uptime Institute的等级认证),这些对于赢得客户信任至关重要。

以冰岛的数据中心为例,它们不仅受益于寒冷的自然环境冷却,还拥有100%来自地热和水电的绿色能源,并且通常有多个独立的绿色能源来源,在环保和可靠性方面具有吸引力。

容错设计与可扩展性

在设计大规模数据中心时,必须默认硬件会发生故障。在拥有成千上万台服务器的环境中,CPU、硬盘、网络设备出现故障是常态。

因此,数据中心和运行其上的软件都内置了容错机制:

  • 软件层面:如Apache Spark、Hadoop HDFS(分布式文件系统)具备内置的容错和数据复制功能,任务失败后可自动重启,数据丢失可从副本恢复。
  • 虚拟化层面:支持虚拟机实时迁移(Live Migration),当物理服务器需要维护时,可将其上的虚拟机无中断地迁移到其他服务器。
  • 基础设施层面:采用冗余电源、网络路径和冷却系统。

可扩展性是用户选择数据中心的核心原因之一,它体现在多个维度:

  • 规模可扩展性:根据需求快速增加或减少计算、存储资源。例如,一款应用突然爆火,需要立即扩容服务器以应对用户流量。
  • 软件生态可扩展性:云平台提供丰富的、预集成且易于维护的软件栈(如各种版本的Apache Spark、PyTorch、TensorFlow),用户无需自行处理复杂的软件依赖和部署问题。
  • 应用可扩展性:应用本身能利用云平台的弹性来处理不断增长的数据量(从GB到PB)或计算需求。
  • 技术可扩展性:云服务商持续集成最新硬件技术(如新一代GPU、更快的网络、量子计算实验机),用户无需自行投资升级便能使用前沿技术。

云部署模型:公有云、私有云与混合云

根据所有权、访问和管理方式,云部署主要有三种模型:

  • 公有云:资源由第三方云提供商(如AWS、Azure、Google Cloud)拥有和运营,通过互联网向公众开放。提供最大的弹性和规模经济效益。
  • 私有云:云基础设施专供单个组织使用,可由该组织或第三方管理。通常部署在本地(on-premises),提供最高的控制力、安全性和定制化,例如医院管理敏感患者数据。
  • 混合云:结合公有云和私有云,允许数据和应用程序在两者之间共享。例如,医院将敏感数据保存在私有云,但将匿名化后的数据发送到公有云,利用其强大的GPU集群进行分析。

总结

本节课中,我们一起学习了数据中心设计的核心原则。我们了解到,虚拟化技术是实现数据中心高资源利用率、灵活性和多租户支持的基础。通过对比自建数据中心的固定成本模型与云计算的按需付费可变成本模型,我们明白了云计算的经济吸引力所在。我们还探讨了数据中心在冷却、电力、网络、容错和安全性等方面的基础设施挑战,以及冰岛等地凭借绿色能源和自然冷却获得的优势。最后,我们分析了数据中心提供的多种可扩展性维度和不同的云部署模型(公有、私有、混合)。所有这些因素共同构成了现代大规模、可扩展、经济高效的云计算基础设施的基石。

011:大数据驱动的深度学习 🧠

在本节课中,我们将学习深度学习的基础知识,并探索如何利用云计算资源来运行和扩展深度学习模型。我们将从简单的感知器模型开始,逐步深入到人工神经网络和卷积神经网络,同时理解计算复杂度如何随着模型复杂度的增加而急剧上升。

上一节我们回顾了虚拟化技术及其在云计算中的核心作用。本节中,我们将看看如何将这些虚拟化资源应用于计算密集型的深度学习任务。

课程回顾与背景

上一次课程简要介绍了虚拟化技术。对于计算机科学家和工程师而言,这如今应是一门基础技术。传统计算机,包括你的笔记本电脑,其硬件由主机操作系统直接访问,并运行着多个不同的应用程序。

虚拟化通过引入所谓的虚拟化层(也称为管理程序或虚拟机管理器)改变了这一模式。该层对底层真实硬件进行抽象,创建出虚拟化硬件。然后,客户操作系统(如Windows或Linux)可以在此虚拟硬件上运行,托管不同类型的应用程序,这就是虚拟机的概念。

今天,我们将学习如何在虚拟机中使用深度学习,并在云计算环境中进行大规模扩展。

从虚拟化到云计算

虚拟化带来了资源调度的灵活性。设想一个大型数据中心,你希望在上面运行Spark工作负载(我们在最初的课程中已经了解过)。物理集群由许多机架组成。虚拟化的概念允许你在这些物理集群之上创建虚拟集群

这种模式实现了更好的控制和更灵活的资源共享。不同的用户组(例如“绿色团队”和“红色团队”)可以根据应用程序和服务的需求,被调度到不同的虚拟集群上,而不是被绑定到特定的物理硬件上。

除了资源共享,虚拟化的另一个重要优势是实时迁移。如果某个机架上的硬件过热,你可以快速将应用程序迁移到其他正常运行的硬件上,从而减少云服务的停机时间。

在实际实现中,用户看到的是一个理想化的虚拟平台。其背后是大量的物理硬件,之上是虚拟化平台,再之上是管理整个虚拟基础设施的各种服务,包括负载管理、资源供应、调度、安全以及计费和用户管理等系统服务。

深度学习简介

需要声明的是,完整的深度学习介绍需要一门完整的课程。本讲座的目的是将Andreas Literman邀请讲座中的概念性内容,与云服务的实际应用连接起来。我们将回顾人工神经网络和深度学习网络(特别是卷积网络),并将其应用于手写字符识别这一经典基准问题。

我们将看到,深度学习的计算复杂度极高,这迫使我们离开CPU的领域,转向高性能计算和云计算。这正是本课程的一个核心目标:理解为何日益增长的可训练参数需要HPC和云计算的支持。

从简单模型开始:感知器

回想我们之前课程中的机器学习内容,我们有一个基本的简单线性感知器模型。其公式为:

输出 = 激活函数( Σ (权重_i * 输入_i) + 偏置 )

这是一个线性模型,其中权重是可训练的参数。

我们将使用MNIST手写数字数据集。该数据集包含28x28像素的手写字符图像,目标是将其分类为0到9这10个数字之一。这是一个10类分类问题,将我们之前讨论的二元分类扩展到了多类分类。

该数据集包含约60,000个训练样本和10,000个测试样本,是一个广泛使用的基准数据集,可通过Keras等框架轻松访问。

数据理解与准备

首先,我们需要理解数据。MNIST数据集中的图像是带有标签的(例如,某个图像被标记为“5”),因此这是一个监督学习问题。

然而,感知器模型期望的是一维向量输入,而我们的图像是二维的(28x28)。因此,我们需要一个数据准备步骤:将二维图像重塑为一个长向量(28*28=784维)。

注意:这种重塑操作会丢失像素之间的空间邻域信息,这是简单感知器模型的一个局限,我们稍后会解决这个问题。

以下是使用Python和Keras加载并准备数据的基本步骤:

from tensorflow import keras

# 加载数据
(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()

# 重塑数据为向量并归一化
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255

构建多输出感知器模型

我们的感知器模型需要处理10个类别。我们使用一个全连接层,直接将输入向量连接到10个输出神经元。这本质上是一个没有隐藏层的模型。

模型参数计算:输入784维,输出10维,加上每个输出神经元的偏置项。总参数数量约为 (784 * 10) + 10 = 7850

我们使用Softmax激活函数来输出每个类别的概率分布。优化器选择随机梯度下降,损失函数选择适用于多类分类的分类交叉熵

在Keras中构建和训练该模型的代码如下:

model = keras.Sequential([
    keras.layers.Dense(10, activation='softmax', input_shape=(28 * 28,))
])

model.compile(optimizer='sgd',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 将标签转换为分类格式
from tensorflow.keras.utils import to_categorical
train_labels_cat = to_categorical(train_labels)
test_labels_cat = to_categorical(test_labels)

# 训练模型
history = model.fit(train_images, train_labels_cat,
                    epochs=20,
                    batch_size=128,
                    validation_split=0.2)

# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels_cat)
print(f'测试准确率: {test_acc}')

在云计算环境中(例如使用AWS的Deep Learning AMI),你可以通过Jupyter Notebook或Python脚本运行此代码。这个简单模型可以达到约92%的准确率。

过拟合与欠拟合

在训练过程中,需要注意过拟合欠拟合

  • 欠拟合:模型没有充分学习数据中的模式。
  • 过拟合:模型过度学习了训练数据中的细节和噪声,导致在未见过的测试数据上表现变差。

我们通过观察训练损失和验证损失曲线来寻找最佳点。通常,我们会使用验证集和正则化技术来对抗过拟合。

迈向更强大的模型:人工神经网络

简单感知器是线性的,无法解决非线性可分问题(如经典的异或问题)。解决方案是引入隐藏层,构建多层感知器,即人工神经网络。

通过在隐藏层中使用非线性激活函数(如ReLU),模型可以学习更复杂的决策边界。

构建与训练

以下是在Keras中构建一个包含两个隐藏层的人工神经网络的示例:

model = keras.Sequential([
    keras.layers.Dense(128, activation='relu', input_shape=(28 * 28,)), # 隐藏层1
    keras.layers.Dense(64, activation='relu'),                         # 隐藏层2
    keras.layers.Dense(10, activation='softmax')                       # 输出层
])

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

model.fit(train_images, train_labels_cat, epochs=20, batch_size=128)

该模型的参数数量大幅增加至约11.8万个,计算复杂度显著上升。但其性能也提升至约97%的准确率。

训练过程:前向传播与反向传播

  1. 前向传播:输入数据通过网络层层传递,得到预测输出。
  2. 计算损失:比较预测输出与真实标签,计算损失值。
  3. 反向传播:利用链式法则,将损失从输出层向输入层反向传播,计算网络中每个参数(权重)的梯度。
  4. 参数更新:使用优化器(如SGD或Adam)根据梯度更新权重,以减小损失。

学习率是一个关键超参数:太小可能导致陷入局部最小值;太大可能导致在最小值附近震荡而无法收敛。

深度学习:卷积神经网络

人工神经网络在处理图像时,仍将输入视为扁平化的向量,忽略了空间结构。卷积神经网络专为处理网格状数据(如图像)而设计,它能保持数据的二维结构,并自动学习空间层次特征。

CNN核心概念

  • 卷积层:使用可学习的滤波器(小权重矩阵)在输入图像上滑动,进行特征提取。
  • 池化层(通常为最大池化):对特征图进行下采样,减少参数数量,增强特征不变性。
  • 全连接层:在网络的末端,将学习到的高级特征映射到最终的分类输出。

构建CNN模型

在Keras中构建一个简单CNN的示例:

model = keras.Sequential([
    # 卷积部分
    keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2)),
    # 展平后接全连接层
    keras.layers.Flatten(),
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 注意:输入数据需要保持2D形状 (28, 28, 1)
train_images_cnn = train_images.reshape((60000, 28, 28, 1))
test_images_cnn = test_images.reshape((10000, 28, 28, 1))

model.fit(train_images_cnn, train_labels_cat, epochs=5, batch_size=64)

对于这个“玩具”问题,CNN的参数数量可能激增至120万左右,但准确率可以进一步提升到99%以上。这清晰地展示了模型复杂度与计算需求之间的权衡:更强大的模型需要显著更多的计算资源(如GPU),而这正是云计算的优势所在。

总结与云计算实践

本节课中,我们一起学习了:

  1. 从感知器到CNN:回顾了从简单的线性感知器,到具有隐藏层的人工神经网络,再到专门处理图像的卷积神经网络的演进。
  2. 计算复杂度:认识到模型性能的提升伴随着可训练参数数量的爆炸式增长,这直接导致了极高的计算需求。
  3. 云平台支持:了解了主流云服务商(如AWS、Google Cloud)通过提供预配置的虚拟机镜像(如AWS Deep Learning AMI)来支持深度学习工作负载,这些镜像包含了TensorFlow、PyTorch、CUDA等必要的框架和库。
  4. 核心实践:掌握了使用Keras在云环境中构建、训练和评估基本深度学习模型的流程。

对于实际项目,请始终牢记:

  • 严格区分训练集验证集测试集
  • 密切关注过拟合现象,并考虑使用正则化、Dropout等技术。
  • 根据问题复杂度选择合适的模型,平衡性能与计算成本。

深度学习在云端的实践,完美体现了本课程将“大数据”处理需求与“云计算”弹性资源相结合的核心主题。在接下来的课程中,我们将探索更高级的云服务(如AWS SageMaker)和更复杂的模型。

012:云中的深度学习应用 🧠☁️

在本节课中,我们将学习如何在云环境中应用深度学习。我们将回顾深度学习的基础概念,并探讨如何利用云服务(特别是AWS)来应对深度学习模型带来的巨大计算需求。课程将涵盖从基础设施即服务到软件即服务的不同云服务层级,并演示如何利用SageMaker等服务来高效地训练和部署模型。


回顾:从感知机到深度神经网络

上一讲我们介绍了感知机模型。本节中,我们来看看如何从简单的感知机扩展到更复杂的深度神经网络。

感知机是深度学习的基础模型,其核心是一个线性学习单元。一个神经元的基本数学模型可以表示为:

公式: z = w1*x1 + w2*x2 + ... + wn*xn + b

其中,w 是权重,x 是输入,b 是偏置项。这个线性信号 z 随后会通过一个非线性激活函数 f(z),例如ReLU(修正线性单元),以引入非线性。

为了处理更复杂的问题(如识别0-9的手写数字,共10个类别),我们扩展了单神经元模型。我们不再使用一个输出神经元,而是使用10个神经元,每个对应一个数字类别。这形成了一个密集连接层,需要学习的参数数量也随之增加,达到了约8000个。

虽然8000个参数对于个人电脑来说或许可以处理,但这正是计算复杂性开始显现的地方。更多的数据意味着需要更频繁地进行计算,从而对计算资源提出了更高要求。


深度学习与计算挑战

当我们引入隐藏层,构建更复杂的神经网络(如人工神经网络ANN)时,情况发生了变化。模型无法再将输入直接连接到输出以计算误差,因此需要反向传播算法来更新各层的权重。

反向传播利用链式法则计算梯度,并逐层更新权重。随着网络层数和神经元数量的增加(例如,一个拥有128个神经元的隐藏层),需要训练的参数数量会急剧增长。在没有GPU的时代,这带来了巨大的计算挑战。

在上一讲的例子中,我们通过保留输入的2D结构(而非向量化)并引入卷积等操作,构建了卷积神经网络(CNN)。这虽然提升了模型性能(例如识别手写数字的准确率),但也使可训练参数的数量激增至约120万。

核心观点: 模型越复杂,可训练参数越多,对计算资源的需求就越大。当个人电脑需要数天甚至数周来完成训练时,转向云计算就成为了一个自然的选择。


云计算服务层级:从IaaS到SaaS

为了应对深度学习的计算需求,云服务提供了不同层级的解决方案。我们将以亚马逊AWS为例进行说明。

以下是云计算中常见的服务模型:

  1. 基础设施即服务:这是最基础的层级,提供虚拟化的计算资源。在AWS中,对应的服务是弹性计算云。用户可以直接操作虚拟机实例,完全控制操作系统和软件环境。
  2. 平台即服务:这一层级提供了预配置的软件环境和开发工具。AWS的深度学习AMI就是一个例子,它预装了TensorFlow、PyTorch等深度学习框架和操作系统,简化了环境搭建。
  3. 软件即服务:这是最高级的层级,提供完全托管的应用程序服务。AWS的SageMaker服务属于此类,它专门为机器学习打造,集成了Jupyter Notebook、自动化训练、模型调优等一系列功能。

每一层都构建在下一层的基础之上。选择越高层级的服务,管理越方便,但灵活性和成本控制能力可能会降低。


实践:在AWS中运行深度学习

我们将了解如何在AWS的不同服务层级上运行我们的深度学习代码。

使用EC2(IaaS)

EC2是AWS的基础计算服务。使用EC2需要以下步骤:

  • 创建密钥对(公钥上传至AWS,私钥保存在本地)用于安全连接。
  • 从众多亚马逊机器镜像中选择一个预装了深度学习环境的AMI。
  • 选择实例类型(如配备GPU的p3p4p5实例),并启动实例。
  • 通过SSH命令行连接到实例,手动运行Python脚本或转换后的Jupyter Notebook代码。

这种方式提供了最大的灵活性,但要求用户具备一定的系统管理技能,并且需要自行管理计算实例的运行状态和成本。

使用SageMaker(SaaS)

对于专注于算法和应用的机器学习开发者,SageMaker提供了更便捷的体验。

以下是使用SageMaker Notebook的主要优势:

  • 托管环境:无需管理底层基础设施,直接使用基于Web的Jupyter Notebook。
  • 轻松扩展:可以方便地为Notebook实例选择不同的计算类型(如CPU或GPU),甚至连接多GPU集群进行分布式训练。
  • 集成工具:内置了超参数调优、模型部署等一系列高级功能。

使用SageMaker Studio Lab(一个免费服务)可以几乎零门槛地开始,它非常类似于Google Colab,但允许使用更强大的预配置环境。

重要提示:在云中,计算实例只要处于“运行”状态就会持续产生费用,无论你是否正在 actively 使用它。因此,务必在不使用时停止或终止实例,以控制成本。


为什么需要GPU?速度与成本权衡

深度学习模型训练的核心运算(如矩阵乘法)具有高度的并行性,而GPU的架构正是为并行计算设计的。

以下是在云中使用GPU实例的考量:

  • 显著加速:与CPU相比,GPU可以将每个训练周期的耗时从数分钟缩短到数秒,极大提升了实验迭代速度。
  • 成本更高:更强大的GPU实例(如搭载NVIDIA H100的实例)价格昂贵,每小时费用可达数十甚至上百美元。
  • 按需选择:需要根据模型复杂度、数据量和项目预算,合理选择GPU实例类型。对于训练阶段,可以使用高性能实例;对于推理阶段,则可以切换到成本更低的实例。

总结与展望

本节课中我们一起学习了云中的深度学习应用。

我们回顾了深度学习模型从简单到复杂的发展过程,并理解了模型参数数量增长所带来的计算挑战。我们介绍了云计算的三个服务层级,并通过AWS的EC2和SageMaker服务,实践了如何在基础设施层和软件服务层部署和运行深度学习工作负载。最后,我们探讨了使用GPU进行加速的必要性及其背后的成本权衡。

核心收获:转向云计算不仅是为了处理海量数据,更是为了获得强大的计算能力,以高效训练参数众多的复杂深度学习模型。云服务提供了从底层硬件到顶层应用的全套解决方案,使研究人员和开发者能够专注于模型本身,而非计算环境的管理。

在下一讲中,我们将探讨参数规模达到数十亿级别的大型语言模型,并了解云计算如何支撑这类前沿AI模型的训练与应用。

013:云中的大规模语言模型与生成式AI 🚀

在本节课中,我们将要学习大规模语言模型和生成式AI的基本概念,了解它们在云计算环境中的重要性、工作原理、面临的挑战以及主要的云服务提供商如何提供相关服务。


概述

近年来,大规模语言模型和生成式AI已成为云计算和高性能计算领域日益重要的工作负载。与过去专注于分类和预测的传统AI不同,我们现在能够生成全新的文本、图像、声音和视频等内容。本节课将探讨这些模型的核心原理、计算需求、应用场景以及云服务商提供的解决方案。

上一节我们介绍了深度学习应用,本节中我们来看看如何将这些原理扩展到处理海量数据和参数的生成式模型中。


从深度学习到大规模语言模型

在上一讲中,我们学习了深度学习的基础,例如多层感知机和卷积神经网络。这些模型通过大量参数(如权重W)和激活函数来学习复杂模式。其计算复杂度随着网络深度和参数量的增加而显著上升。

一个简单的全连接神经网络层的前向传播可以表示为:
a⁽ˡ⁺¹⁾ = σ(W⁽ˡ⁾ a⁽ˡ⁾ + b⁽ˡ⁾)
其中,σ是激活函数,W是权重矩阵,b是偏置向量,a是激活值。

然而,我们今天讨论的Transformer模型等大规模语言模型,其参数量达到了数十亿甚至数千亿的级别,这远非我们之前讨论的百万级参数模型可比。这种规模的增长直接推动了对于强大计算资源(如云GPU集群)的需求。


序列建模的演进:从RNN到Transformer

在自然语言处理领域,早期的序列建模主要依赖于循环神经网络和长短期记忆网络。

以下是LSTM单元内部计算的一个简化示意:

# 简化的LSTM核心计算步骤(概念性代码)
i_t = sigmoid(W_i * [h_{t-1}, x_t] + b_i) # 输入门
f_t = sigmoid(W_f * [h_{t-1}, x_t] + b_f) # 遗忘门
c_tilde_t = tanh(W_c * [h_{t-1}, x_t] + b_c) # 候选记忆细胞
c_t = f_t * c_{t-1} + i_t * c_tilde_t # 更新记忆细胞
o_t = sigmoid(W_o * [h_{t-1}, x_t] + b_o) # 输出门
h_t = o_t * tanh(c_t) # 输出隐藏状态

这些模型在处理如情感分析等任务上表现出色。然而,当需要处理更长的文本序列、理解更广泛的上下文或生成高质量内容时,它们的局限性就显现出来。

这引出了2017年提出的Transformer模型,其核心创新是自注意力机制。该机制允许模型在处理一个词时,权衡句子中所有其他词的重要性,从而更好地捕捉长距离依赖关系。


大规模语言模型与生成式AI的核心

大规模语言模型通常是基于Transformer架构构建的“基础模型”。它们在海量无标注文本数据上进行预训练,学习语言的通用模式和知识。

这些模型的能力体现在多种下游任务中:

  • 内容生成:创作文章、故事、代码等。
  • 文档摘要:快速提炼长文档的核心内容。
  • 翻译:进行跨语言文本转换。
  • 分类与聊天机器人:用于客服、信息查询等交互场景。

驱动这些模型的关键是庞大的参数量。参数量与模型能力大致对应关系如下:

  • 1-30亿参数:适用于简单NLP任务,上下文理解较浅。
  • 70-130亿参数:可用于聊天机器人、文本摘要,具有中等计算需求。
  • 300亿参数以上:具备强大的代码生成和多语言翻译能力,需要大量GPU资源。

训练一个1750亿参数的模型(如GPT-3)可能耗资高达1200万美元,这凸显了云计算按需使用资源的优势。


开发流程:从预训练到任务微调

大规模语言模型的开发通常遵循一个分阶段的流程,这改变了传统的机器学习范式。

以下是典型的LLM开发流程:

  1. 预训练:在海量通用数据(如网页文本)上训练一个基础模型。这是计算成本最高的阶段。
  2. 对齐与微调:使用特定领域的数据集(如法律文书、医疗记录)对预训练模型进行微调,使其适应下游具体任务。此阶段常引入基于人类反馈的强化学习(RLHF)来优化模型输出,使其更符合人类偏好。
  3. 提示工程与部署:设计有效的输入提示(Prompt)来引导模型,并将其部署到生产环境(如税务咨询聊天机器人)。

这种流程的核心优势在于模型复用。昂贵的预训练只需进行一次,之后可以通过相对低成本的微调来适配各种应用,从而节省大量计算资源和能源。


挑战与局限

尽管能力强大,大规模语言模型仍面临显著挑战:

  • 幻觉:模型可能生成看似合理但实际不准确或完全虚构的信息,包括事实性错误或上下文无关的内容。
  • 数据偏见:模型会继承训练数据中的偏见和不公。
  • 计算与成本:训练和运行顶级模型需要巨大的算力,费用高昂。
  • 低资源语言困境:对于冰岛语等语料较少的语言,缺乏足够的高质量数据来有效训练大型模型。
  • 数据隐私与主权:将敏感数据(如医疗记录)发送至境外云平台进行处理可能违反数据保护法规(如GDPR)。这催生了强调数据本地化和符合地区价值观的“主权云”服务需求。

主要云服务商的解决方案

所有主流云服务商都已将LLM和生成式AI集成到其服务平台中。

以下是各云厂商提供的服务示例:

  • 微软 Azure:提供Azure OpenAI服务,集成GPT系列模型,并支持Mistral AI等第三方模型。
  • 谷歌云:通过Vertex AI平台提供Gemini等模型,并可与BigQuery等数据服务无缝集成。
  • 亚马逊 AWS:提供Bedrock服务,作为一个统一的平台来访问和微调来自AI21 Labs、Anthropic、Cohere、Meta和Stability AI等公司的多种基础模型。

这些服务通常构建在强大的AI专用基础设施之上,例如AWS的EC2 P5实例(搭载NVIDIA H100 GPU)。然而,使用这些顶级计算资源的每小时成本非常高昂,这使得在云上从头训练大模型对大多数组织而言并不经济,进一步凸显了微调预训练模型策略的重要性。


研究前沿与本地化实践

针对上述挑战,全球研究界正在积极寻求解决方案。

在冰岛,研究团队正致力于解决低资源语言问题。例如,“Trust-LLM”等项目旨在为冰岛语开发可靠的大语言模型。同时,在遥感等领域,研究重点转向多模态生成式AI,即模型能够处理和生成图像、雷达数据等多种类型的信息,用于土地覆盖分类等任务。

此外,得益于欧盟的资助,冰岛正在推进“AI工厂”等计划,旨在为医疗、气候、能源等关键领域的公共部门开发和应用AI基础模型,特别是专注于提升冰岛语语言模型的技术水平。


总结

本节课我们一起学习了云中的大规模语言模型与生成式AI。我们回顾了从深度学习到Transformer的演进,理解了LLM的巨大参数量及其带来的计算挑战。我们探讨了从预训练、微调到部署的模型开发生命周期,并认识了“幻觉”、成本、数据隐私等关键挑战。最后,我们了解了各大云厂商如何将LLM作为服务提供,以及研究领域在低资源语言和多模态AI方面所做的努力。生成式AI正在重塑云计算的工作负载格局,理解其原理和生态对于未来至关重要。

014:Map-Reduce计算范式 🗺️➡️🧹➡️📊

在本节课中,我们将要学习Map-Reduce计算范式。这是一种非常经典的计算模型,其思想可以追溯到计算机科学中的“分而治之”原则。我们将探讨它的基本原理、优势、适用场景,并将其与高性能计算进行对比。通过本课,你将理解Map-Reduce如何成为大数据处理生态系统的基石。

回顾:从深度学习到大数据处理

上一节我们介绍了生成式人工智能和大语言模型,了解了它们对高性能计算和云资源的巨大需求。这些模型拥有数十亿参数,需要强大的计算能力和海量存储。

本节中,我们将回到一个更基础但同样重要的云计算主题——Map-Reduce。这与我们在课程早期接触的Apache Spark密切相关。Map-Reduce不仅是分而治之思想的体现,更是高吞吐量计算的可行方案。它的优势在于隐藏了计算复杂性,并提高了系统的可靠性,这使得它在大数据生态中非常流行。

Map-Reduce的动机:从数据分析到大数据分析

理解Map-Reduce,首先要理解大数据分析与传统数据分析的区别。

以下是两者的核心区别:

  • 数据分析:深入探究数据,寻找因果关系。这通常耗时较长,常见于科学研究。
  • 大数据分析:更关注发现数据间的相关性,旨在快速发现新规律。这在商业领域能提供快速洞察。

许多大数据分析任务,如网页排名、搜索和社交网络图遍历,其子任务可以独立处理,彼此间无需频繁通信。这与物理模拟等高性能计算任务有本质不同,后者需要计算节点间进行大量、密集的通信。

计算范式的对比:HPC vs. HTC

这种任务特性的差异,催生了两种不同的计算范式。

以下是高性能计算与高吞吐量计算的关键区别:

  • 高性能计算:使用超级计算机,节点间通过高速网络(如InfiniBand)紧密互联。编程复杂,需要处理消息传递、共享内存等。适用于物理模拟、天气预报等强耦合问题。
  • 高吞吐量计算:使用由廉价商用硬件组成的集群,网络要求不高。任务可以高度并行、独立执行。Map-Reduce正是为此类场景设计,它将复杂的通信和容错机制隐藏在框架内部。

Map-Reduce的理念是“保持简单”,让非技术用户也能轻松处理那些可独立并行的问题,同时系统能自动处理硬件故障、任务重调度等复杂问题。

Map-Reduce核心思想:三步而非两步

Map-Reduce常被描述为“Map”和“Reduce”两个阶段,但实际上它包含三个核心步骤。

Map-Reduce流程可概括为以下三步:

  1. Map(映射):用户编写映射函数,处理输入数据块,生成一系列中间键值对。例如,在词频统计中,为每个单词输出 (单词, 1)
  2. Sort-Shuffle-Group(排序-混洗-分组)这是由框架自动执行的关键步骤。系统会根据中间键(如单词)对所有Map任务的输出进行排序、混洗和分组,将相同键的所有值集中到一起。
  3. Reduce(归约):用户编写归约函数,接收分组后的数据(一个键及其对应的值列表),进行汇总计算并输出最终结果。例如,将 (单词, [1,1,1,...]) 列表中的所有1相加,得到该单词的总出现次数。

这种设计将复杂的分布式通信和数据重组工作交给了框架,用户只需关注业务逻辑(Map和Reduce函数),极大地简化了并行编程。

实例解析:词频统计与推文分析

让我们通过一个具体的例子来理解这个过程。

假设我们分析一系列推文,进行词频统计。Map任务非常简单:每遇到一个单词,就输出 (单词, 1)。框架随后会自动将所有相同单词的“1”聚集起来。最后,Reduce任务将每个单词对应的“1”列表求和,得到最终词频。

伪代码示例

# Map 函数
def map_function(document):
    for word in document.split():
        emit(word, 1)

# Reduce 函数
def reduce_function(word, list_of_counts):
    total_count = sum(list_of_counts)
    emit(word, total_count)

框架会自动处理 (word, 1) 的排序、混洗和分组,使得 reduce_function 接收到的是 (word, [1, 1, 1, ...])

底层支撑:Hadoop生态系统

Map-Reduce理念最著名的实现是Apache Hadoop。Hadoop不仅是一个计算框架,更是一个生态系统。

以下是Hadoop生态系统的关键组件:

  • Hadoop MapReduce:计算引擎,负责调度和执行Map与Reduce任务。
  • HDFS:Hadoop分布式文件系统。它是一个高度容错的专用文件系统,默认将数据块复制到多个节点(通常为3份),确保数据可靠性和可用性。它采用主从架构,NameNode管理元数据,DataNode存储实际数据。
  • YARN:资源调度器,负责集群资源管理和作业调度。
  • 其他组件:基于此之上,发展出了Hive(SQL查询)、HBase(NoSQL数据库)、Mahout(机器学习库)等一系列工具,共同构成了大数据处理生态。

Hadoop的设计遵循“将计算移至数据附近”的原则,调度器会尽量将Map任务分配到存储有其所需数据块的节点上执行,以减少网络传输,这特别适合数据密集型应用。

Map-Reduce的局限与总结

本节课我们一起学习了Map-Reduce计算范式。它是一种强大的工具,但并非万能。

Map-Reduce主要适用于高吞吐量计算任务,其特点是子任务间通信很少或没有。例如,批量数据处理、日志分析、简单的统计汇总等。

然而,对于需要频繁迭代、节点间通信密集的任务,如大多数物理模拟、数值天气预报或复杂的深度学习训练(需频繁同步梯度),Map-Reduce则不是最佳选择。这类任务通常需要像MPI这样的高性能计算编程模型,以及InfiniBand这样的高速互联网络。

总而言之,Map-Reduce是大数据时代处理海量、可并行数据的基石性范式。它通过抽象底层复杂性,提供了一套简单可靠的编程模型,与HDFS等系统结合,共同支撑起了庞大而活跃的大数据生态系统。理解其核心思想、适用场景及局限,对于在云计算与大数据领域构建有效解决方案至关重要。

015:基础设施即服务 (IaaS) 🏗️

在本节课中,我们将学习云计算服务模型中的基础层——基础设施即服务。我们将回顾上节课的MapReduce概念,并将其与IaaS联系起来,同时探讨公有云、私有云和混合云的区别,并了解IaaS的核心组件、优势以及实际应用案例。

回顾:MapReduce与高吞吐量计算

上一节我们介绍了MapReduce这一并行计算范式。本节中,我们来看看它如何与云服务模型相结合。

MapReduce的核心思想源于“分而治之”的传统计算机科学理念。当面临需要分析的大数据问题时,我们可以将其分解为多个小任务,由不同的处理器或工作节点并行处理,最后再将结果合并。

以下是MapReduce的三个核心步骤:

  1. Map任务:将大问题分割成小任务。
  2. 分组、排序与混洗:由框架自动处理中间数据的组织。
  3. Reduce任务:合并各个小任务的结果。

这种模式天然具有可扩展性,因为我们可以根据可用资源动态增加工作节点。MapReduce框架(如Hadoop)的设计还包含了容错机制,例如当某个计算节点或Map任务失败时,框架会自动重新提交任务,确保整个应用能够完成,这与传统高性能计算(HPC)中一个错误可能导致整个应用崩溃的情况不同。

此外,Hadoop分布式文件系统通过数据分块和复制方案,确保了数据的可靠性和局部性,进一步支持了MapReduce的容错和高吞吐量计算。

理解云服务层级:IaaS、PaaS、SaaS

在深入IaaS之前,我们需要理解云计算的三个基本服务层级。它们面向不同的用户,提供了不同抽象级别的服务。

  • 基础设施即服务:提供最基础的计算资源。用户可以获取虚拟化的计算能力、块存储和网络资源,就像租用“裸金属”IT资源。用户需要自行管理操作系统、中间件和应用程序。示例:Amazon EC2(计算), Amazon S3(存储)。
  • 平台即服务:在IaaS之上,提供了一个用于开发、运行和管理应用程序的平台。开发者无需关心底层基础设施,可以专注于应用逻辑。示例:Google App Engine, AWS Elastic Beanstalk。
  • 软件即服务:提供完全成熟的、可通过网络访问的应用程序。最终用户无需安装或管理任何东西,直接使用即可。示例:Google Docs, Salesforce, Spotify。

这些层级之间的界限有时是模糊的,取决于使用者的视角。例如,一个预配置了深度学习框架的亚马逊机器镜像(AMI),既可以看作是IaaS(因为基于EC2虚拟机),也可以看作是PaaS(因为它为AI专家提供了一个即用的平台)。

部署模型:公有云、私有云与混合云

在讨论服务层级时,还需要区分云的部署模型,这是一个独立但相关的概念。

  • 公有云:资源由第三方云提供商(如AWS, Azure, Google Cloud)拥有和运营,并通过互联网向公众提供。用户共享底层基础设施。
  • 私有云:云基础设施专供单个组织使用,可以在本地数据中心或由第三方托管。它提供了更高的控制和安全性,适用于处理敏感数据(如医疗记录、汽车设计)。
  • 混合云:结合了公有云和私有云,允许数据和应用程序在两者之间共享。这种模式提供了灵活性,例如,企业可以在私有云中运行常规工作负载,而在需求激增时(如年终结算、促销活动)将峰值负载“爆发”到公有云。

这些部署模型可以与任何服务层级(IaaS, PaaS, SaaS)结合使用。

IaaS详解:核心、优势与案例

现在,让我们聚焦于今天的主角——基础设施即服务。

IaaS的核心组件

IaaS主要提供以下基础构建块:

  • 计算:虚拟服务器或实例(如AWS EC2),提供CPU、内存和GPU资源。
  • 存储
    • 对象存储:用于存储非结构化数据,如文档、图片、视频。通过RESTful API访问。示例:Amazon S3。
    • 块存储:像硬盘一样挂载到计算实例,用于需要文件系统结构的数据。示例:Amazon EBS。
    • 文件存储:提供共享文件系统,多个实例可以同时访问。示例:Amazon EFS。
  • 网络:虚拟网络、负载均衡器、IP地址等,用于连接和隔离资源。

IaaS的核心优势

以下是采用IaaS的主要好处:

  • 按需付费与弹性:用户只为实际使用的资源付费,并可以根据需求快速扩展或收缩资源,无需前期大量资本投入。这对初创公司尤其有利。
  • 降低运维负担:用户无需购买和维护物理硬件,由云提供商负责数据中心的运营。
  • 快速创新与部署:通过信用卡即可在几分钟内获取资源,加速了业务想法的验证和部署。
  • 全球可达性与可靠性:利用云提供商遍布全球的数据中心,可以就近部署服务,并获得高可用性保障。

案例分析:AWS上的服务栈

以亚马逊AWS为例,我们可以看到IaaS如何作为基础支撑起更上层的服务。

一个典型的机器学习应用栈可能包括:

  1. 底层(IaaS):使用EC2实例(特别是GPU实例如P3, P4, P5)提供计算能力。
  2. 中间层(PaaS):使用Amazon EMR(托管Hadoop/Spark框架)作为处理大数据的平台。
  3. 顶层(SaaS):数据科学家通过Amazon SageMaker(一个集成的机器学习开发环境)进行模型训练和部署,而无需关心底层的EC2或EMR。

在这个例子中,SageMaker用户可能完全不知道他们的Jupyter Notebook正在由下层的PaaS和IaaS服务支持。这种分层架构让不同领域的专家(如基础设施工程师、数据平台开发者、AI研究员)可以各司其职,高效协作。

成本考量

使用IaaS时需要密切关注成本,因为它会持续累积。以下是一些成本因素:

  • 实例类型:功能强大的GPU实例(如 p5.48xlarge)每小时费用可能高达98美元。
  • 存储类型与访问:标准对象存储(如S3标准层)比归档存储(如S3 Glacier)更贵,但检索速度更快。API请求次数(GET, PUT)也会产生费用。
  • 数据传输:数据传入云通常免费,但传出云(以及在不同可用区之间传输)可能产生费用。

IaaS与MapReduce的部署选择

结合我们之前讨论的MapReduce,企业在部署此类大数据平台时,有多种基于IaaS的选项,需根据自身情况权衡:

以下是几种常见的部署模式:

  • 完全本地部署:企业自行购买硬件,在本地数据中心安装、配置和运维整个Hadoop/Spark集群。优点是控制力强、数据完全自主;缺点是资本投入高、学习曲线陡峭、运维复杂。
  • 虚拟设备部署:使用预配置的Hadoop虚拟机镜像在企业的虚拟化环境(如VMware)中部署。降低了安装复杂度,但仍需自行管理虚拟机集群。
  • 托管虚拟化部署:由服务商提供托管的基础设施(IaaS),企业在其上自行部署和管理MapReduce软件。减少了硬件资本支出,按需付费,但平台软件仍需企业维护。
  • 完全托管服务:直接使用云提供商提供的MapReduce服务(如 Amazon EMR)。这是一种PaaS/SaaS模式,提供商负责所有底层基础设施、平台软件的安装、配置、扩展和运维。企业只需关注自己的MapReduce作业逻辑,实现最大程度的“拎包入住”。

选择哪种模式,取决于企业的数据隐私要求、技术能力、成本预算和对灵活性的需求。

绿色计算与冰岛的数据中心 🇮🇸

在考虑IaaS提供商时,可持续性和总拥有成本(TCO)日益成为重要因素。冰岛凭借其独特优势,正在成为数据中心的热门选址地:

  • 100%可再生能源:电力来自地热和水力发电,碳足迹极低。
  • 自然冷却:寒冷的气候允许大量使用环境空气冷却,显著降低了传统数据中心中昂贵的制冷成本。
  • 政治与经济稳定:为数据中心运营提供了可靠的环境。

这些因素使得在冰岛运营的IaaS设施不仅环保,而且在长期运营成本上可能更具竞争力。

总结

本节课中我们一起学习了云计算的基础层——基础设施即服务。我们首先回顾了MapReduce的高吞吐量计算范式,然后系统梳理了IaaS、PaaS、SaaS三个云服务层级的区别与联系,并明确了它们与公有、私有、混合云等部署模型是不同的维度。

我们深入探讨了IaaS提供的核心资源(计算、存储、网络),其按需付费、弹性伸缩的核心优势,并通过AWS的实际案例看到了IaaS如何作为基石支撑起更上层的PaaS和SaaS应用。最后,我们分析了MapReduce在IaaS上的不同部署选项,并了解了像冰岛这样的绿色数据中心在提供可持续IaaS方面的独特价值。

下一讲,我们将继续向上探索,学习平台即服务。

016:平台即服务 (PaaS) 🧱

在本节课中,我们将要学习平台即服务。我们将基于之前关于基础设施即服务的内容,探讨如何利用可扩展的基础设施来提供更多的平台组件。我们将从开发者的视角,了解PaaS如何提供一系列现成的“乐高积木”式构建块,以简化云应用的开发、部署和扩展过程。

上一节我们介绍了基础设施即服务,它关注的是硬件资源的虚拟化与管理。本节中我们来看看平台即服务,它将视角转向了应用开发。

云服务模型回顾

在深入PaaS之前,我们先简要回顾一下云服务模型。当前,一切皆可“即服务”,但本课程中有三个核心术语需要牢记:基础设施即服务平台即服务软件即服务

下图清晰地展示了这三者的关系。软件即服务也可以理解为应用即服务,用户可以直接使用现成的应用,例如企业资源规划、财务应用或客户关系管理工具。

然而,这些SaaS应用本身通常也是由云构建块搭建而成的。平台即服务提供了大量的“乐高积木”,开发者可以将它们组合起来,构建自己独特的SaaS应用。

因此,当我们深入到平台即服务这一层时,视角发生了转变。我们将关注构建云应用所需的核心构建块,这很大程度上与数据相关。

从IaaS到PaaS的演进

上一节关于基础设施即服务的讲座,主要思考的是底层基础,即硬件本身。你可以想象一个灵活的、无处不在的云,但其根基是真实的硬件:计算、存储和网络。

平台层就构建在这个基础之上。需要理解的是,IaaS和PaaS之间的界限并非绝对严格。

例如,回顾一下我们上次讨论的EC2。这是亚马逊提供的计算服务,你可以选择所需的服务,如GPU、CPU,并按使用付费。S3对象存储服务也是如此,你无需关心数据具体存储在哪个文件里,只需通过键值对存取数据。

这些服务构成了基础设施的基础。但像AWS存储平台这样的服务,已经处于边界地带,它既提供了底层存储,也作为一种平台,支持你存放数据。

因此,平台即服务很好地承接了这些服务。从开发者的视角看,IaaS涉及大量基础设施的管理、硬件配置和虚拟化,而PaaS则更多地转向应用开发。

这种转变也体现在MapReduce的使用上。你可以在IaaS层面自行搭建MapReduce集群,也可以使用预装的MapReduce设备,或者更进一步,直接使用托管式的MapReduce服务,即MapReduce即服务。这体现了从裸金属、虚拟化逐渐向云端服务的迁移过程。

开发者视角与核心构建块

今天,我们将从云应用开发者的视角来理解PaaS。我们将简要讨论不同层级,然后快速进入核心:云解决方案中已经实现了大量的“乐高积木”,开发应用无需从零开始。

我们将以Google App Engine为例,看看平台层提供了哪些帮助开发的构建块。当然,这类服务非常多,我们只挑选一些非常核心的,例如NoSQL数据库、键值存储、文档存储等。

所有这些都围绕着可扩展性这一核心理念。当我们转向Google云时,目标就是能够轻松扩展,从几个用户迅速增长到数百万用户。这就需要专业的监控、故障管理等,这些都是云应用开发的一部分。

应用还有其生命周期,包括版本控制等,我们也会稍作讨论。当然,完整的应用开发是一门大学问,本讲座只是简要介绍PaaS层的一些关键构建块,包括定价模型,目的是让大家理解:今天,几乎所有功能都已实现,你只需组合这些“乐高积木”,并添加自己独特的价值。

PaaS概述与开发工具

让我们再次简要回顾,因为我们在第9讲讨论IaaS时,已经谈到了许多虚拟化的IT资源,它们已经处于PaaS的边界。

现在,PaaS的核心思想是真正转向开发视角。如下图所示,在PaaS层面,你可以看到许多现成的构建块,用于创建你自己的应用。

需要说明的是,这不仅适用于Google App Engine,亚马逊、微软Azure等其他云提供商也提供了大量构建块。我们这里主要关注Google App Engine,它在开发支持方面非常强大。

PaaS层本质上包含了对基础设施的访问,如计算、存储和网络服务,但其重点更广泛:我们需要操作所有这些,并需要大量的开发工具、数据库管理、业务分析、机器学习算法等,然后才能构建出完整的托管应用。

在PaaS层面,你会看到许多软件开发工具包、应用程序编程接口,你可以用自己喜欢的语言进行开发,如Java、Python、Ruby等,并伴随着强大的数据管理支持。

案例研究:Spotify

一个众所周知的例子是Spotify。这款应用几乎由一半以上的课程参与者使用,它正是基于这种利用云服务构建块的理念。

Spotify拥有出色的用户界面,从一家初创公司发展起来,现在拥有海量的授权歌曲。它通过利用其他云供应商的服务来实现大规模扩展,例如使用AWS的Elastic MapReduce和Spark。Airbnb和Spotify都使用这些服务。

这表明你可以很好地混合使用不同云提供商的服务,通过REST接口进行集成。这进入了软件工程的领域。对于想成为平台或应用开发者的人来说,还需要学习软件工程,特别是应用工程的相关课程。

Google Cloud Platform 与开发生命周期

在Google云平台中,底层仍然是基础设施即服务层,例如虚拟机实例、独特的TPU处理单元、典型的GPU等,它们通常按小时计费。

当你创建云应用时,一切都会在Google Cloud的开发引擎中围绕应用开发进行组织,底层则利用可扩展的IaaS。

这种方式支持了完整的开发生命周期。首先,你使用App Engine构建、测试和部署应用。你在本地进行开发,但当你需要向全球扩展时,就必须转向像Google Cloud这样的专业云提供商,它为你提供了大量可扩展的IaaS资源和数据处理能力。

这就是整个开发生命周期的理念:扩展到你的用户规模,并且不让用户察觉到容量不足。然后你利用云在IaaS层面进行扩展。

但今天的重点是思考这些“乐高积木”。在拥有基础设施和应用引擎生命周期支持的基础上,PaaS还包括构建应用所需的乐高积木,以及版本控制、流量监控等全套理念。所有这些都得到了很好的支持,并且本质上是高度可扩展的,因为它由Google Cloud中的IaaS管理。

PaaS的优势与成本考量

使用PaaS可以大幅削减成本。通常,维护自有基础设施需要管理员、软件专家和存储专家。而使用云服务,例如可以无性能问题地扩展到30TB以上,这需要相当好的基础设施才能实现。

良好的用户体验是关键。通过利用云服务,你可以自动扩展到数百万用户,而不是在自有服务器上进行可能无法顾及扩展性的应用开发。

当然,使用这些服务是有成本的,你需要将其纳入应用的定价模型。但你在版本控制、可扩展的用户体验方面会更加安全。

以下是移动游戏后端可能需要的初始构建块:

  • 你需要游戏地图和游戏服务器。你可以使用App Engine及其特定的数据存储服务。
  • 操作层面的云监控、日志记录、错误报告和跟踪,帮助你理解应用的使用情况。
  • 数据处理和分析构建块,如BigQuery等,用于分析应用运行状况。
  • 发布/订阅机制,用于应用内的通信。

这些乐高积木用户通常看不见,但能体验到其带来的可扩展性。许多操作是自动化的,例如可以在凌晨2点自动添加存储,但你需要为此付费。

审视定价选项很重要。云服务中有许多不同的构建块。例如,入站网络流量可能是免费的,这鼓励你将数据迁移到Google Cloud,但如果你想将所有数据移出,则可能需要支付费用,这在一定程度上阻止你轻易迁移到其他平台。

另一个例子是搜索服务。如果你想在应用中使用高性能搜索API,则需要付费。这些单价看起来不高,但考虑到应用7x24小时运行,成本可能会累积。

NoSQL数据库:核心构建块

现在让我们看看流行的现代PaaS构建块,其中一些已经间接提到过,比如BigTable。今天我想强调的一个核心元素是NoSQL数据库

这些也是极其常用的乐高积木,主要是因为它们通常具有很高的读取性能,写入约束较少,一致性模型不如SQL数据库严格。对于大量只读操作的应用场景,这能显著降低延迟并提高吞吐量。

当然,这并不意味着SQL数据库不再需要。例如,飞利浦Hue智能照明系统就基于Google Cloud的NoSQL数据存储,因为它需要高性能和可扩展性,以处理每天2亿次的事务和2500万条远程照明命令。使用云服务让飞利浦能够专注于产品开发,并以十分之一的人力实现十倍于其他类似项目的规模。

良好的用户体验是关键。像《愤怒的小鸟》这样的游戏之所以成功,部分原因在于其初始版本就能很好地扩展,没有使用问题,这与一些未充分利用云特性的游戏不同。

NoSQL的特性本应是一门完整的大学课程。它简化了应用开发,没有严格的模式约束。在SQL中,你通常以模式开始,而在NoSQL中,更多的是键值对的思想。

云数据存储有点类似,但它没有SQL中那种严格的模式,也没有存储过程和触发器。它以不同的方式描述关系,这使你能够轻松地扩展。

NoSQL数据库类型举例

以下是一些主要的NoSQL数据库类型:

Cloud Bigtable:这是一个非常知名的列式数据库,可以扩展到PB级数据。它底层与Google文件系统类似,但采用更多基于字符串的方法。它不强制要求每个记录都有所有字段,这在处理金融时间序列数据、机器学习等场景中非常有用,可以作为数据流处理的存储平台。

HBase:这是一个列式数据库。从概念上看,它仍然像一张表,但物理上,空字段并不存储,从而节省空间。并非每个元素都拥有所有信息。

MongoDB:这是一个文档数据库,使用类似JSON的简单符号。数据可以包含不同类型的信息,文档之间可以轻松链接。创建文档非常快速,不像SQL世界那样有严格的模式约束。

Apache Cassandra:这是一个键值型数据库,被许多应用使用。它通过设计就是分布式的,可以轻松部署到不同节点,实现地理分布,满足不同国家用户的体验需求。

总结与展望

本节课中我们一起学习了平台即服务。由于时间有限,我们只能简要介绍。对于想深入了解的同学,网上有更完整的资源。

总结一下,PaaS能大幅减少编码时间,提供大量开箱即用的开发能力,包括完整的生命周期支持、机器学习、自动化的存储伸缩以控制成本。它支持多平台,采用按需付费模式,并提供了复杂的工具来帮助你了解用户行为,从而改进应用。

开发工具也非常强大,涵盖了云开发者所需的一切。其他案例如沃达丰集团将600个本地Hadoop服务迁移到Google云,Twitter将其本地Hadoop迁移到Google云以降低成本。

最后,我们以《愤怒的小鸟》为例。它在发布后迅速获得1.4亿次下载,这得益于直接采用Google Cloud,从而能够快速扩展。他们使用了Memcached API来提供临时性的高速数据访问,而不是自己开发软件。

此外,自然语言处理、大型语言模型等也可以作为乐高积木轻松集成到你的应用中,例如用于情感分析、文本转语音、翻译等服务。

总而言之,PaaS提供了巨大的优势。无论你将来是成为开发者还是从事其他工作,了解云平台中可用的服务总是有益的。

本节课关于平台即服务的内容到此结束,我们下次将继续讨论更高层级的软件即服务。

017:大数据分析与云数据挖掘 📊

在本节课中,我们将学习大数据分析的两个核心领域:关联规则挖掘,以及深度学习在医疗健康领域的应用。我们将探讨这些技术如何利用云计算资源来处理海量数据,并理解其背后的核心算法与工作流程。

关联规则挖掘与大数据

上一讲我们介绍了软件即服务(SaaS),它为在线数据分析提供了强大的平台。本节中,我们来看看如何利用这些服务进行关联规则挖掘。

关联规则挖掘是一种无监督机器学习方法,用于发现数据集中项之间的有趣关系。一个经典的例子是超市购物篮分析,通过分析顾客的购买记录,可以发现诸如“购买尿布的顾客也倾向于购买啤酒”这样的规则。

核心算法:Apriori 与 FP-Growth

以下是两种最常用的关联规则挖掘算法。

Apriori 算法
Apriori 算法通过迭代扫描事务列表来构建频繁项集。其核心思想是:一个频繁项集的所有子集也必须是频繁的。研究者需要设定一个最小支持度阈值,算法会生成所有支持度不低于此阈值的项集。

伪代码示例:

对于每个项集大小 k:
    生成候选 k-项集
    扫描数据库,计算每个候选的支持度
    保留支持度 >= 最小支持度的项集
    直到没有新的频繁项集产生

FP-Growth 算法
与 Apriori 的多轮扫描不同,FP-Growth 算法仅需扫描数据库两次。它首先构建一个紧凑的数据结构——FP 树(频繁模式树),然后直接从该树中挖掘频繁项集,效率更高。

效率对比
在处理大规模数据集时,FP-Growth 算法通常比 Apriori 算法更高效,因为它避免了生成大量候选集和重复扫描数据库。

云服务实现

这些算法已在各大云平台中实现。

以下是部分云服务提供的关联规则挖掘工具示例:

  • IBM Cloud Pak for Data: 提供了现成的 Apriori 算法实现作为关联规则节点。
  • Microsoft Azure: 通过 MLlib 库支持 FP-Growth 等算法。

用户可以直接在云端调用这些服务,无需在本地安装任何软件,但需要合理配置以控制计算成本。

医疗健康领域的数据挖掘与深度学习

接下来,我们将视角转向一个具体的应用领域——医疗健康,看看深度学习如何在此发挥作用。

深度学习,特别是卷积神经网络(CNN),已广泛应用于图像识别、自然语言处理等领域。在医疗领域,它常被用于分析医学影像,辅助医生进行诊断。

从问题到解决方案:迭代过程

实施一个机器学习项目并非一蹴而就。它通常遵循一个理解问题、处理数据、建模、评估并不断迭代的过程。

以医学影像分析为例:

  1. 理解问题: 例如,早期诊断急性呼吸窘迫综合征(ARDS)。
  2. 处理数据: 收集并标注胸部X光或CT影像数据。
  3. 选择与适配模型: 由于医疗数据通常有限,常采用迁移学习。例如,使用一个在大型公共数据集(如ImageNet)上预训练好的CNN模型,移除其最后的分类层,替换为针对ARDS的新分类层,然后用有限的医疗数据对模型进行微调。
  4. 评估与迭代: 评估模型性能,根据结果返回调整数据、模型参数或问题定义。

应对数据挑战:数据增强

在数据量不足时,数据增强是一种有效技术。通过对原始训练图像进行旋转、翻转、缩放、裁剪等变换,可以人工扩充数据集,帮助模型学习更鲁棒的特征,防止过拟合。

代码示例(使用Python的Keras库):

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True
)
# 使用 datagen.flow 来生成增强后的批量图像

标准流程:CRISP-DM

上述所有步骤都契合一个行业标准流程——跨行业数据挖掘标准流程(CRISP-DM)。它强调项目的循环迭代特性,包含六个阶段:业务理解、数据理解、数据准备、建模、评估和部署。始终在这一框架下思考,能确保研究方法的严谨性和结果的有效性。

合作与跨学科应用

最后需要强调的是,大数据与人工智能领域的进步极大地依赖于合作。计算机科学的方法正在深刻改变物理学、生物学、医学等众多学科的研究范式。保持开放协作,分享知识与见解,是推动创新和解决复杂问题的关键。

本节课中我们一起学习了关联规则挖掘的核心算法(Apriori和FP-Growth)及其云上实现,并深入探讨了深度学习在医疗数据分析中的应用流程,包括迁移学习和数据增强等关键技术。记住,理解你的数据、清晰定义问题,并在CRISP-DM等标准流程的指导下进行迭代开发,是成功实施任何数据挖掘项目的基石。

018:超参数优化与AutoML 🚀

在本节课中,我们将学习机器学习中两个至关重要的概念:超参数优化自动化机器学习。我们将探讨什么是超参数,介绍几种寻找最优超参数的算法,并了解在何种情况下应使用哪种算法。最后,我们将介绍两个实用的工具:Ray Tune和AutoGluon,帮助你实际运行超参数优化任务。


什么是超参数?🤔

超参数是影响机器学习模型性能的参数。这些参数通常在训练开始前由用户设定。它们可以包括:

  • 架构参数:例如模型类型、层数和种类、激活函数类型。
  • 优化过程参数:例如优化器类型、学习率、动量值。
  • 机器学习流水线参数:例如在计算机视觉任务中,图像的旋转、裁剪、归一化等预处理步骤的参数。

为了更清晰地理解,我们可以将参数调优分为三个预定义的领域:

  1. 神经架构搜索:专门处理架构参数。
  2. 经典超参数优化
  3. 自动化机器学习:在超参数优化基础上,增加了对整个机器学习流水线的优化。

找到好的超参数对模型成功至关重要。为了直观展示,下图是一个在CIFAR-10数据集上训练的简单残差网络的学习曲线。可以看到,仅通过选择正确的学习率,模型性能就能产生天壤之别——从准确率超过80%到完全失败(仅10%的验证准确率,相当于随机猜测)。

这些图表也揭示了超参数选择为何如此困难:通常无法做出通用预测。你无法简单地说“大学习率好”或“小学习率好”,必须找到或接近正确的值才能获得良好性能。


核心概念与挑战 🎯

在深入之前,我们先明确一些术语:

  • 搜索空间:指超参数及其采样区间的集合。
  • 配置:从搜索空间中采样得到的一组超参数值。
  • 试验:使用一组采样的超参数配置运行一次训练过程。

超参数优化之所以困难,主要原因有两点:

  1. 搜索空间复杂:通常包含不同类型(离散如层数、连续如学习率)的参数,无法像梯度下降那样计算梯度来寻找最优解。
  2. 计算成本高昂:只有完全训练模型后,才能确定其配置的性能。这意味着必须完整训练大量模型才能找出最佳参数。

由于缺乏通用的指导方法,目前很多工作仍依赖于人工试错。但我们的目标是采用更系统化的方法。


超参数优化算法 🔍

基础方法:随机搜索与网格搜索

最简单的方法是随机搜索网格搜索

  • 随机搜索:从超参数搜索空间中随机采样。
  • 网格搜索:评估所有可能的超参数组合。

有趣的是,随机搜索是一个非常好的起点。当你对问题一无所知时,至少应该进行一些随机搜索。这两种方法本质上都是“令人尴尬的并行”任务,不同试验之间几乎不需要通信。

然而,这两种方法会浪费大量计算资源在那些可能早期就表现不佳的试验上。因此,我们需要更高效的方法。


加速优化:自适应方法

有两种主要途径来加速随机或网格搜索过程:

  1. 自适应选择配置:使用贝叶斯优化或进化算法等选择更好的配置进行评估。主要挑战在于高维搜索空间可能使这些方法失效。
  2. 自适应调度试验:提前终止表现不佳的试验,并将其计算资源重新分配给更有希望的试验。这是我们本节课的重点。

自适应调度的核心问题是:在缺乏先验信息的情况下,如何判断一个试验的好坏?

观察一些计算机视觉模型的学习曲线可以发现,通常在训练早期(例如前50个周期),通过比较不同试验的曲线,就能初步判断其优劣。当有多个试验并行运行时,这种比较成为可能,由此引入了连续减半算法。


连续减半与超带算法

连续减半的基本思想很简单:早期终止不良试验,将资源重新分配给更有希望的试验。实践中,流程如下:

  1. 从一定数量的初始配置开始。
  2. 训练几个周期后,根据验证损失或准确率对所有试验进行相对排名。
  3. 终止排名靠后(例如后50%)的试验,仅继续训练排名靠前(如前50%)的试验。
  4. 重复此过程,最终希望得到损失最低的单个试验。

随之而来的关键问题是:如何平衡计算资源?是应该在初期运行更多试验以进行探索,还是应该让最佳试验运行更长时间以进行利用?

超带算法通过执行具有不同“激进程度”的连续减半来扩展经典方法。例如,第一轮可能每20个周期削减一次,下一轮则每40个周期削减一次。希望通过不同激进程度的配置,也能捕捉到那些起步较慢但后期强劲的试验。


异步超带算法

在拥有大量并行资源(如高性能计算系统或云环境)的场景下,经典超带算法可能遇到性能问题。原因在于每个决策点都存在隐式的时间屏障:为了判断试验好坏,必须等待所有其他训练运行达到相同的周期数。

异步超带算法解决了这个问题。其核心思想是:在每个决策点,算法查看所有已有性能信息的试验的当前状态。如果一个试验属于当前最佳部分,则允许其继续;如果属于较差部分,则将其停止;如果算法不确定,则继续训练以确保不会过早终止一个有潜力的快速试验。


自适应选择方法:贝叶斯优化

除了自适应调度,另一种主流方法是自适应选择配置,其中最突出的是贝叶斯优化

其思想是构建一个计算成本低廉的代理模型,来模拟原始大型机器学习模型的性能。存在许多使用不同贝叶斯方法的算法和库,例如SMAC、Dragonfly、Optuna或DEHB。

这些库面临的主要挑战是如何处理大量并行结果,因为贝叶斯优化通常是顺序过程。此外,贝叶斯优化有时在高维搜索空间中也会遇到问题。不过,像SMAC、Dragonfly、Optuna,尤其是DEHB,都非常注重工作负载的并行化。

当然,也可以将贝叶斯优化与我们之前看到的超带方法结合起来,这种算法被称为BOHB


如何选择算法?📊

了解了多种方法后,自然要问:何时使用哪种算法?以下是一个基于经验总结的决策流程:

  1. 查看搜索空间维度
    • 如果超参数很少(≤2个),网格搜索或随机搜索仍然可行。网格搜索更有条理但计算量更大。两者都是很好的起点,并且在并行设置中运行良好。
  2. 搜索空间较大时(通常>3个参数),查看每次试验所需的计算时间
    • 如果计算资源充足且每次试验时间很短(<5分钟),即使对于较大搜索空间,仍可进行随机搜索。
    • 但深度学习模型通常训练数小时,因此需要依赖自适应调度方法以提高计算效率。
  3. 判断你的问题是否是“后发学习者”
    • “后发学习者”指模型性能的最大提升发生在训练中后期。虽然超带和异步超带算法试图避免过早终止好试验,但仍可能错过最优组合。
    • 不过,大多数机器学习问题的学习曲线在训练初期提升最大,因此通常可以安全使用超带或异步超带算法。
  4. 考虑你想要运行的试验数量
    • 如果试验数量相对较少(例如<200次),依赖贝叶斯优化方法(或与超带结合的BOHB)非常高效。
    • 如果搜索空间非常大且需要运行大量试验,那么你可能需要回到随机搜索或异步超带算法,因为计算需求迫使你依赖这些自适应调度方法。

其他优化方法与实用技巧 💡

除了上述方法,还有一些完全不同的优化思路:

  • 强化学习:使用强化学习智能体选择超参数组合,并将试验性能作为奖励。
  • 梯度下降:对架构搜索空间进行特殊表示,从而可以计算梯度并使用梯度下降进行优化,这通常是非常高效的方法。
  • 零成本代理:研究诸如神经网络参数总数等“零成本代理”指标与最终模型性能的关系,并以此进行预测,这种方法效果出奇地好。
  • 大模型超参数优化:在只能负担一次大型训练的大模型时代,通常的做法是在小模型上寻找最优超参数,然后通过某种方式将这些参数迁移到大模型上。

以下是一些实用的超参数优化技巧:

  • 联合优化:如果计算资源允许,尝试同时优化神经架构和经典超参数,因为它们通常相互影响。
  • 调整减半激进程度:在实践中,通常只需保留排名前30%甚至25%的试验,终止其余部分,可以节省大量计算资源。
  • 谨慎对待批量大小:不要将批量大小视为超参数。通常,较小的批量大小能带来更好的泛化性能,但需要更多计算。建议将批量大小增加到单个GPU能处理的最大值,然后专注于优化学习率,因为两者存在关联。
  • 精心选择搜索空间区间:例如,权重衰减这个超参数非常敏感。如果该参数过小或过大,即使其他参数(如学习率)已处于最优位置,所有试验也可能表现不佳。
  • 使用独立的数据集:进行超参数优化时,你需要三个独立的数据集:
    1. 训练集:用于训练模型。
    2. 验证集:用于验证性能,并据此选择最佳超参数组合。
    3. 测试集:用于最终评估在验证集上找到的最佳超参数模型,并报告其性能。

实践工具介绍 🛠️

上一节我们介绍了超参数优化的核心算法,本节中我们来看看两个可以用于实际运行超参数优化的工具:Ray Tune和AutoGluon。

工具一:Ray Tune

Ray 是一个通用的Python分布式计算框架,它提供了简单的原语来运行分布式应用。其卖点在于,只需对代码进行极少修改,就能将其从单机运行扩展到在大型机器上并行运行。Ray本身是开源的,由科技公司Anyscale维护。

在Ray生态中,Ray Tune 专注于分布式超参数调优。它支持多种机器学习框架(如PyTorch、TensorFlow,以及scikit-learn等),可以与Weights & Biases集成以获得美观的日志图表,并且内置了多种超参数优化算法(如异步超带、BOHB等)的兼容性。

工作原理

  1. 首先启动一个“头节点”。
  2. 然后启动多个连接到头节点的“工作节点”。
  3. 头节点负责在每个工作节点(例如,每个GPU对应一个工作节点)上调度和启动试验。
  4. 工作节点定期将指标(如当前训练/验证准确率)报告回头节点。
  5. 头节点基于这些信息运行优化步骤,决定终止哪些试验、继续哪些试验。

集成示例

import ray
from ray import tune

# 初始化Ray
ray.init()

# 设置超参数搜索空间
config = {
    "lr": tune.loguniform(1e-4, 1e-1),
    "batch_size": tune.choice([32, 64, 128]),
    "num_layers": tune.randint(1, 5)
}

# 选择调度器(如异步超带)和优化指标
scheduler = tune.schedulers.AsyncHyperBandScheduler(time_attr="training_iteration", metric="accuracy", mode="max")

# 定义每个试验的资源(例如在HPC系统上)
resources_per_trial = {"cpu": 30, "gpu": 1}

# 运行调优
analysis = tune.run(
    your_training_function,
    config=config,
    scheduler=scheduler,
    num_samples=100,  # 尝试100组配置
    resources_per_trial=resources_per_trial
)

# 关闭Ray
ray.shutdown()

运行结束后,可以将结果导入Weights & Biases查看可视化图表,或简单保存到CSV文件。

Ray的一个优点是,你不仅可以并行运行不同的试验,还可以使用像PyTorch DDP这样的框架,将单个试验本身分布到多个GPU上进行训练,从而实现两级并行,获得显著的加速。


工具二:AutoGluon

AutoGluon 由亚马逊开发,其特别关注点是表格数据时间序列预测。如果你处理的是这类数据,这个工具可能非常适合你。

AutoGluon的核心思想是,在底层自动组合不同的先进模型(如各种回归模型、提升算法、神经网络),最终形成一个加权集成模型进行预测。这种方法的优势在于,通过结合多种方法,通常能获得非常好的性能。缺点则是可能损失一些可解释性。

近期,AutoGluon还将Chronos集成到了其优化流水线中。Chronos是一个基于Transformer架构的基础模型,在大量真实和合成的时间序列数据上进行了预训练,因此对于你提供的任何时间序列数据都有很强的预测能力。

AutoGluon的另一个优点是,它不仅提供点预测,还包含概率预测,给出分位数以帮助你评估预测的准确性,从而了解模型对其预测的置信度。


总结 📝

本节课中,我们一起学习了超参数优化与自动化机器学习。

我们了解到,在构建机器学习模型时,应使用系统化的超参数优化方法,而非依赖人工试错。根据你所处的领域,这可以显著提升模型性能。

同时,我们也鼓励你利用并行计算资源来进行超参数优化,以便能够同时运行多个试验。通过本节课介绍的Ray Tune和AutoGluon等工具,无论是在云平台还是高性能计算系统上,都可以轻松实现这一点。

希望本教程能帮助你更高效地进行机器学习模型开发。

019:OpenStack云操作系统 🖥️

在本节课中,我们将学习OpenStack云操作系统。OpenStack使我们能够创建自己的私有云,而不是依赖AWS、微软Azure或谷歌云等超大规模公有云。这对于需要在组织内部处理敏感数据(如医疗或汽车行业)的场景尤为重要。我们将了解OpenStack的核心组件、它如何帮助应对构建云基础设施的挑战,以及它如何与我们已经学过的概念(如虚拟化、容器化和大数据分析)相结合。

上一节我们回顾了超参数优化和自动化机器学习的概念。本节中,我们来看看如何从云使用者的视角,切换到云构建者的视角。

OpenStack概述

OpenStack是一个开源的云操作系统,它提供了构建和管理私有云或混合云所需的一系列组件。作为一个由开放基础设施基金会支持的项目,它具有稳定性和可持续性。使用OpenStack,组织可以避免从零开始构建云,而是利用其丰富的模块化服务。

构建私有云的挑战与需求

当决定在组织内部构建私有云时,需要应对多项挑战。OpenStack通过其组件集帮助解决这些挑战。

以下是构建云基础设施时需要满足的一些关键可扩展性指标:

  • 规模可扩展性:指物理硬件(如处理器、存储)的增减能力。
  • 软件可扩展性:确保各种库、编程环境、机器学习框架(如PyTorch、CUDA)与底层硬件(如GPU)兼容并能跨集群部署。
  • 应用可扩展性:指应用程序本身根据负载动态扩展的能力,例如MapReduce中根据数据量增减工作节点。
  • 技术可扩展性:指基础设施能够融合不同代际的技术(例如,混合使用A100、Grace Hopper和Blackwell等不同代际的GPU)。

OpenStack核心组件

OpenStack包含众多服务,其核心围绕计算、网络和存储这三大资源池展开。

以下是OpenStack的一些核心服务及其功能:

  • 计算服务
    • Nova:管理虚拟机实例的生命周期,是主要的计算服务。
    • Zun:提供容器管理服务,支持Docker等容器技术。
  • 存储服务
    • Swift:提供对象存储服务,类似于亚马逊S3。
    • Cinder:提供块存储服务,类似于亚马逊弹性块存储。
    • Manila:提供共享文件系统服务。
  • 网络服务
    • Neutron:管理网络连接,提供软件定义网络功能。
  • 镜像服务
    • Glance:存储和管理用于创建虚拟机或容器的镜像模板。
  • 身份认证服务
    • Keystone:提供身份验证和授权服务,管理用户和权限。
  • 仪表板服务
    • Horizon:提供基于Web的用户界面,方便用户管理云资源。
  • 编排服务
    • Heat:提供编排服务,用于自动化部署和管理复合云应用。

OpenStack实践示例

通过组合不同的OpenStack服务,可以构建出类似公有云功能的基础设施。

示例1:模拟亚马逊EC2(基础设施即服务)

要提供类似亚马逊EC2的虚拟机服务,需要多个OpenStack服务协同工作。

以下是实现此功能所需的关键服务交互:

  1. 用户通过Horizon仪表板或API发起请求。
  2. Keystone对用户进行身份验证。
  3. 用户从Glance中选择一个预定义的镜像(例如,包含深度学习框架的镜像)。
  4. Nova计算服务接收请求,并调度到合适的物理主机上启动虚拟机实例。
  5. Neutron为虚拟机配置网络连接。
  6. CinderSwift可为虚拟机提供额外的块存储或对象存储。
  7. (可选)Heat服务可以编排整个虚拟机的创建流程。

示例2:支持容器化应用

对于容器化应用,OpenStack提供了相应的服务。

Zun服务专门用于管理容器。它可以直接在物理主机或虚拟机上启动和管理容器,与KeystoneNeutronGlance等服务集成,为容器提供网络、身份验证和镜像支持。这可以与Kubernetes结合使用,构建更强大的容器平台。

示例3:构建大数据分析平台(如Hadoop/Spark)

OpenStack可以轻松部署大数据框架。例如,部署Hadoop集群时,可以利用OpenStack的服务映射其架构。

以下是Hadoop核心组件与OpenStack服务的对应关系示例:

  • NameNodeResourceManager:这些主节点可以运行在由Nova管理的虚拟机上,并使用Cinder块存储来保存元数据。
  • DataNodeNodeManager:这些工作节点同样由Nova管理,并使用Swift对象存储或Cinder块存储来保存实际数据块。Neutron确保所有节点间的网络连通性。

这种架构使得企业可以在自己的私有云中运行大数据工作负载,处理敏感数据,同时享受云的可扩展性和灵活性。

市场与社区

OpenStack拥有一个活跃的社区和丰富的生态系统。OpenStack Marketplace提供了大量预配置的解决方案和“样本配置”,例如一键部署Hadoop或Spark集群。这极大地简化了部署流程,用户无需从头开始配置每一个组件。

本节课中我们一起学习了OpenStack作为云操作系统的核心概念。我们了解到OpenStack如何通过模块化服务(计算Nova、存储Cinder/Swift、网络Neutron等)帮助组织构建私有云,应对可扩展性挑战。我们还探讨了它如何模拟公有云服务(如EC2)、支持容器化以及部署大数据分析平台。掌握OpenStack的基本原理,为你在未来可能需要设计或管理企业私有云时奠定了重要的基础。

020:课程总结与展望 🎓

在本节课中,我们将回顾整个课程的核心内容,并从长远视角和就业市场的角度,探讨所学知识如何转化为实际技能。我们将总结关键的理论、技术与范式,并展望未来的学习方向。


课程内容回顾

上一节我们探讨了构建私有云和混合云的动机与方案。本节中,我们来看看如何将整个课程的知识体系串联起来,并理解其在现实世界中的应用价值。

我们学习了,当面临在组织内部构建私有云的需求时(例如出于数据敏感性、法规遵从性或成本考量),可以使用如OpenStack这样的开源平台。OpenStack提供了计算、网络和存储等核心服务组件,使我们能够构建类似公有云(如AWS、Azure)的基础设施即服务(IaaS)环境。

核心概念示例:混合云架构

公有云服务 (如AWS S3, EC2) <--> [API/容器] <--> 私有云 (基于OpenStack)

这种架构允许在公有云进行测试和开发,然后将应用容器(如Docker)无缝迁移到私有云中处理敏感数据。

然而,构建私有云也意味着需要承担底层硬件采购、维护升级(如GPU从V100到Blackwell架构的迭代)以及专业团队管理的成本。因此,需要在公有云的便利性与私有云的控制性之间做出权衡。


学习成果与技能映射

从课程中,我们获得了多方面的能力,这些能力直接对应着就业市场的需求。

以下是课程涵盖的核心技能领域:

  1. 思维模式:理解了云计算的各个组件和不同层面,包括基础设施、平台和软件即服务(IaaS/PaaS/SaaS)的范式。
  2. 技能组合:掌握了具体云系统服务(如AWS EC2、Azure HDInsight、Google Colab)的实践操作知识,能够直接应用于工业界或学术界的项目。
  3. 工具集:接触并探索了多个主流云平台(AWS, Azure, GCP)及其工具,同时也认识到这些工具在快速演进,需要持续学习。

需要明确的是,本课程侧重于在云平台上规模化运用机器学习和数据处理工具。要深入理解机器学习算法本身(如应对过拟合、偏差、模型选择等),建议进一步学习专门的机器学习课程。


持久的理论与技术

大学课程的价值之一在于传授那些能够经受时间考验的范式、理论和技巧。

核心理论

  • 并行与分布式算法:例如分布式深度学习中的梯度交换,用于加速训练过程。其加速效果受限于串行部分,遵循一定的定律(如阿姆达尔定律)。
  • 可扩展性设计:这是云的核心特性,意味着服务需要能够优雅地应对用户、数据和计算资源量的增长。
  • 容错性:硬件故障是必然的。我们学习了通过数据复制(如HDFS中默认的3副本机制)等策略来保证系统的高可用性。
  • 数据挖掘算法:例如FP-Growth,用于从大规模数据(如购物清单)中高效发现频繁模式。
  • 统计学习理论:理解假设空间(如SVM、神经网络、Transformer)、模型容量与数据量的匹配关系,这是避免过拟合等问题的理论基础。
  • 深度学习算法:涵盖了卷积神经网络(CNN)、Transformer等,并展望了如物理信息神经网络(PINN)等前沿交叉领域。

关键技术

  • 规模经济:大型数据中心通过集中采购、运维,能显著降低单位计算成本。
  • 内存优化:利用内存(如Spark RDD、GPU HBM)进行计算能获得最佳性能,但也需权衡其较高的成本。
  • 计算找数据 vs 数据找计算:这是两种核心范式。MapReduce代表“计算找数据”,适合高吞吐量批处理;而传统高性能计算(HPC)常是“数据找计算”,将数据移至超级计算机进行处理。
  • 云部署模型:公有云、私有云、混合云的概念及实现(如通过OpenStack)。
  • 分布式文件系统与复制方案:用于数据持久性、高可用和灾备。
  • 基础设施虚拟化:通过虚拟机或容器(如Docker)实现资源的共享、隔离和灵活调度,提高利用率。

核心范式

以下范式在可预见的未来仍将保持其重要性:

  • 高吞吐计算 vs 高性能计算:高吞吐计算关注在大量独立任务上实现最大数据处理速率;高性能计算则关注通过紧密协作加速单个复杂计算任务。
  • MapReduce:一种经典的“分而治之”编程模型,包含Map、Shuffle、Reduce阶段,适用于大规模数据集批处理。
  • 服务模型:基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)的分层模型,服务于不同角色的用户(管理员、开发者、终端用户)。

就业市场与未来学习

课程中涵盖的技能在当前的招聘市场上需求旺盛。

以下是来自LinkedIn等平台的职位要求示例,它们直接对应了我们的课程内容:

  • 机器学习工程师:要求具备“云平台(AWS、GCP、Azure)经验”以及“部署机器学习模型到生产环境”的能力。
  • 云/基础设施工程师:要求熟悉“Kubernetes、OpenStack”以及“大规模多云平台的挑战”,并了解主要公有云厂商。

我们的行业项目和实践作业(如黑客松)为你提供了宝贵的实践经验,值得写入简历。

如果你对深入研究感兴趣,在机器学习、深度学习与云计算的交叉领域,仍有大量的硕士、博士课题可供探索,例如大语言模型(LLM)的规模化训练与优化。

为了保持竞争力,请务必持续关注云平台的新服务(如各厂商推出的大模型服务)和硬件发展(如新一代GPU)。可以通过课程网站、YouTube频道、LinkedIn上的冰岛高性能计算社区(EHPC)等渠道保持联系并获取最新信息。


总结与致谢

本节课中,我们一起回顾了“云计算与大数据”课程的全貌。我们从具体的云服务操作,深入到支撑这些服务的理论与技术,最后上升到通用的计算范式。我们也将所学知识与就业市场的实际需求联系起来,为你未来的职业或学术发展提供了清晰的路径图。

感谢你选修这门课程。教学相长,你们在行业项目中的反馈也帮助我们不断优化课程。祝愿各位在未来的求职市场或学术道路上一切顺利。如果你需要推荐信或有进一步的问题,欢迎联系。我们可能在未来的学术会议或社区活动中再见!

也衷心感谢广大YouTube社区观众的支持,你们的关注使得这门课程的内容产生了更广泛的影响。

再见,祝你好运!

posted @ 2026-03-26 12:23  布客飞龙III  阅读(3)  评论(0)    收藏  举报