【大模型从入门到精通42】LLM部署运维(LLM Ops)使用Kubeflow Pipelines掌握LLM工作流4

embedded/2024/9/20 7:27:35/ 标签: 运维, 人工智能, 深度学习

这里写目录标题

      • 在Kubeflow中自动化和编排监督调整管道
        • 重用现有管道提高效率
        • 准备数据和模型版本控制
        • 配置管道
        • 定义管道参数
        • 执行管道
        • 结论
      • 理论问题
      • 实践问题

在这里插入图片描述

在Kubeflow中自动化和编排监督调整管道

Kubeflow Pipelines的核心在于其编排复杂工作流的能力。在本例中,我们将探索如何使用Kubeflow Pipelines自动和编排监督调整管道,针对由Google提供的基础模型PaLM 2进行参数高效微调(PEFT)。这种方法强调了重用现有管道以加速机器学习模型开发和部署的实用性,特别是对于像PaLM 2这样的大型复杂模型。

重用现有管道提高效率

重用现有的管道可以显著减少开发时间和努力,通过利用预建的工作流。这不仅加快了实验过程,而且确保了嵌入原始管道的最佳实践得以保持。在这个场景中,我们将重点放在PaLM 2的参数高效微调(PEFT)管道上,由Google提供。这使我们能够在特定的数据集上对模型进行微调,而无需从头开始。

准备数据和模型版本控制

为了进行微调,我们使用两个包含训练和评估数据的JSONL文件。移除文件中的时间戳以确保所有学习者的一致性,并简化数据准备过程。

TRAINING_DATA_URI = "./tune_data_stack_overflow_python_qa.jsonl"
EVALUATION_DATA_URI = "./tune_eval_data_stack_overflow_python_qa.jsonl"

模型版本控制是机器学习操作(MLOps)中的关键实践,它使得实验可重复、可审计,并支持回滚。在这个例子中,我们将当前日期和时间附加到模型名称上,以创建一个唯一的版本标识符。

import datetime
date = datetime.datetime.now().strftime("%H:%d:%m:%Y")
MODEL_NAME = f"deep-learning-ai-model-{date}"
配置管道

然后,我们为PaLM模型的调整指定关键参数:

  • TRAINING_STEPS: 定义训练步骤数。对于抽取式问答,推荐范围为100-500步。
  • EVALUATION_INTERVAL: 设置模型在训练过程中被评估的频率。默认每20步进行一次评估。
TRAINING_STEPS = 200
EVALUATION_INTERVAL = 20

身份验证和项目设置是访问Google Cloud资源和服务的必要步骤。authenticate函数从实用程序脚本中提供所需的凭证和项目ID以配置管道执行环境。

from utils import authenticate
credentials, PROJECT_ID = authenticate()
REGION = "us-central1"
定义管道参数

下一步涉及定义管道参数。这些参数指定了管道的输入和配置,根据我们的具体需求定制微调过程。

pipeline_arguments = {"model_display_name": MODEL_NAME,"location": REGION,"large_model_reference": "text-bison@001","project": PROJECT_ID,"train_steps": TRAINING_STEPS,"dataset_uri": TRAINING_DATA_URI,"evaluation_interval": EVALUATION_INTERVAL,"evaluation_data_uri": EVALUATION_DATA_URI,
}
执行管道

最后,我们设置并提交管道作业以供执行,使用PipelineJob类。这一步包括指定可重用的管道YAML文件的路径、作业的显示名称、管道参数、执行区域以及用于临时文件的管道根目录。启用缓存通过重用未更改的组件的输出来优化执行。

pipeline_root = "./"job = PipelineJob(template_path=template_path,display_name=f"deep_learning_ai_pipeline-{date}",parameter_values=pipeline_arguments,location=REGION,pipeline_root=pipeline_root,enable_caching=True,
)job.submit()
print(job.state)
结论

本例说明了如何使用Kubeflow Pipelines自动化和编排监督调整管道,以微调基础模型。通过重用现有的管道、指定关键参数,并在管理环境中执行管道,我们可以有效地对像PaLM 2这样的大型模型进行微调。这种方法不仅加速了模型开发的过程,而且还融入了MLOps的最佳实践,包括版本控制、可重复性和高效资源利用。

