01 平台环境:创建模型训练服务

(对 iMaster NAIE 训练平台有一个简单的认识,熟悉工作界面与实验环境。)

  • 进入https://console.huaweicloud.com/naie/网址。
  • 依次选择“AI 服务 > 平台服务 > 训练平台 > 模型训练服务”,进入模型训练服务介绍页面。
  • 需要华为云主账号购买“模型训练服务”,然后才能进入“模型训练服务”中。
  • 选择 北京- 四
工作流程


利用iMaster NAIE训练平台进行数据建模总共分为6大步骤:

  • 创建工程,数据集,特征工程,模型训练,模型管理,模型验证。

创建工程

  • 完成项目的创建,一个数据建模对应一个项目,每个项目平台会分配一定的计算资源。

数据集

  • 数据集主要为训练平台提供统一的数据管理能力。
  • 数据集可以提供给特征工程处理,提取关键特征供,也可以直接应用于模型训练。

特征工程

  • 用户可以通过特征工程对数据集进行数据处理、特征组合、特征转换等特征处理,最大限度的从原始数据中提取特征以模型训练使用。
  • iMaster NAIE训练平台的特征工程操作包括数据准备、特征选择、特征降维、特征构建以及单列特征工程操作。

模型训练

  • iMaster NAIE训练平台为用户预置了多种计算框架,集成了基于开源的交互式开发调试工具,为用户提供一站式IDE模型训练环境。
  • 模型训练包括算法创建和模型训练两个模块。
  • 算法创建模块支持用户在线编辑并调试算法。
  • 模型训练基于编译后的算法对训练数据集进行训练,训练报告通过图表、数值、表格三种方式展示。用户可以根据训练结果对算法进行调优再训练,直到得到最优的训练算法。

模型管理

  • 模型管理中可以查看模型包的详细信息、将模型包编排成应用包、发布应用包到应用市场、基于模型包创建模型验证服务和训练服务

模型服务

  • 模型验证服务是基于打包好的模型包,重新设置参数(计算节点规格、计算节点个数、环境变量等)进行训练,用户输入验证报文,然后根据返回结果判断当前模型包的好坏。重点在于模型包的验证。训练服务是基于用户选择的模型包,调用模型包对新的数据集以及超参进行训练。重点在于应用。
硬盘故障检测流程


02 硬盘故障检测模型构建

场景描述 | 业务目标

  1. 数据中心硬件故障中有48%为硬盘故障,且在故障发生后才感知,极大影响运维效率和成本;
  2. 缺乏有效预测手段,无法提前有计划进行硬件迁移,硬盘长期处于亚健康状态影响业务性能。

基于硬盘SMART特征,通过机器学习实现硬盘故障提前预测故障时间点,估算数据修复窗口,根据负载制定修复计划,提前进行修复操作。

  • FDR=False Detection Rate,查全率,即一块硬盘实际为坏盘,而模型预测为坏盘的概率;
  • FAR=False Alarm Rate,误报率,即一块硬盘实际为好盘,而模型预测为坏盘的概率;
  • 硬盘Case的业务目标为: FAR<= 0.1%, FDR > 80%
实验数据:



算法介绍

该场景目标为检测硬盘中哪些是故障类的硬盘,属于应该硬盘故障检测,从机器学习的角度来讲,属于分类算法。本实验以lightGBM算法来实现故障硬盘的分类检测,LightGBM(Light Gradient Boosting Machine) 是一款基于决策树算法的分布式梯度提升框架。该算法速度快,效果好。 其设计思路主要是两点:
1、减小数据对内存的使用,保证单个机器在不牺牲速度的情况下,尽可能地用上更多的数据;
2、减小通信的代价,提升多机并行时的效率,实现在计算上的线性加速。由此可见,LightGBM的设计初衷就是提供一个快速高效、低内存占用、高准确度、支持并行和大规模数据处理的数据科学工具。


  • 进入服务:首页AI服务 > 平台服务 > 模型训练服务
  • 创建项目

03 数据集(数据管理)




  • 导入数据

04 特征工程(数据预处理)

特征构造

