如何将您的自定义容器镜像导入Amazon SageMaker Studio Notebooks_亚马逊云自定义镜像-程序员宅基地

技术标签: AI/ML  

Amazon SageMaker Studio是第一套用于机器学习(ML)的全集成开发环境(IDE)。Amazon SageMaker Studio可帮助数据科学家们快速启动Studio notebooks以探索数据、构建模型、启动Amazon SageMaker训练作业并部署托管端点。Studio notebooks中随附一组预构建镜像,这些镜像由Amazon SageMaker Python SDK与IPython运行时或内核的最新版本构成。凭借此项新功能,您可以轻松将自定义镜像导入Amazon SageMaker notebooks当中。在本文中,我们将具体探讨如何将自定义容器镜像导入Amazon SageMaker notebooks。

  • Amazon SageMaker Studio

https://aws.amazon.com/sagemaker/

  • Amazon SageMaker Python SDK

https://sagemaker.readthedocs.io/en/stable/

开发人员与数据科学家一般需要在以下几种不同用例内使用自定义镜像:

  • 访问流行机器学习框架(包括TensorFlow、MXNet以及PyTorch等)的特定或最新版本。

  • 将本地开发的自定义代码或算法引入Studio notebooks内以进行快速迭代及模型训练。

  • 通过API访问数据湖或本地数据存储,且管理员需要在镜像中添加相应驱动程序。

  • 访问后端运行时(也称内核);除IPython之外,还有R、Julia或其它环境等。您也可以使用本文中概述的方法安装其他自定义内核。

在大型企业中,机器学习平台管理员往往需要保证安全团队预先批准第三方软件包及代码,而非直接通过互联网下载。在常见的工作流示例中,机器学习平台团队会批准一组要使用的软件包与框架,使用这些软件包构建自定义容器、测试容器中的漏洞,而后将核准后的镜像推送至私有容器注册表内,例如Amazon Elastic Container Registry(Amazon ECR)。现在,机器学习平台团队可以将经过核准的镜像直接附加至Studio域内(请参见以下工作流程图)。您只需在Studio中选定所需的获准自定义镜像即可。在当前版本中,单一Studio域最多可以包含30个自定义镜像,您可以根据需求添加新版本或删除镜像。

  • Amazon ECR

https://aws.amazon.com/ecr/

现在,我们将逐步介绍如何使用此项功能将自定义容器镜像导入Amazon SageMaker Studio notebooks当中。这里主要演示在互联网上使用时的默认方法,您也可以对其稍加修改以配合Amazon Virtual Private Cloud(Amazon VPC)进行使用。

  • Amazon VPC

https://aws.amazon.com/vpc/

先决条件

在开始之前,大家需要满足以下先决条件:

  • 亚马逊云科技账户。

  • 确保用于访问Amazon SageMaker的角色拥有以下Amazon Web Services身份与访问管理(IAM)权限,使Amazon SageMaker Studio能够在Amazon ECR中以smstudio为前缀创建一个repo,并面向此repo进行镜像推送与提取。要使用现有repo,请将其中的Resource部分替换为您的repo ARN。要构建容器镜像,您可以使用本地Docker客户端,或者直接在Amazon SageMaker Studio中创建镜像。本文采用后一种方法。要在Amazon ECR内创建repo,Amazon SageMaker Studio需要使用Amazon CodeBuild;

  • Amazon CodeBuild:

https://aws.amazon.com/codebuild/

您还需要拥有使用Amazon CodeBuild的权限,具体如下所示。