理论问题

  1. 解释Kubeflow Pipelines在自动化机器学习工作流中的作用及其确保实验一致性与可重复性的重要性。

    • Kubeflow Pipelines通过编排复杂的机器学习工作流,实现自动化。它确保了一致性和可重复性,因为管道定义了明确的数据流和组件之间的交互,使得整个过程可追踪且易于复制。
  2. 描述Kubeflow Pipelines SDK中dsl和compiler模块的功能。

    • dsl模块提供了定义管道组件和管道本身的装饰器和函数;compiler模块负责将定义好的管道编译成YAML文件,以便在Kubeflow环境中执行。
  3. 如何管理与Kubeflow Pipelines相关的未来警告,以保持输出的可读性而不忽略重要的更新?

    • 可以使用Python的warnings模块来过滤掉未来的警告,例如通过设置warnings.filterwarnings("ignore", category=FutureWarning)
  4. 为什么设计机器学习管道组件时需要考虑清晰的接口和重用性?

    • 清晰的接口和重用性使得组件易于理解和集成到不同的管道中,提高了代码的可维护性和可扩展性。
  5. 解释@dsl.component装饰器在定义Kubeflow Pipeline组件中的用途。

    • @dsl.component装饰器用于标记一个函数作为Kubeflow Pipeline的一个组件,使得该函数可以被管道编译器识别并在管道中使用。
  6. 描述当在一个管道内调用一个带有@dsl.component装饰器的函数时,PipelineTask对象的行为和效用。

    • 调用带有@dsl.component装饰器的函数会返回一个PipelineTask对象,该对象代表管道中即将执行的任务。PipelineTask对象的.output属性可用于传递组件的输出给其他组件。
  7. 如何将一个Kubeflow Pipeline组件的输出作为另一个组件的输入?

    • 通过在后续组件的定义中引用前一个组件的PipelineTask对象的.output属性来实现。
  8. 使用关键字参数调用Kubeflow Pipeline组件函数有何重要性?

    • 关键字参数确保了组件的参数传递正确无误,避免了因位置顺序错误而导致的问题。
  9. 概述在Kubeflow Pipelines中链接组件的过程及传递.output属性以实现数据流的重要性。

    • 组件链接通常通过在后续组件中使用前一个组件的PipelineTask对象的.output属性来完成。这确保了数据按照预定的顺序从一个组件流动到下一个组件。
  10. 如何定义一个Kubeflow管道,并确保其正确执行和输出处理的关键考虑因素是什么?

    • 定义管道时要确保组件之间的数据流正确无误,同时注意管道的返回类型与最终组件的输出类型一致。
  11. 描述编译、查看和执行Kubeflow Pipeline的过程,包括YAML文件在编译过程中的作用。

    • 编译过程使用compiler模块将定义好的管道转化为YAML文件。查看YAML文件有助于理解编译后的管道结构。执行管道则通过PipelineJob类完成。
  12. 解释如何通过重用现有的管道(如PaLM 2的监督调整管道)来提高机器学习项目的效率和最佳实践。

    • 重用现有的管道可以节省开发时间,确保最佳实践得到应用,并加速模型的迭代周期。
  13. 讨论数据和模型版本控制在MLOps中的重要性,并提供一个创建唯一模型版本标识符的例子。

    • 数据和模型版本控制对于确保实验的可重复性和可追溯性至关重要。例如,可以通过在模型名称后面附加当前日期和时间来创建唯一版本标识符。
  14. 如何定义和使用Kubeflow Pipeline中的管道参数?

    • 管道参数通常在定义管道时指定,它们定义了输入数据和配置选项,用于定制管道的行为。
  15. 反思使用Kubeflow Pipelines自动化和编排复杂的机器学习工作流的好处和挑战,特别是在对大型模型如PaLM 2进行微调的上下文中。

    • 利用Kubeflow Pipelines可以实现工作流的自动化,提高效率,但同时也面临着诸如管道定义的复杂性和资源管理等挑战。