import os
os.chdir("/home/ma-user/work/DISK-DETECT-handle")
from naie import _context as context
from naie.datasets import data_reference
from naie.feature_processing import data_flow
from naie.feature_analysis import data_analysis
from naie.feature_processing.expression import col, cols, cond, f_and, f_not, f_or
from naie.common.data.typedefinition import StepType, ColumnRelationship, JoinType, ColumnSelector,DynamicColumnsSelectorDetails, StaticColumnsSelectorDetails, ColumnsSelectorDetails, DataProcessModeimport pandas as pd
data = dataflow.to_pandas_dataframe()
# Your code here
#去掉列名
data = data.loc[1:]
data.sort_values(['disk_sn'], inplace=True)
# 只包含一个值的列,无用
cols_only_one_value = data.nunique().to_frame( name='num').query('num==1').index.tolist() # 保留的列cols_keep = [i for i in data if i not in cols_only_one_value]
# 硬盘 smart 特征列
cols_smart = [i for i in cols_keep if i.startswith('smart')]
#特征选择
colums = cols_smart+['capacity_bytes','failure','disk_sn'] processed_data = data[colums]
dataflow = data_flow.create_dataflow_from_df(processed_data)
#@return {"type":"dataflow","attrs":{"source":"dataframe"}}
  • SDK环境包导入 > 数据导入/绑定数据 > 特征构造(自行定义数据、生成数据实例) > 执行特征工程 > 生成训练数据

05 模型训练

# -*- coding: utf-8 -*-
from __future__ import print_function
from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score, roc_curve
from naie.metrics import report
from naie.datasets import get_data_reference
from naie.context import Contextimport warnings
warnings.filterwarnings('ignore')import pandas as pd
import numpy as np
import lightgbm as lgbimport os
import pickle# naie sdk主要用于文件、路径、日志等操作,详见训练平台又上角问号处帮助中心内sdk文档说明
def load_dataset(dataset, dataset_entity):'''从数据集中加载数据为DataFrame'''data_reference = get_data_reference(dataset=dataset, dataset_entity=dataset_entity)df = data_reference.to_pandas_dataframe()return dfdef model_fn():model = lgb.LGBMClassifier(random_state=1)return modeldef train(x_train, y_train, model):model.fit(x_train, y_train, categorical_feature=cate_cols)def save_model(model):"""模型存储的固定路径,生成的pkl文件要与推理代码predict.py中的路径对应"""model_path = os.path.join(Context.get_model_path(), 'model.pkl')with open(model_path, 'wb') as ff:pickle.dump(model, ff)def save_features(features):"""模型存储的固定路径,生成的pkl文件要与推理代码predict.py中的路径对应"""features_path = os.path.join(Context.get_model_path(), 'features.pkl')with open(features_path, 'wb') as ff:pickle.dump(features, ff)def score_model(x_validation, y_validation, model):"""返回验证得分并通过logs保存在训练任务中"""score = accuracy_score(y_validation, model.predict(x_validation))with report(True) as logs:logs.log_property("score", score)return scoredef main():# dataset dataset_entity需要修改为项目数据集对应的参数data = load_dataset(dataset="DATASET", dataset_entity="processed_disk_data")features = data.columns.tolist()[:-2]#因为硬盘容量的数值较大,可以先转化成类别特征的数据data['capacity_bytes'] = data['capacity_bytes'].astype('category') # 按照硬盘划分训练集和测试集train_disks, test_disks = train_test_split(data['disk_sn'].unique(), shuffle=True, random_state=2019, test_size=0.2)train_data = data[data['disk_sn'].isin(train_disks)]test_data = data[data['disk_sn'].isin(test_disks)]    #创建模型model = lgb.LGBMClassifier(random_state=1,objective = 'binary',num_leaves = 64,n_estimators = 1000,is_unbalance=True)  # 交叉验证cv_score = cross_val_score(model, train_data[features], train_data.failure, cv=5, scoring='accuracy', fit_params={'categorical_feature': ['capacity_bytes']})print(f'CV accuracy score: {cv_score}')model.fit(train_data[features], train_data.failure,categorical_feature=['capacity_bytes'])  # lightgbm处理分类变量# 评分时是对每个盘进行预测,根据历史数据预测这个盘会不会坏test_y = test_data.groupby('disk_sn').failure.nth(-1)test_X = test_data.groupby('disk_sn').nth(-1)[features]print('test set confusion matrix:')    conf_matrix=confusion_matrix(test_y, model.predict(test_X))print(conf_matrix)# 输出误报率FAR,即一块硬盘实际为好盘,而模型预测为坏盘的概率,业务目标 <= 0.1%print(f'FAR : {conf_matrix[0][1]/sum(conf_matrix[0])}')#输出查全率FDR,即一块硬盘实际为坏盘,而模型预测为坏盘的概率,业务目标 > 80%print(f'FDR : {conf_matrix[1][1]/sum(conf_matrix[1])}')score = score_model(test_X, test_y, model)print(f'test accuracy score: {score}')   #保留特征save_features(features)#保存模型save_model(model)# return the score for hyperparameter tuningreturn scoreif __name__ == "__main__":main()