{
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchGetImage",
                "ecr:CompleteLayerUpload",
                "ecr:DescribeImages",
                "ecr:DescribeRepositories",
                "ecr:UploadLayerPart",
                "ecr:ListImages",
                "ecr:InitiateLayerUpload",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/smstudio*"
        },
        {
            "Effect": "Allow",
            "Action": "ecr:GetAuthorizationToken",
            "Resource": "*"
           }
{
            "Effect": "Allow",
            "Action": [
                "codebuild:DeleteProject",
                "codebuild:CreateProject",
                "codebuild:BatchGetBuilds",
                "codebuild:StartBuild"
            ],
            "Resource": "arn:aws:codebuild:*:*:project/sagemaker-studio*"
}
{
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringLikeIfExists": {
                    "iam:PassedToService": "codebuild.amazonaws.com"
                }
            }
}

左右滑动查看更多

您的Amazon SageMaker角色还应在Amazon CodeBuild中拥有信任策略,具体如下所示。关于更多详细信息,请参阅使用Amazon SageMaker Studio镜像构建Amazon CLI在Studio notebooks中构建容器镜像

  • 使用Amazon SageMaker Studio镜像构建Amazon CLI在Studio notebooks中构建容器镜像:

https://aws.amazon.com/blogs/machine-learning/using-the-amazon-sagemaker-studio-image-build-cli-to-build-container-images-from-your-studio-notebooks/

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "codebuild.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

在您的本地机器上安装Amazon Web Services命令行界面(Amazon CLI)。关于详尽操作说明,请参阅安装Amazon Web Services

  • 安装Amazon Web Services:

https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html

准备一个Amazon SageMaker Studio域。要创建此域,请使用CreateDomain API或者create-domain CLI命令。

  • CreateDomain API: 

https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateDomain.html

  • create-domain CLI:

https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-domain.html

如果您希望使用自有Amazon VPC以安全引入自定义容器,则需要完成以下操作:

  • 带有专有子网的Amazon VPC。

  • 用于以下服务的Amazon VPC端点:

Amazon Simple Storage Service (Amazon S3)

https://aws.amazon.com/s3/

Amazon SageMaker

Amazon ECR

Amazon Security Token Service (Amazon STS)

https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html

用于构建Docker容器的Amazon CodeBuild

要设置上述资源,请参阅使用专用Amazon VPC保护Amazon SageMaker Studio连接以及相关GitHub repo

  • 专用Amazon VPC保护Amazon SageMaker Studio连接:

https://aws.amazon.com/blogs/machine-learning/securing-amazon-sagemaker-studio-connectivity-using-a-private-vpc/

  • GitHub repo:

https://github.com/aws-samples/amazon-sagemaker-studio-vpc-blog

创建Amazon Dockerfile

为了体现数据科学家使用最新框架进行试验的普遍性需求,我们在本次演练中使用以下Amazon Dockerfile,其选择最新的TensorFlow 2.3版本作为基础镜像。您也可以使用自己指定的Amazon Dockerfile进行替换。目前,Amazon SageMaker Studio已经能够支持多种基础镜像,例如Ubuntu、Amazon Linux 2等等。Amazon Dockerfile将安装运行Juypter notebooks所需要的IPython运行时,同时安装Amazon SageMaker Python SDK与boto3。

除了笔记本电脑之外,除了notebooks之外,数据科学家与机器学习工程师们还经常使用各种流行IDE(例如Visual Studio Code或者PyÇharm)在本地notebooks上进行迭代与试验。您可能希望将这些脚本引入云端,借此进行扩展化训练或数据处理。您可以将这些脚本打包进Docker容器之内,并在Amazon SageMaker Studio的本地存储中查看。在以下Amazon Dockerfile中,我们复制的train.py脚本是一套用于在MNIST数据集上训练简单深度学习模型的基础脚本。您也可以使用自己的脚本或包含代码的软件包替换此脚本:

FROM tensorflow/tensorflow:2.3.0
RUN apt-get update 
RUN apt-get install -y git
RUN pip install --upgrade pip
RUN pip install ipykernel && \
    python -m ipykernel install --sys-prefix && \
    pip install --quiet --no-cache-dir \
    'boto3>1.0<2.0' \
    'sagemaker>2.0<3.0'

左右滑动查看更多

