建设网站的费用属于资产吗,我国经济总量,新网wordpress域名解析,上海网站建设 上海网站制作Tensorflow Extended (TFX) in action: build a production ready deep learning pipeline
在本教程中#xff0c;我们将探索TensorFlow Extended (TFX)。TFX由某机构开发#xff0c;是一个用于部署生产环境机器学习流水线的端到端平台。我们将看到如何从头开始构建一个流水线…Tensorflow Extended (TFX) in action: build a production ready deep learning pipeline在本教程中我们将探索TensorFlow Extended (TFX)。TFX由某机构开发是一个用于部署生产环境机器学习流水线的端到端平台。我们将看到如何从头开始构建一个流水线。我们将探索可使用的各种内置组件这些组件涵盖了机器学习的整个生命周期从研究和开发到训练和部署。首先让我们从一些基本概念和术语开始以确保理解一致。强烈推荐某机构云团队的“某机构云ML Pipelines课程”或DeepLearning.ai的“TensorFlow高级部署场景”课程通过全面的课程来提升技能。TFX术语表组件是流水线的基本构建块负责执行所有工作。组件可以直接使用也可以用自定义代码覆盖。元数据存储是所有组件的单一事实来源。它主要包含3部分内容工件及其属性例如训练好的模型、数据、评估指标。组件和流水线的执行记录。工作流相关的元数据组件顺序、输入、输出等。TFX流水线是机器学习工作流的可移植实现由组件实例和输入参数组成。编排器是执行TFX流水线的系统。它们本质上是用于编写、调度和监控工作流的平台。它们通常将流水线表示为一个有向无环图并确保每个作业或工作节点在正确的时间以正确的输入执行。与TFX配合使用的流行编排器示例包括Apache Airflow、Apache Beam、Kubeflow pipelines。基于机器学习生命周期的不同阶段TFX提供了一组具有标准功能的不同组件。这些组件可以被覆盖。例如可以扩展其功能也可以完全用新组件替换。不过在大多数情况下内置组件已能满足大部分需求。让我们快速浏览所有组件从数据加载开始到部署结束。请注意不会深入探讨代码细节因为有很多大多数人不熟悉的新库和包。关键点在于概述TFX及其模块并帮助理解为什么需要这种端到端的解决方案。数据摄取机器学习开发过程的第一步是数据加载。ExampleGen组件通过将不同类型的数据转换为tf.Record或tf.Example两者都受TFX支持来将数据摄取到TFX流水线中。示例代码如下fromtfx.protoimportexample_gen_pb2fromtfx.componentsimportImportExampleGen input_configexample_gen_pb2.Input(splits[example_gen_pb2.Input.Split(nametrain,patterntrain/*),example_gen_pb2.Input.Split(nameeval,patterntest/*)])example_genImportExampleGen(input_basedata_root,input_configinput_config)ImportExampleGen是ExampleGen的一种特殊类型它接收数据路径以及如何处理数据的配置。在本例中将数据分为训练集和测试集。数据验证下一步是探索数据将其可视化并验证是否存在可能的错误和异常。StatisticsGen组件生成一组有用的统计信息描述数据分布。可以看到它接收ExampleGen的输出。fromtfx.componentsimportStatisticsGen statistics_genStatisticsGen(examplesexample_gen.outputs[examples])Tensorflow Data Validation是一个内置的TFX库除其他功能外可以帮助可视化StatisticsGen生成的统计信息。它由StatisticsGen在内部使用但也可以作为独立工具使用。importtensorflow_data_validationastfdv tfdv.visualize_statistics(stats)同一个库也被SchemaGen使用后者为数据生成一个初始模式。当然这可以根据领域知识进行调整但它是一个不错的起点。fromtfx.componentsimportSchemaGen schema_genSchemaGen(statisticsstatistics_gen.outputs[statistics],infer_feature_shapeTrue)现在可以利用生成的模式和统计信息来执行某种形式的数据验证以捕获数据集中的异常值、异常和错误。fromtfx.componentsimportExampleValidator example_validatorExampleValidator(statisticsstatistics_gen.outputs[statistics],schemaschema_gen.outputs[schema])特征工程任何机器学习流水线中最重要的一步是特征工程。基本上需要对数据进行预处理以便将其传递给模型。TFX提供了Transform组件和tensorflow_transform库来协助完成此任务。转换步骤可以这样执行fromtfx.componentsimportTransform transformTransform(examplesexample_gen.outputs[examples],schemaschema_gen.outputs[schema],module_filemodule_file)但这还不是全部。需要以某种方式定义预处理功能。这就是参数module_file的作用。最常用的方法是使用一个单独的文件来包含所有的转换操作。本质上需要实现一个preprocessing_fn函数这是TFX的入口点。以下是从官方TFX示例中借鉴的一个示例defpreprocessing_fn(inputs):tf.transforms callback function for preprocessing inputs.outputs{}image_featurestf.map_fn(lambdax:tf.io.decode_png(x[0],channels3),inputs[_IMAGE_KEY],dtypetf.uint8)image_featurestf.cast(image_features,tf.float32)image_featurestf.image.resize(image_features,[224,224])image_featurestf.keras.applications.mobilenet.preprocess_input(image_features)outputs[_transformed_name(_IMAGE_KEY)]image_features outputs[_transformed_name(_LABEL_KEY)]inputs[_LABEL_KEY]returnoutputs如你所见这是普通的Tensorflow和Keras代码。模型训练训练模型是过程中的关键部分与许多人的看法相反它并不是一次性操作。模型需要不断重新训练以保持其相关性并确保结果的最佳准确性。fromtfx.dsl.components.baseimportexecutor_specfromtfx.protoimporttrainer_pb2fromtfx.components.trainer.executorimportGenericExecutorfromtfx.componentsimportTrainer trainerTrainer(module_filemodule_file,custom_executor_specexecutor_spec.ExecutorClassSpec(GenericExecutor),examplestransform.outputs[transformed_examples],transform_graphtransform.outputs[transform_graph],schemaschema_gen.outputs[schema],train_argstrainer_pb2.TrainArgs(num_steps160),eval_argstrainer_pb2.EvalArgs(num_steps4),custom_config{labels_path:labels_path})和之前一样训练逻辑在一个单独的模块文件中。这次需要实现run_fn函数该函数通常定义模型和训练循环。同样借鉴自官方示例并去除了一些不必要的内容示例如下importtensorflow_transformastftdefrun_fn(fn_args:FnArgs):tf_transform_outputtft.TFTransformOutput(fn_args.transform_output)train_dataset_input_fn(fn_args.train_files,tf_transform_output,is_trainTrue,batch_size_TRAIN_BATCH_SIZE)eval_dataset_input_fn(fn_args.eval_files,tf_transform_output,is_trainFalse,batch_size_EVAL_BATCH_SIZE)model,base_model_build_keras_model()model.compile(losssparse_categorical_crossentropy,optimizertf.keras.optimizers.RMSprop(lr_FINETUNE_LEARNING_RATE),metrics[sparse_categorical_accuracy])model.summary(print_fnabsl.logging.info)model.fit(train_dataset,epochs_CLASSIFIER_EPOCHS,steps_per_epochsteps_per_epoch,validation_dataeval_dataset,validation_stepsfn_args.eval_steps,callbacks[tensorboard_callback])请注意_build_keras_model返回一个标准的tf.keras.Sequential模型而input_fn返回一个包含训练样本和标签的批次数据集。请查看官方Git仓库获取完整代码。同时请确保通过正确的回调函数可以利用TensorBoard来可视化训练进度。模型验证接下来是模型验证。一旦训练好模型在将其推送到生产环境之前必须对其进行评估并分析其性能。TensorFlow Model Analysis (TFMA)就是用于此目的的库。请注意实际的模型评估在训练期间已经进行。此步骤旨在记录未来运行的评估指标并将其与之前的模型进行比较。通过这种方式可以确保当前的模型是目前最好的模型。不会深入探讨TFMA的细节但以下是一些供未来参考的代码importtensorflow_model_analysisastfma eval_configtfma.EvalConfig(model_specs[tfma.ModelSpec(label_keylabel_xf,model_typetf_lite)],slicing_specs[tfma.SlicingSpec()],metrics_specs[tfma.MetricsSpec(metrics[tfma.MetricConfig(class_nameSparseCategoricalAccuracy,thresholdtfma.MetricThreshold(value_thresholdtfma.GenericValueThreshold(lower_bound{value:0.55}),# 如果没有从MLMD解析出基线模型首次运行变更阈值将被忽略。change_thresholdtfma.GenericChangeThreshold(directiontfma.MetricDirection.HIGHER_IS_BETTER,absolute{value:-1e-3})))])])关键部分是在流水线中定义Evaluator组件fromtfx.componentsimportEvaluator evaluatorEvaluator(examplestransform.outputs[transformed_examples],modeltrainer.outputs[model],baseline_modelmodel_resolver.outputs[model],eval_configeval_config)推送模型一旦模型验证成功就是时候将模型推送到生产环境了。这是Pusher组件的工作它根据环境处理所有的部署事务。fromtfx.componentsimportPusher pusherPusher(modeltrainer.outputs[model],model_blessingevaluator.outputs[blessing],push_destinationpusher_pb2.PushDestination(filesystempusher_pb2.PushDestination.Filesystem(base_directoryserving_model_dir)))构建TFX流水线好了目前定义了许多组件包含了所需的一切。但是如何将它们组合在一起呢TFX流水线使用pipeline类定义该类接收组件列表等参数。fromtfx.orchestrationimportmetadatafromtfx.orchestrationimportpipeline components[example_gen,statistics_gen,schema_gen,example_validator,transform,trainer,model_resolver,evaluator,pusher]pipelinepipeline.Pipeline(pipeline_namepipeline_name,pipeline_rootpipeline_root,componentscomponents,enable_cacheTrue)组件实例产生工件作为输出并且通常依赖于上游组件实例产生的工件作为输入。组件的执行顺序由基于每个工件依赖关系的有向无环图 (DAG) 决定。以下是一个典型的TFX流水线来源某机构云平台文档运行TFX流水线最后来到了运行流水线的部分。如前所述流水线由编排器执行它将处理所有的作业调度和网络连接。这里选择使用Apache Beam通过BeamDagRunner但对于Kubeflow或Airflow原理相同。fromtfx.orchestration.beam.beam_dag_runnerimportBeamDagRunnerif__name____main__:BeamDagRunner().run(pipeline)另外应该提到的是可以使用TFX CLI通过命令行执行类似的命令。可以肯定的是像Apache Beam这样的编排器在99%的使用场景中将在云资源上运行。这意味着Beam将启动云实例/工作节点并通过它们流式传输数据。这将取决于环境和流水线。Apache Beam下的典型运行器包括Spark、Flink、某机构Dataflow。另一方面像Kubeflow这样的框架依赖于Kubernetes。因此MLOps工程师的一项重要工作就是为他们的需求找到最佳环境。结论端到端机器学习系统在过去几年获得了大量关注。随着许多不同的初创公司和框架的诞生MLOps正变得越来越重要。TFX就是一个完美的例子。必须承认构建这样的流水线并非易事需要深入探究TFX的复杂性。但这认为它是目前拥有的最好工具之一。所以下次当你想要部署机器学习模型时也许值得一试。另外再次推荐某机构云团队的“某机构云ML Pipelines课程”或DeepLearning.ai的“TensorFlow高级部署场景”课程。更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手或者 我的个人博客 https://blog.qife122.com/对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享