从输出结果看,FAR=0.087% <0.1%,该项指标已达标。FDR=73.53%<80%,还有优化的空间。

06 模型管理

  • 将训练完成的优质模型打包到模型管理模块中,方便统一管理。模型管理中可以查看模型包的详细信息,可以用于后续的推理验证,也可以将模型包编排成应用包并发布应用包到应用市场。

学习笔记 | 硬盘故障检测相关推荐

  1. OracleDesigner学习笔记1――安装篇

    OracleDesigner学习笔记1――安装篇   QQ:King MSN:qiutianwh@msn.com Email:qqking@gmail.com 一.       前言 Oracle是当 ...

  2. Hadoop学习笔记(1) ——菜鸟入门

     Hadoop学习笔记(1) --菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户能够在不了解分布式底层细节的情况下.开发分布式 ...

  3. 文件和存储管理学习笔记-动态磁盘管理

    Server 2008 R2 文件和存储管理学习笔记-动态磁盘管理 基本磁盘是包含基本分区.扩展分区或逻辑驱动器的一种物理磁盘 动态磁盘提供了基本磁盘不提供的一些高级功能,创建无限数量卷.跨越多个磁盘 ...

  4. CCNP学习笔记(6)

    一.交换机 1.二层交换 特性: ①基于MAC地址转发数据帧 ②硬件工作 ③处理数据效率高,数据传输延时低 ④转发广播 2.三层交换 特性: ①提供路由功能 ②提高安全性 ③流量管理 3.网络方案中交 ...

  5. Hadoop学习笔记(1)

    原文:http://www.cnblogs.com/zjfstudio/p/3859704.html Hadoop学习笔记(1) --菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分 ...

  6. Java程序设计学习笔记(一)

    时间:2015-6-2 23:04 程序员,程序猿,程序媛,码农  ------------------------------------------------------- --Java的应用领 ...

  7. redis学习笔记-持久化

    redis学习笔记-持久化 前言 redis持久化有两种方式:RDB和AOF.分别对应着全量复制和增量复制.深刻理解各自的实现方式及适用场景对redis的使用和运维十分重要.下面就分别介绍. RDB持 ...

  8. 梓益C语言学习笔记之链表&动态内存&文件

    梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...

  9. 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记

    转载自: 九十分钟极速入门Linux--Linux Guide for Developments 学习笔记 http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA ...

最新文章

  1. 线性回归:不能忽视的三个问题
  2. R语言基于LASSO进行特征筛选(feature selection)
  3. 【云栖大会】阿里云生态 开启智能“大航海时代”
  4. 英雄联盟手游火线妹上线了!金克丝也想成为第一AD吗?
  5. php类库下载下来怎么使用,PHP如何实现$this-[类库名称]-[类库方法]。
  6. Android ViewRoot、DecorViewWindow浅析
  7. 习题2.1 简单计算器 (20 分)
  8. 五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?| 原力计划
  9. python两张图片融合_python实现两张图片的像素融合
  10. 非标准语法;请使用 _国际汉语教学中 语法点讲解的具体方法
  11. 转 国内的go get问题的解决
  12. ELK6.0日志从收集到处理完整版教程(二)
  13. 大数据在智慧城市中重要的作用
  14. 我开发的内部ORM(一)数据库组件
  15. SQL语言入门学习,这一篇就够了
  16. 格力董明珠:对别人狠,对自己更狠!
  17. 一、学海无涯,再出发!【2020.02.14-25】
  18. 微服务项目--商城管理系统的整合与测试
  19. mysql更新加锁_一条简单的更新语句,MySQL是如何加锁的?
  20. 《SQL基础》04. SQL-DQL

热门文章

  1. 安东尼罗宾--激发你的无限潜能[连载]--17 18章
  2. 【python-sklearn】中文文本处理LDA主题模型分析
  3. 我的世界服务器组件管理器,我的世界ESS插件 Essentials | 我的世界 | MC世界侠
  4. 让JAVA 中Swing界面更加美观
  5. 工业智能网关BL110详解之八十八: 实现西门子S7-1200 PLC接入华为云平台
  6. linux定向查日志_Linux之screen创建、切换、记录屏幕日志
  7. 安信可A7模块 GPRS/GPS使用教程
  8. 通俗易懂的告诉你大数据、O2O、互联网思维、红海、蓝海是什么!
  9. 联想Z5刷android11,联想Z5 Pro GT升级安卓10 ZUI_11.5.141稳定版-支持TWRP偷渡升级
  10. 询盘获客系统为什么会这么火,你知道吗?