COPY train.py /root/train.py #可以替换为您的自定义脚本或软件包

以下代码为train.py脚本:

import tensorflow as tf
import os 

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=1)
model.evaluate(x_test, y_test)

左右滑动查看更多

除了自定义脚本之外,您也可以添加其他文件,例如可通过Amazon Secrets ManagerAmazon Systems Manager Parameter Store访问客户端secrets以及环境变量的Python文件、用于连接私有PyPi repo的config文件、或者其他软件包管理工具。您也可以使用自定义镜像复制脚本,但在这种情况下,Amazon Dockerfile中的一切Entrypoint或CMD命令均无法运行。

  • Amazon Secrets Manager:

https://aws.amazon.com/secrets-manager/

  • Amazon Systems Manager Parameter Store:

https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html

设置安装文件夹

您需要在本地机器上创建一个文件夹,并向其中添加以下文件:

  • 在上一步中创建完成的Amazon Dockerfile。

  • 名为app-image-config-input.json的文件,具体内容如下:

"AppImageConfigName": "custom-tf2",
    "KernelGatewayImageConfig": {
        "KernelSpecs": [
            {
                "Name": "python3",
                "DisplayName": "Python 3"
            }
        ],
        "FileSystemConfig": {
            "MountPath": "/root/data",
            "DefaultUid": 0,
            "DefaultGid": 0
        }
    }
}

我们将此Amazon Dockerfile的后端内核设置为IPython内核,并提供指向Amazon Elastic File System(Amazon EFS)的挂载路径。Amazon SageMaker可以识别出Juypter定义的内核。例如,对于R内核,您可以将之前代码中的Name部分设置为ir。请注意保证其中的Uid、Gid以及内核名称与Docker镜像中的kernelspecs及用户信息相匹配。要获取这些值,请参阅本文档

  • Amazon Elastic File System

https://aws.amazon.com/efs/

  • 文档

https://github.com/aws-samples/sagemaker-studio-custom-image-samples/blob/main/DEVELOPMENT.md

  • 使用以下内容创建一个名为default-user-settings.json的文件。如果您需要添加多个自定义镜像,请直接将其添加至CustomImages列表。

{
  "DefaultUserSettings": {
    "KernelGatewayAppSettings": {
      "CustomImages": [
          {
                   "ImageName": "tf2kernel",
                   "AppImageConfigName": "custom-tf2"
                }
            ]
        }
    }
}

左右滑动查看更多

创建镜像并将其附加至您的Studio域

如果您已经拥有现成的域,则直接使用新镜像进行更新即可。在本节中,我们将演示现有Studio用户如何进行镜像附加。关于启动新用户的说明,请参阅使用IAM登入Amazon SageMaker Studio

  • 使用IAM登入Amazon SageMaker Studio

https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-iam.html

首先,我们使用Amazon SageMaker Studio Docker构建Amazon CLI构建Amazon Dockerfile,并将其推送至Amazon ECR。请注意,您也可以使用其他方法将容器推送至Amazon ECR,例如通过本地Docker客户端以及Aamzon CLI。

  • 使用您的用户信息登录至Studio。

  • 将您的Amazon Dockerfile、以及其他需要复制到容器当中的代码或依赖项上传至Studio域。

  • 导航至包含Amazon Dockerfile的文件夹。

  • 在终端窗口或notebook内 —>

!pip install sagemaker-studio-image-build
  • 导出一个名为IMAGE_NAME的变量,并将其设定为您在default-user-settings.json当中所指定的值。

sm-docker build . –repository smstudio-custom:IMAGE_NAME

  • 如果要使用其他repo,请将以上代码中的smstudio-custom替换为您的repo名称。