实践问题

  1. 设置Kubeflow Pipelines SDK

    • 写一个Python脚本来导入Kubeflow Pipelines SDK中的必要模块(dslcompiler)。使用warnings模块抑制来自Kubeflow Pipelines SDK的FutureWarning警告。
  2. 定义一个简单的管道组件

    • 使用Kubeflow Pipelines SDK定义一个名为add_numbers的简单组件,该组件接受两个整数作为输入并返回它们的和。使用@dsl.component装饰器来定义这个组件。
  3. 抑制特定警告

    • 修改Python脚本以抑制DeprecationWarning类型的警告,无论其来源。使用warnings模块完成此任务。
  4. 在管道中链接组件

    • 创建两个Kubeflow Pipeline组件,其中一个组件生成一个数字(例如返回一个固定的整数),另一个组件接收这个数字并将其加倍。定义一个管道,链接这两个组件,展示如何将一个组件的输出传递给另一个组件。
  5. 编译和准备管道以供执行

    • 给定一个简单的管道定义(如上一个任务所示),编写一个Python脚本来使用Kubeflow Pipelines的compiler模块将该管道编译成YAML文件。
  6. 处理PipelineTask对象

    • 编写一个Python函数来演示如何调用一个Kubeflow Pipeline组件,捕获其返回值(PipelineTask对象),并访问其输出。该函数不需要是管道的一部分,只需要展示概念即可。
  7. 在管道定义中的错误处理

    • 编写一个Python脚本尝试以不正确的方式定义一个Kubeflow Pipeline(例如,尝试直接从管道函数返回一个PipelineTask对象),然后纠正错误。包括注释解释为什么最初的尝试会失败以及如何修正问题。
  8. 为模型训练自动化数据准备

    • 创建一个Python脚本,模拟为机器学习模型准备数据的过程。该脚本应从JSON文件读取数据,执行简单的转换(例如过滤或映射),并将结果保存到另一个JSON文件中。这个任务模仿了Kubeflow Pipeline中数据预处理步骤中可能使用的组件。
  9. 在管道中实现模型版本控制

    • 编写一个Python函数,通过在基本模型名称字符串后面附加当前日期和时间来生成一个唯一的模型名称。这个函数说明了在MLOps中版本化模型的实践。
  10. 参数化并执行Kubeflow Pipeline

    • 假设存在一个编译好的Kubeflow Pipeline YAML文件,编写一个Python脚本来定义管道参数(例如,对于问候管道的recipient_name),并演示如何使用假设的执行环境的API提交该管道以供执行。

http://www.ppmy.cn/embedded/102080.html

相关文章

Flask 框架概述及应用案例

文章目录 Flask 框架概述Flask 的特点:Flask 的基本结构:如何开始使用 Flask:Flask 的应用场景: 应用案例templates/home.html:templates/register.html:templates/users.html: 案例扩展步骤 1: 安装 Flask-Login步骤 2: 修改 app…

开放大世界的碰撞与物理

众所周知,物理开销一直是 CPU 的一个大头,而且还很容易出问题。对于开放世界,该如何进行物理运算,以及采用什么方案计算碰撞。 本文针对这个问题做了一些细微的研究,算是对 Unity 下的解决方案有了一个大致的方向。 1、…

python可视化-折线图

1、数据 import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as pd np.random.seed(0)sns.set(fontSimHei, font_scale0.8, style"darkgrid") # 解决Seaborn中文显示问题# 自定义数据 df2 pd.DataFrame({x: range(1,10),y: …

基于事件总线EventBus实现邮件推送功能

什么是事件总线 事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。 关于这个概念,网上有很多讲解的,这里我推荐一个讲的比较好的&#x…

【网络基础】探索 NAT 技术:IP 转换、NAPT、NAT穿越及代理服务器

文章目录 1. 前言2. IP 转换过程3. NAPT① 基本概念② 工作原理③ 优缺点④ 实际应用 4. 缺陷5. NAT 穿越① 概述② 示例 6. NAT 与 代理服务器① 代理服务器与NAT的区别:② 正向代理 / 反向代理 服务器 1. 前言 NAT(网络地址转换)是一种常见…

Getting RateLimitError while implementing openai GPT with Python

题意:“在使用 Python 实现 OpenAI GPT 时遇到 RateLimitError 错误。” 问题背景: I have started to implement openai gpt model in python. I have to send a single request in which I am getting RateLimitError. “我开始在 Python 中实现 Ope…

深入理解WebSocket:从基础到实践

深入理解WebSocket:从基础到实践 WebSocket是现代网络通信中一个重要的技术,它在单个TCP连接上实现了全双工通信,使得实时、双向数据传输成为可能。与传统的HTTP协议相比,WebSocket提供了更高效的实时数据交换方式。本文将深入探…

DNS 服务器的搭建(正向区域配置)

一、Windows DNS 正向区域配置 1.实验目标 2.拓扑结构 3.实验需求 4.配置要点 5.配置步骤 1.配置各主机 IP 地址及网关 2.DNS 服务器服务部署 3.验证实验 一、Windows DNS 正向区域配置 1.实验目标 掌握 DNS 的功能和基本操作 熟悉公网 DNS 架构 掌握 DNS …

