当前位置: 首页 > 科技观察

使用AzureML服务构建和部署机器学习模型_0

时间:2023-03-20 01:54:46 科技观察

【.com快言】在本教程中,我们将构建和部署机器模型以使用Stackoverflow数据集预测薪水。阅读本文后,您将能够调用利用REST的Web服务来获得预测。由于目的是演示工作流程,我们将试验一个简单的两列数据集,其中包含多年的工作经验和薪水。有关数据集的详细信息,请参阅我之前关于线性回归的文章。先决条件1.Python和Scikit-learn基础知识2.有效的MicrosoftAzure订阅3.Anaconda或Miniconda配置开发环境使用AzureMLSDK配置虚拟环境。运行以下命令安装PythonSDK并启动JupyterNotebook。从Jupyter启动一个新的Python3内核。$condacreate-naml-yPython=3.6$condaactivateaml$condainstallnb_conda$pipinstallazureml-sdk[notebooks]$jupyternotebook初始化AzureML环境首先导入所有必要的Python模块,包括标准的Scikit-learn模块和AzureML模块。importdatetimeimportnumpyasnpimportpandasaspdfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLinearRegressionfromsklearn.externalsimportjoblibimportazureml.corefromazureml.coreimportWorkspacefromazureml.core.modelimportModelfromazureml.coreimportExperimentfromazureml.core.webserviceimportWebservicefromazureml.core.imageimportContainerImagefromazureml.core.webserviceimportAciWebservicefromazureml.core.conda_dependenciesimportCondaDependencies我们需要创建一个AzureMLWorkspace,该工作区充当我们这次试验的逻辑边界。Workspace创建用于存储数据集的StorageAccount、用于存储机密信息的KeyVault、用于维护图像中心的ContainerRegistry以及用于记录指标的ApplicationInsights。不要忘记用您的订阅ID替换占位符。ws=Workspace.create(name='salary',subscription_id='',resource_group='mi2',create_resource_group=True,location='southeastasia')几分钟后,我们会在Workspace中看到创建的资源。现在我们可以创建一个实验并开始记录指标。由于我们要记录的参数不多,所以获取训练过程的开始时间。exp=Experiment(workspace=ws,name='salexp')run=exp.start_logging()run.log("Experimentstarttime",str(datetime.datetime.now()))现在训练和测试Scikit-learnML模块然后将在Scikit-learn的帮助下对该模型进行训练和测试。sal=pd.read_csv('data/sal.csv',header=0,index_col=None)X=sal[['x']]y=sal['y']X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=10)lm=LinearRegression()lm.fit(X_train,y_train)训练好的模型会序列化到输出目录下的pickle文件中。AzureML自动将输出目录的内容复制到云中。filename='outputs/sal_model.pkl'joblib.dump(lm,filename)可以记录训练作业的斜率、截距和结束时间来完成实验。run.log('拦截:',lm.intercept_)run.log('斜率:',lm.coef_[0])run.log("Experimentendtime",str(datetime.datetime.now()))运行。complete()我们可以通过AzureDashboard跟踪指标和执行时间。注册和加载经过训练的模型每当我们冻结模型时,它都可以使用唯一版本注册到AzureML。这使我们可以在加载时轻松地在不同模型之间切换。让我们将SDK指向PKL文件的位置,以注册上述训练作业中的薪资模型。我们还以标签的形式向模型添加了一些额外的元数据。model=Model.register(model_path="outputs/sal_model.pkl",model_name="sal_model",tags={"key":"1"},description="SalaryPrediction",workspace=ws)检查工作区的模型部分,确保我们的模型已注册。是时候将模型打包到容器镜像(然后将作为Web服务公开)并进行部署了。为了创建容器映像,我们需要告诉AzureML我们的模型需要的环境。但是,我们传递了一个Python脚本,其中包含根据传入数据点预测值的代码。AzureMLAPI为两者提供了便捷的方法。让我们首先创建一个环境文件salenv.yaml,它告诉运行时环境将Scikit-learn添加到容器镜像中。salenv=CondaDependencies()salenv.add_conda_package("scikit-learn")withopen("salenv.yml","w")asf:f.write(salenv.serialize_to_string())withopen("salenv.yml","r")asf:print(f.read())当从JupyterNotebook执行时,以下代码片段会创建一个名为score.py的文件,其中包含模型的推理逻辑。%%writefilescore.pyimportjsonimportnumpyasnpimportosimportpicklefromsklearn.externalsimportjoblibfromsklearn.linear_modelimportLogisticRegressionfromazureml.core.modelimportModeldefinit():globalmodel#retrievethepathtothemodelfileusingthemodelnamemodel_path=Model.get_model_path('sal_model')model=joblib.load(model_path)defrun(nap.load.rays)数据:(raw_data)['data'])#makepredictiony_hat=model.predict(data)returnjson.dumps(y_hat.tolist())现在将推理文件和环境配置传递给图像,从而连接点。%%timeimage_config=ContainerImage.image_configuration(execution_script="score.py",runtime="python",conda_file="salenv.yml")这将最终创建将出现在工作区图像部分的容器图像。我们都准备好创建部署配置,定义目标环境并将其作为托管在Azure容器实例上的Web服务运行。我们还决定选择AKS或IoT边缘环境作为部署目标。aciconfig=AciWebservice.deploy_configuration(cpu_cores=1,memory_gb=1,tags={"data":"Salary","method":"sklearn"},description='PredictStackoverflowSalary')service=Webservice.deploy_from_model(workspace=ws,name='salary-svc',deployment_config=aciconfig,models=[model],image_config=image_config)service.wait_for_deployment(show_output=True)Azure资源组现在有一个Azure容器实例运行模型推理。我们可以通过此方法获取推理服务的URL:print(service.scoring_uri)现在通过cURL调用Web服务。我们可以在同一个JupyterNotebook上执行此操作。您可以从Github存储库访问数据集和JupyterNotebook。这种方法的独特之处在于,我们可以从运行在JupyterNotebook中的Python内核执行所有任务。开发人员可以使用代码来完成训练和部署ML模型所需的任务。这正是使用MLPaaS(例如MLService)的好处。原标题:BuildandDeployaMachineLearningModelwithAzureMLService,作者:JanakiramMSV