Amazon SageMaker Studio将为您构建Docker镜像,将该镜像推送至Amazon ECR当中一个名为smstudio-custom的repo内,并为其标记适当的镜像名称。要进一步自定义此项功能(例如提供详细的文件路径或其他选项),请参阅使用Amazon SageMaker Studio镜像构建Amazon CLI在Studio notebooks中构建容器镜像。要让以上pip命令在专用Amazon VPC环境下起效,您需要设置互联网路由或访问专用repo内的相应软件包。

  • 使用Amazon SageMaker Studio镜像构建Amazon CLI在Studio notebooks中构建容器镜像

https://aws.amazon.com/blogs/machine-learning/using-the-amazon-sagemaker-studio-image-build-cli-to-build-container-images-from-your-studio-notebooks/

  • 在之前的安装文件夹中,创建一个名为create-and-update-image.sh的新文件:

ACCOUNT_ID=AWS ACCT ID # 替换为您的AWS账户ID
REGION=us-east-2 # 替换为您的区域
DOMAINID=d-####### # 替换为您的SageMaker Studio域名称
IMAGE_NAME=tf2kernel # 替换为您的镜像名称

# 使用Amazon SageMaker Studio
## 使用ECR中的镜像创建SageMaker镜像(根据需求修改镜像名称)
ROLE_ARN='The Execution Role ARN for the execution role you want to use'

aws --region ${REGION} sagemaker create-image \
    --image-name ${IMAGE_NAME} \
    --role-arn ${ROLE_ARN}

aws --region ${REGION} sagemaker create-image-version \
    --image-name ${IMAGE_NAME} \
    --base-image "${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/smstudio-custom:${IMAGE_NAME}"

## 为此镜像创建AppImageConfig(根据需要修改app-image-config-input.json中的AppImageConfigName与KernelSpecs参数)
aws --region ${REGION} sagemaker create-app-image-config --cli-input-json file://app-image-config-input.json

## 提供镜像与AppImageConfig以更新此域
aws --region ${REGION} sagemaker update-domain --domain-id ${DOMAINID} --cli-input-json file://default-user-settings.json

左右滑动查看更多

请参阅Amazon CLI以了解可在create-image API中使用的各项参数的详细信息。要检查当前状态,请导航至您的Amazon SageMaker控制台,并在导航面板中选择Amazon SageMaker Studio。

使用Studio UI附加镜像

您也可以通过UI完成将镜像附加至Studio域的最后一步。在此用例中,UI将处理镜像与镜像版本的创建操作,并使用附加的镜像完成域更新。

  • 在Amazon SageMaker控制台上,选择Amazon SageMaker Studio。

在Control Panel页面上,可以看到已经置备完成的Studio域以及您所创建的所有用户配置。

  • 选择Attach image

  • 选择要附加新镜像,还是附加原有镜像。

a. 如果您选择Existing image,请从Amazon SageMaker镜像库中选择一个镜像。

b. 如果您选择New image,请提供Docker镜像的Amazon ECR注册表路径。此路径需要与Studio域处于同一区域内。Amazon ECR repo还需要与您的Studio域处于同一账户内;如果需要跨账户操作,则Studio必须具备相应权限。

  • 选择Next。

  • Image name部分,输入名称。

  • Image display name部分,输入描述性名称。

  • Description部分,输入标签定义。

  • 在IAM role部分,选择Amazon SageMaker用于向Amazon SageMaker镜像附加Amazon ECR镜像的IAM角色。

  • 此外,您也可以对镜像做出其他标记。

  • 选择Next。

  • 在Kernel name部分,输入Python 3。

  • 选择Submit

绿色复选框代表镜像已被成功附加至域内。

Amazon SageMaker镜像存储将自动对镜像进行版本控制。您可以选择一个预先附加的镜像,而后选择Detach以分离该镜像及所有相关版本,或者选择Attach image以附加新版本。各镜像的版本数量或分离镜像的功能不受限制。

自定义镜像用户体验

下面,我们尝试Studio的实际用户体验。

  • 使用您的用户资料登录至Studio。

  • 要启动新活动,请选择Launcher。

  • Select a Amazon SageMaker image to launch your activity部分,选择tf2kernel。

  • 选择Notebook图标,使用自定义内核打开一个新notebook。

