Amazon SageMaker 是一项完全托管的服务,可为每位开发人员和数据科学家提供快速构建、训练和部署机器学习 (ML) 模型的能力,而无需担心基础设施。 Julia 是一种高级、高性能、动态编程语言。虽然它是一种通用语言,可用于设计各种应用程序,但它的许多功能非常适合数值分析和计算科学。通过在 SageMaker 上运行 Julia,您将能够充分利用这种编程语言,因为您可以轻松访问高性能实例。 Amazon SageMaker 笔记本实例是运行 Jupyter Notebook 应用程序的机器学习 (ML) 计算实例。 SageMaker 管理与供应相关的资源。您可以在笔记本实例中使用 Jupyter 笔记本来准备和处理数据、编写代码来训练/验证模型,并将它们部署为 SageMaker 端点。您可以在笔记本实例中创建多个笔记本。要创建笔记本实例,您应该转到 AWS SageMaker 控制台中的笔记本实例,然后单击创建笔记本实例按钮: 笔记本实例类型:实例类型因硬件而异。有关配置和定价的更多信息,请查看 AWS SageMaker 定价页面。卷大小(以 GB 为单位):默认情况下,会为实例分配 5GB。如果您需要更大的存储空间,您可以将其增加到 16 TB。目前,SageMaker Notebook Instances 不包括 Julia 作为可用内核,因此必须手动安装它并将其添加到本页面生命周期配置部分中的 Notebook 实例。生命周期配置提供在创建实例时运行的 shell 脚本。添加生命周期配置:将此脚本粘贴到创建笔记本部分,此脚本将在您的笔记本实例第一次启动时安装并激活 Julia:
#!/bin/bash set -esudo -u ec2-user -i <<EOF echo "./home/ec2-user/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc conda create - -yes --prefix ~/SageMaker/envs/julia curl --silent https://julialang-s3.julialang.org/bin/linux/x64/1.6/julia-1.6.0-linux-x86_64.tar.gz | tar xzf - cp -R julia-1.6.0/* ~/SageMaker/envs/julia/ mkdir -p ~/SageMaker/envs/julia/etc/conda/activate.d echo 'export JULIA_DEPOT_PATH=~/SageMaker/envs/ julia/depot' >> ~/SageMaker/envs/julia/etc/conda/activate.d/env.sh echo -e 'empty!(DEPOT_PATH)\npush!(DEPOT_PATH,raw"/home/ec2-user/SageMaker /envs/julia/depot")' >> ~/SageMaker/envs/julia/etc/julia/startup.jl conda activate /home/ec2-user/SageMaker/envs/julia julia --eval 'using Pkg; Pkg.add("IJulia");使用 IJulia 的 EOF 将此脚本粘贴到启动笔记本部分此脚本将在您每次启动笔记本实例时激活 Julia:#!/bin/bash set -esudo -u ec2-user -i <<EOF echo ". /home/ ec2-user/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc conda run --prefix ~/SageMaker/envs/julia/ julia --eval '使用 IJulia; IJulia.installkernel("Julia")' EOF 您的笔记本实例将在几分钟内准备就绪。第一次启动实例或安装包需要一些时间。注意:如果您有一个 .jl 文件并且想要在笔记本之外运行它,只需打开一个终端(通过 File->New->Terminal)并运行以下命令:这整个过程可以通过 Amazon CloudFormation 自动化模板。使用 CloudFormation 模板创建笔记本:为堆栈和笔记本选择一个名称,并指定卷大小和实例类型。
注意:此过程将在 EU-West-1 区域创建笔记本,如果您更喜欢其他区域,请使用 aws 控制台中的右上角选项列表更改它。 CloudFormation 将为您制作一个笔记本实例以及 Lifecycle 配置。您始终可以使用堆栈的删除选项删除所有创建的资源。与其他机器学习编程语言相比,Julia 的主要优势在于它的速度。这有两个主要原因:首先,Julia 是一种编译语言,其次,它是为并行性而设计的。现在我们已经在 SageMaker 上准备了我们的 Julia 环境,我们可以继续下一步并查看 Julia 的运行情况。为此,我们将在 Iris 数据集上执行分类任务。在这里,我们使用 Iris 数据集来利用 Julia 进行机器学习。该数据集包括鸢尾花特征,如花瓣长度和宽度及其对应的确切物种。有关数据的更多信息,请参见此处。在开始之前,我们需要为我们的工作安装必要的软件包。这些软件包不附带默认的 Julia 安装。这就是为什么我们需要单独安装它们。安装可能需要一段时间,但我们不需要在下次使用时再次安装它们。要在 Julia 中安装和使用包,可以使用以下代码行: 添加必要的包后,这里我们将 Iris 数据集加载到 Dataframe 对象。首先,让我们通过绘制 Pairplot 来初步了解我们的特征,这里我们定义我们手工制作的 Pairplot:
plots = [[], [], [], []] for (i , yaxis ) in enumerate ([ " S epal L ength ", " S epal W idth ", " P etal L ength ", " P etal W idth "]) for (j , xaxis ) in enumerate ([ " Petal W idth ", " Petal L ength ", " S epal W idth ", " S epal L ength "]) if i == 5 - j推! (plots [i], histogram (iris [!, yaxis], label =yaxis , size =(2000, 1500), dpi = 200, group =iris .Species )) else push! (plots [i], scatter (iris [!, xaxis], iris [!, yaxis], group =iris .Species, size =(2000, 1500),markerstrokewidth = 0, dpi = 200, xlabel =xaxis, ylabel = yaxis )) end end endl = @layout [abcd;啊; ijkl ; mnop ]plt = 绘图(绘图 [4][1]、绘图 [4][2]、绘图 [4][3]、绘图 [4][4]、绘图 [3][1]、绘图 [3] [ 2],图 [3][3],图 [3][4],图 [2][1],图 [2][2],图 [2][3],图 [2][4] ], 绘图 [1][1], 绘图 [1][2], 绘图 [1][3], 绘图 [1][4], layout = l )savefig (plt, " img / pairplot _ 1 . png ")display (plt) 为了准备我们的数据集进行训练,有必要对其进行操作以用于训练。例如,这里我们将目标变量(Setosa、Virginica 和 Versicolor)编码为数值。 # 将特征和标签分别加载到数组X = Matrix(iris [ :, 1 : 4])irislabels = iris [ :, 5] # 将物种名称编码为1,2,3标签 irislabelsmap = labelmap (irislabels )y = labelencode (irislabelsmap , irislabels ) 在机器学习问题中,通常将数据子集作为测试集放在一边。训练完成后,模型的性能将在这些看不见的数据上进行评估,以确保通用性。下面的代码将相应地划分数据集。 # 拆分数据集来训练和测试 settrainids = randsubseq ( 1 :length (y ), 0.7)testids = setdiff ( 1 :length (y ), trainids )X_train = X [trainids , :]y_train = y [trainids ]X_test = X [testids , :]y_test = y [testids ] 现在我们准备了训练和测试数据,我们将使用 LibSVM 包在训练数据上训练支持向量机分类器。 X_train' 是 X_train 的转置矩阵。一旦模型经过训练,我们就可以预测测试集的标签并使用准确度指标评估其性能。
Predictions_SVM , decision_values = svmpredict (model , X_test ')mean (predictions_SVM .== y_test ) * 100 > > > 93.87755102040816predictions_SVM , decision_values = svmpredict (model , X_test ') * 100 > > > 93.87755102040816predictions_SVM ,decision_values = svmpredict (model , XVM_train_090909090==SVM 09090==SVM=SVM 09090901==如您所见,我们的模型在训练集上有点过拟合,但在测试集上仍然具有可接受的准确性。可以在 Amazon SageMaker 定价页面上查看可用笔记本实例及其价格的列表。虽然云计算的一个令人兴奋的优势是您可以从各种按需资源中进行选择,但因过度配置资源而花费过多或因配置不足而导致的故障始终是一个问题。为了选择最佳 SageMaker 实例,我们可以通过 CloudWatch 监控硬件利用率(CPU、内存、磁盘)。监控硬件利用率指标可以帮助我们在价格和功耗方面选择最佳实例。有关更多信息,请参阅我们关于“如何在 SageMaker 上选择最佳训练实例”的帖子。默认情况下,Sagemaker Notebook 实例不会将利用率指标发送到 CloudWatch,因此必须手动配置。为此,您应该在笔记本终端中运行以下命令,可通过 File->New->Terminal 获得。现在我们设置了我们的配置,我们可以在 CloudWatch 中看到我们的资源使用情况。要访问我们的笔记本指标,我们应该从 AWS 控制台转到 CloudWatch。之后,在 Metrics/custom 命名空间中,我们可以找到一个名为“JuliaAWS-notebook-metrics-1”的指标组,其中包含我们想要的指标。 这里我们运行上一节代码(虹膜数据集分类),可以看到每个内核的 CPU 使用率指标(我们使用了具有两个 CPU 内核的 ml.t2.medium):求解微分方程是科学计算中的重要领域之一。 Julia 在该领域拥有许多优于其他选项的优势,包括高效率、内置并行性和 GPU 兼容性。事实上,在一项比较研究中,Julia 完全领先于其他编程语言,包括 Matlab 和 Python。为了了解 Julia 在求解和可视化微分方程方面的惊人之处,我们对著名的洛伦兹系统进行了可视化。为了充分利用 Julia 求解微分方程,您应该查看微分方程包。
根据 。 @kwdef mutable struct Lorenz dt :: Float64 = 0.02 # 步长 σ :: Float64 = 10 ρ :: Float64 = 28 β :: Float64 = 8 / 3 x :: Float64 = 1 # 初始浮动 y64 = #1初始坐标 z :: Float64 = 1 # 初始坐标 end 此函数计算每个坐标(即 x,y,z)函数步骤的导数和返回新值! (l : :Lorenz ) dx = l .σ * (l .y - l .x ); l .x += l .dt * dx dy = l .x * (l .ρ - l .z ) - l .y ; l .y += l .dt * dy dz = l .x * l .y - l .β * l .z ; l .z += l .dt * dz endattractor = Lorenz () # 用 1 个空序列初始化 3D 图plt = plot3d ( 1, xlim = ( - 30, 30), ylim = ( - 30, 30), zlim = ( 0, 60), title = " L orenz A ttractor ", marker = 2, show = true) # 通过将新点推入绘图来构建动画 gif,每 10 帧保存一次 @gif for i = 1 : 1500 step! (吸引子)推! (plt , 吸引器 .x , 吸引器 .y , 吸引器 .z ) 每 5 次结束。适用于 Julia 的 AWS 软件开发工具包 (SDK) 通过为 Juila 开发人员提供一组一致且熟悉的库来简化 AWS 服务的使用。它为不同的 AWS 资源提供支持,例如 AWS S3、AWS SageMaker、AWS SES 和一些其他服务。在这里,我们展示了使用 AWS SDK for S3 存储桶下载和上传文件的示例用法。注意:目前,AWS 没有为 Julia 提供官方 SDK,因此这些 SDK(由 Julia 开发人员开发)对于某些 AWS 服务可能不是最新的。
Amazon Simple Storage Service (Amazon S3) 是用于 Internet 的存储。 Amazon S3 有一个简单的 Web 服务接口,您可以使用它来随时从 Web 上的任何位置存储和检索任意数量的数据。使用 AWS:@service @service S3 s3_bucket_name = "sample-s 3-bucket-name"file_path = "file.csv" output_file = S3.get_object (s3_bucket_name, file_path)open ("output.csv", "a") do file write (file , output_file ) end 要将文件从笔记本实例上传到 S3 存储桶,可以使用以下代码。 @service S3 body = read (" output .csv ", String )s3_bucket_name = " sample - s 3 - bucket - name "destination_file_name = " output .csv "output_file = S3 .put_object (s3_bucket_name , destination_file_name , Dict( "body" = > body )) 在这篇博文中,我们在 AWS SageMaker 上设置了 Julia 的环境,并将其用于实际案例。在云上工作让我们有机会访问各种实例选项,并能够监控我们的资源使用情况。可在此存储库中访问与此帖子相关的代码和文件。