Qt (10)【Qt窗口 —— 如何在窗口中创建浮动窗口和状态栏】

阅读导航 引言一、如何在窗口中创建浮动窗口1. 浮动窗口的创建2. 设置停靠的位置 二、如何在窗口中创建状态栏1. 状态栏的创建2. 在状态栏中显示实时消息3. 在状态栏中显示永久消息4. 调整显示消息的位置,并加上进度条 引言 在上一篇文章中,我们一同探索…

系统架构设计师——架构风格

概述 软件体系结构风格是指在软件架构设计中,针对特定应用领域所采用的一套惯用模式,这些模式定义了系统的组织方式。以下是对软件体系结构风格的详细解析: 1. 体系结构风格的概念 目的:简化设计过程,提高设计的重用…

特色农产品全网品牌优化,让价值超越地域限制!

目前农村电商产业发展迅猛,为各地农产品开辟了新路径。据商务大数据监测,2024年1-7月农产品网络零售额增长20.1%,为乡村振兴注入了强大活力。在可预见的未来,农产品将依旧保持稳步增长的发展态势。对于大多数农产品企业来说&#…

docker compose用法详解

下面是每个 docker compose 配置参数的用法和示例: 全局选项用法示例 --ansi 控制何时打印 ANSI 控制字符。示例: docker compose --ansi never up 禁用 ANSI 控制字符的打印(颜色和格式)。 --compatibility 在向后兼容模式下运…

网络安全之渗透测试实战-DC-3-靶机入侵

一、下载靶机DC-3,解压后导入Vmware Workstation https://pan.baidu.com/s/17BcSH6RqC7wuyB7PRNqOow?pwdkc12启动DC-3靶机,由于不知道密码,无需登录 二、靶机的网卡采用的是NAT模式自动获取IP地址,此时我们需要先获取其MAC地址…

排序算法之归并排序详细解读(附带Java代码解读)

归并排序(Merge Sort)是一种稳定的排序算法,采用分治法(Divide and Conquer)的思想。它将一个数组分成两个子数组,分别对这两个子数组进行排序,然后将两个已排序的子数组合并成一个有序的数组。…

自动化刷题小练习

驾校题库自动化刷题,使用了selenium以及requests等一些爬虫用的库 from selenium import webdriver from selenium.webdriver.common.by import By import requests import re import time driverwebdriver.Chrome()driver.get("https://www.jsyks.com/kms-mn…

泰山派的小手机后续(2)

之前 触摸板一直报错的解决: 1 我的触摸板 画错了。 从新画了一个 触摸的转接板,调整过来了。 关于触摸的 线序。 这块屏幕正常 就是横着放的。 关于泰山派接口的线序: 所以我的转接板的画法 是: 开发板与转接板 使用的是 反排线…

黑神话攻略,带你找到一周目隐藏的四大天王!

《黑神话》这款国产动作游戏深受玩家期待,它带来了一段充满刺激的冒险旅程。游戏中有一个关于四大天王的谜题,让不少玩家感到困惑。有人认为这关系到游戏的真正结局,有人则认为只有二周目才能解锁。实际上,这个谜题在一周目就可以…

PyTorch Geometric(torch_geometric)简介

在深入探讨PyTorch Geometric(通常简称为PyG)之前,我们先了解一下它的背景和应用。PyG是基于PyTorch的一个扩展库,专为图数据和图网络模型设计。图网络是深度学习领域的一种强大工具,它能够处理结构化数据,…

云原生之全链路分布式跟踪系统 Zipkin和SkyWalking

贪多嚼不烂 Pinpoint 就不对比了 参考 APM系统简单对比(zipkin,pinpoint和skywalking) springcloud 看云 Zipkin和SkyWalking都是流行的分布式跟踪系统,但它们的设计和实现有明显的不同。 以下是它们之间的一些对比: 数据存储: Zipk…

【Leetcode 2068 】 检查两个字符串是否几乎相等 —— 击败100%

如果两个字符串 word1 和 word2 中从 a 到 z 每一个字母出现频率之差都 不超过 3 ,那么我们称这两个字符串 word1 和 word2 几乎相等 。 给你两个长度都为 n 的字符串 word1 和 word2 ,如果 word1 和 word2 几乎相等 ,请你返回 true &#x…