Notebook内核需要几分钟才能启动完成,之后即可开始使用!

在Notebook中测试您的自定义容器

在内核启动并开始运行之后,您即可在notebook中运行代码。首先,我们测试Amazon Dockerfile中指定的TensorFlow是否为正确版本。在以下截屏中,可以看到我们刚刚创建的notebook正在使用tf2kernel。

Amazon SageMaker notebooks还会显示本地CPU与内存使用量。

接下来,我们直接在notebook中使用自定义训练脚本。将训练脚本复制到notebook单元中并运行。此脚本会从tf.keras.datasets处下载mnist数据集,并将数据拆分为训练数据集与测试数据集,自定义一项定制化深度神经网络算法,在训练数据集上训练算法,并在测试数据集上测试算法。

要尝试使用TensorFlow 2.3框架,大家可能希望测试新发布的API,例如Keras中提供的预处理实用程序等新功能。在以下截屏中,我们导入了随TensorFlow 2.3版本发布的keras.layers.experimental 库,其中包含用于数据预处理的新API。我们加载其中一个API,而后在notebook中重新运行脚本。

Amazon SageMaker还能够在代码运行过程中动态修改CPU与内存使用率。通过引入自定义容器与训练脚本,此功能使您能够直接在Amazon SageMaker notebook中尝试自定义训练脚本与算法。如果您对Studio notebook中的试验结果感到满意,则可立即启动训练作业。

Docker file中所包含的、使用COPY命令的Python文件或其他自定义文件运行情况如何?Amazon SageMaker Studio会挂载app-image-config-input.json所提供的文件路径中的弹性文件系统,在本示例中我们将其设定为root/data。为了避免Studio覆盖掉需要包含的自定义文件,COPY命令会将train.py文件加载至路径/root当中。要访问此文件,请打开终端或notebook并运行以下代码:

! cat /root/train.py

这时您应看到以下截屏所示的输出结果。

可以看到train.py 文件位于指定位置。

Amazon CloudWatch中的日志记录

Amazon SageMaker Studio还会将内核指标发布至Amazon CloudWatch供您进行故障排查。这些指标将被捕捉至/aws/sagemaker/studio命名空间之内。

要访问日志,请在Amazon CloudWatch控制台上选择Amazon CloudWatch Logs。在Log groups页面中,输入命名空间以查看与Jupyter服务器及内核网关相关的日志记录。

分离镜像或版本

您可以从域中分离镜像或特定镜像版本。

要分离镜像及其全部版本,请在Custom images attached to domain表内选定该镜像,而后选择Detach。

您还可以选择删除镜像及所有版本,这不会影响到Amazon ECR中的镜像。

要分离镜像的特定版本,请选定该镜像。在Image details页面上,从Image versions attached to domain表中选择目标镜像版本(一个或者多个版本),而后选择Detach。您会看到如上所示的警告及操作选项。

总结

Amazon SageMaker Studio使您能够更轻松地对机器学习模型进行协作、实验、训练及部署。在这之前,数据科学家往往需要通过公共及私有代码repo以及软件包管理工具才能访问最新机器学习框架、自定义脚本以及软件包。现在,您可以将所有相关代码打包进自定义镜像之内,并使用Studio notebook启动这些镜像。这些镜像可供Studio域内的所有用户使用。您也可以使用此项功能使用Python之外的其他流行语言及运行时,包括R、Julia以及Scala等。您可以在GitHub repo中找到示例文件。关于此项功能的更多详细信息,请参阅自带Amazon SageMaker镜像

  • GitHub repo

https://github.com/aws-samples/sagemaker-studio-custom-image-samples

  • 自带Amazon SageMaker镜像

https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html

本篇作者

Stefan Natu

亚马逊云科技公司高级机器学习专家

致力于帮助金融服务客户在亚马逊云科技上构建端到端机器学习解决方案。在业余时间,他喜欢阅读机器学习技术博客、演奏吉他和探索纽约当地的各种美食。

Jaipreet Singh

Amazon SageMaker Studio团队高级软件工程师

自2017年立项以来就一直从事Amazon SageMaker的开发工作,并为多个Jupyter开源项目做出贡献。业余时间,他喜欢远足和滑雪。

Huong Nguyen

亚马逊云科技公司高级产品经理

负责Amazon SageMaker Studio的用户体验工作。她在企业级及消费级领域拥有13年客户体验与数据驱动产品开发经验。在业余时间,她喜欢读书、享受自然风光和陪伴家人。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012365585/article/details/122110333

智能推荐

Ubuntu16双网卡上网设置_ubuntu 多网卡 设置默认路由-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏9次。文章目录前言route方法一. 删网关方法二. 增大Metric注意微信公众号前言现在有两个网络:公司的局域网192.168.3.x, 通过有线连接, 可以访问公司内网.无线连接的192.168.1.x, 可以访问外网.想要无线主力, 只有访问内网东西时采用有线, 常见做法是用到内网插有线(会自动顶掉无线), 否则拔掉网线用无线. 有没有简单点的办法?route先连上无线, 再插..._ubuntu 多网卡 设置默认路由

画图学习总结_echarts聚类图-程序员宅基地

文章浏览阅读379次。利用pyecharts画图在聚类分析后利用pyecharts画二维和三维散点图,pyecharts画的图片一般是以html文件保存首先确定x轴的数据,而后再确定y轴的数据,这样可以确定平面的数据,当然是因为聚类,分了五簇,确定了五个y的值data_1=data.valuesx=data_1[:,3]y1=x0.values[:,0]y2=x1.values[:,0]y3=x2.values[:,0]y4=x3.values[:,0]y5=x4.values[:,0](Scat_echarts聚类图

GY906 MLX90614 非接触式 红外测温传感器 LabVIEW i2c总线数据读取-程序员宅基地

文章浏览阅读5.3k次。GY906使用的红外测温芯片为MLX90614。使用LabVIEW读取i2c总线数据时,需要知道传感器的地址,出厂默认为0x5A。传感器地址支持自己修改,存放在芯片EEPROM的0x0E位置,可以通过访问EEPROM的0x0E单元来获得传感器的地址。具体修改和访问EEPROM参考链接:ARDUINO使用MLX90614红外温度传感器研究笔记_雨田大大的专栏-程序员宅基地_mlx90614红外传感器工作原理使用LabVIEW中封装好的I2C express vi可以对传感器的I2C总线进行访问_labview i2c

这些学习方法等于瞎忙-程序员宅基地

文章浏览阅读602次,点赞22次,收藏17次。任何不加验证的知识和经验都是一种空泛的存在,因为我们不掌握这些知识和经验可以使用或不可以使用的环境特征,就极容易导致关键时刻使用相关知识和经验造成严重后果,同时也会影响我们的使用积极性,所以我们所学知识、技能和经验的验证和学习本身一样重要。不注重学习的系统性、方向性和自身所处阶段的结合,投入时间去学习自身所能涉猎的任何内容,对所学学科不做阶段性规划,同一时期在学不同学科的内容,随手拿来就学,这样的学习方法无法避免知识体系之间互相的干扰和破坏,更不利于解决系统性问题。第七种、学习的过程中没有积累。

大数据运维实战第十二课 Hadoop 分布式资源管理器 Yarn、MR 运行机制剖析_yarn rmadmin-程序员宅基地

文章浏览阅读776次,点赞2次,收藏4次。本课时主要讲解了分布式资源管理器 Yarn、MR 运行机制,以及 Yarn 相关的 shell 命令,对于 Yarn 资源运行机制的了解有助于对 Hadoop 集群进行调优和故障排查,这部分内容非常重要,要求我们能熟练掌握。......_yarn rmadmin

IDEA-Tomcat-源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示_idea源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。-程序员宅基地

文章浏览阅读6.4w次,点赞36次,收藏104次。IDEA-Tomcat-源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示1起因2经过3说白了1起因在学习springMVC的过程中,写了一个demo需要部署到本地Tomcat上来运行(直接使用IDEA配置本地tomcat,不用再手动发war包到tomcat目录下)。因为之前用SpringBoot项目比较多(集成了Tomcat,不需要额外部署设置;也不需要额外配好多xml),所以这部分可以说是从0学起,踩了好多坑。出现上面“源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源_idea源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

随便推点

11gR2,AUTOTASK无法自动调度-程序员宅基地

文章浏览阅读210次。最近遇到了2个库的AUTOTASK无法自动调度。总结下AUTOTASK调度的知识点1.查询当前调度状态 总的调度状态从KET$_AUTOTASK_STATUS中查询,AUTOTASK_STATUS=2为ENABLE,..._dba_autotask_task 为空

MySQL数据库索引介绍_主键索引创建格式-程序员宅基地

文章浏览阅读1.1k次,点赞24次,收藏21次。索引就是一种帮助系统更快查找信息数据的集合表。索引是一个排序的列表,储着索引的值和包含这个值的数据所在行的物理地址无需全表扫描,访问相应的数据,能加快数据库的查询速度索引是表中一列或者若干列值排序的方法需要额外的磁盘空间普通索引是最基本的索引类型,它没有唯一性限制,允许列中存在重复的值。唯一索引要求索引列的值是唯一的,不允许重复值。唯一索引允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。_主键索引创建格式

2008-1-14 《软件工程》课后习题解答...-程序员宅基地

文章浏览阅读1.3w次,点赞9次,收藏62次。第一章 概述1.软件产品的特性是什么? a.软件产品是一种逻辑产品。 b.软件产品的生产主是研制,软件产品的成本主要体现在软件的开发和研制上,软件开发完成后,复制就产生了大量软件产品。 c.软件产品不会用坏,不存在磨损、消耗问题。 d.软件产品的生产主要是脑力劳动,还未完全摆脱手工开发方式,而且碰分是"定做"的。 e.软件费用不断增加,成本相当昂贵。2...._某厂对部分员工重新分配工作的政策是

Teamcenter二次开发介绍及资料_teamcenter soa二次开发-程序员宅基地

文章浏览阅读4k次。1、RCP客户端开发Teamcenter客户化RCP二次开发2、SOA集成开发Teamcenter客户化SOA二次开发3、ITK服务端开发Teamcenter客户化ITK二次开发4、UtilityTeamcenter客户化Utility二次开发5、AWCTeamcenter客户化AWC二次开发6、系统集成Teamcenter客户化之系统集成7、RCP,ITK及SOA二次..._teamcenter soa二次开发

基于单片机的智能控制家电开关系统的设计和实现_基于单片机的智能家电控制系统设计-程序员宅基地

文章浏览阅读1.3k次,点赞35次,收藏25次。本文首先介绍了单片机的原理和基本分类,之后分析了智能控制系统中单片机的实际应用,最后提出Wi-Fi模式和蓝牙模式的单片机智能控制家电开关系统,以此来达到智能控制家用电器的目的,为互联网智能控制体系的完善提供了有效保障。智能家居控制领域中单片机发挥着非常重要的作用,具有较为广泛的应用前景,在智能控制系统中,单片机的出现不仅实现了产品设计的优化,并且提高了效率和质量,因此文章基于单片机重点阐述了智能控制家电开关系统的具体设计,为现代人生活便捷提供有效保障。_基于单片机的智能家电控制系统设计

Vue封装websocket_vue websocket封装-程序员宅基地

文章浏览阅读4.6k次,点赞4次,收藏21次。Vue封装websocket_vue websocket封装