个性分析

DCS Cloud大约 20 分钟

个性分析

DCS智能云平台个性分析是基于Jupyter 的在线协作分析工具。旨在帮助用户轻松创建、组织和共享项目代码、数据、环境和结果,并保证其可重复性。同时支持在线分析和离线分析。

在线分析

在线分析是基于Jupyter 的在线协作分析工具。

快速运行在线分析

运行在线分析前,需要完成以下前置步骤:

创建项目

在DCS智能云平台上进行分析的第一步是创建项目,在「项目管理」首页新建项目。或者你也可以在已加入的项目中分析。

构建镜像

镜像是启动分析容器的基础,它包含了完整的文件系统、运行环境和所需的依赖项。通过使用镜像,可以创建一个或多个容器,每个容器都是一个独立的运行实例。在项目「镜像管理」模块中新建自定义镜像。

准备数据

容器挂载文件是将项目文件或目录与Docker容器内的文件系统进行关联,使容器可以访问项目文件。通过挂载文件,可以实现在容器内对项目文件的读取。可通过「数据管理」上传数据,并将「数据管理」中的文件挂载到启动容器中。

创建分析

  1. 点击“新建在线分析”创建一个新的分析空间。不同分析的环境与数据相互隔离。
  1. 新建后填写分析的基础信息,选择编程环境及计算资源配置,选择镜像并挂载数据后保存。
    a. 编程环境:云平台提供两种编程环境,Jupyter适用于数据分析处理及可视化等操作,当想进行代码编写及调试更推荐使用Vscode

    b. 计算资源:云平台提供写代码、安装软件(software)、大内存、GPU等资源类型,software节点用于联网安装软件,为保证数据安全,选择该节点, 不可挂载数据

    c. 时间设置:为了节省费用,请设置闲置时间,当 分析 闲置(未运行任何代码且页面不在激活状态)超过设置的时间后自动释放该节点。

    d. 镜像:选择Jupter或Vscode,需要选择匹配的镜像,否则会启动失败。系统为Vscode提供code-server默认镜像,可基于该镜像继续打包软件。

    e. 存储资源:为防止资源滥用,云平台给每个个性分析用户的work目录分配了1T的配额,超过使用上限后续将影响分析启动。

    f. 分析创建完成后直接点击右上角“快速运行”按钮,启动分析容器并开始分析。

提示

若镜像资源过大,分析容器启动需要较长时间。可在容器启动完成后,点击分析的运行历史中的“打开”或直接点击“快速运行”进入容器。

针对创建的分析空间,可进行复制、编辑、删除、发布等操作。

JupyterLab 简介

JupyterLab 的主要元素有:

  1. 左侧边栏,支持以下功能:

    a. 查看和管理在分析过程中创建或添加(上传或下载)的文件,包括 .ipynb文件;

    b. 管理当前正在运行的内核会话;

    c. 显示当前打开的 .ipynb文件的结构和目录,并支持快速浏览和跳转;

    d. 安装、卸载、启用和禁用JupyterLab的扩展,以增强和定制JupyterLab的功能。

  2. 文件目录

    input:数据的挂载目录;

    task:可查看已运行的离线分析结果;

    temp:分析的中间结果可保存在临时存储在该目录,容器关闭后,该目录下的文件会被自动销毁;

    users:可查看项目组其他成员的.ipynb文件和离线分析任务结果;

    work:工作目录,用户可在工作目录下创建文件夹或文件,新创建的目录和分析的文件会保存在工作目录,与项目组其他成员共享。该目录下的.ipynb文件会被系统读出,展示在「个性分析」模块首页,在work目录下更深层目录的.ipynb文件不会被读取。

  3. 工具栏,提供了常用的功能和操作选项,如保存文件,剪切、复制和粘贴代码块,撤销和重做,运行,中断内核,重启内核等操作。

  4. Notebook,包含了交互式分析的代码和输出结果,以及附带的Markdown 注释。

  5. Cell,可以输入代码、Markdown和原始文本。

  6. Terminal,JupyterLab 终端扩展,类似于Linux shell 或Windows Power Shell。

  7. Console,提供了一个交互式的命令行界面,可以在JupyterLab环境中执行命令和操作,方便进行实验、调试和数据处理。

Vscode简介

VS Code 具有简单直观的布局,可最大化为编辑器提供的空间,同时留出足够的空间来浏览和访问文件夹或项目的完整上下文。UI 分为五个主要区域:

  • 编辑器- 编辑文件的主要区域。您可以垂直和水平并排打开任意多个编辑器。

  • 主侧边栏- 包含不同的视图(例如资源管理器),以在您处理项目时为您提供帮助。

  • 状态栏- 有关打开的项目和您编辑的文件的信息。

  • 活动栏- 位于最左侧,可让您在视图之间切换并为您提供其他特定于上下文的指示器,例如启用 Git 时传出更改的数量。

  • 面板- 编辑器区域下方用于查看视图的附加空间。默认情况下,它包含输出、调试信息、错误和警告以及集成终端。面板还可以向左或向右移动以获得更多垂直空间。

云平台集成的Vscode的文件目录

  1. input:数据挂载目录;

  2. output:输出目录用于存储您希望保存到项目数据管理中的文件。在分析容器关闭后,所有文件将直接上传到您的项目文件中,供其他项目成员进行分析。请注意,重置资源和挂载数据将启动一个新的分析容器并触发数据保存

  3. output-history:该目录用于存储转移到数据管理中失败的文件,可手动删除

  4. task:可查看已运行的离线分析结果;

  5. temp:分析的中间结果可保存在临时存储在该目录,容器关闭后,该目录下的文件会被自动销毁;

  6. users:可查看项目组其他成员的分析文件和离线分析任务结果;

  7. work:工作目录,用户可在工作目录下创建文件夹或文件,新创建的目录和分析的文件会保存在工作目录,与项目组其他成员共享。该目录下的'.py', '.r', '.wdl', '.ipynb', '.yaml', '.rdata'文件会被系统读出,展示在「个性分析」模块首页

如何查看Vscode的分析环境中的云平台工作目录?

Vscode从数据管理挂载到容器中分析使用,进入容器后,在左侧活动栏选择"file"->"Open Folder",选择/data/目录,可以看到与Jupyter一致的目录结构。

更多Vscode使用方式参考以下链接:https://code.visualstudio.com/docs/editor/vscode-webopen in new window

容器控制

保存环境:将当前运行容器环境保存成新镜像;

重置资源:分析过程中所使用资源余量不足、需要切换镜像环境或需要重新挂载数据时,可通过“重置资源”重新申请分析资源、切换镜像和挂载数据。系统将根据配置后的资源重启容器。

修改容器的数据挂载,用户挂载的数据将在容器input目录下。支持按文件挂载和按分析任务挂载。

  1. 文件挂载:支持挂载项目「数据管理」模块的数据;

提示

按文件挂载最多支持挂载 1000 个文件。

  1. 任务挂载:可选择项目中任意任务的结果数据进行挂载,也可通过“选择前1000条”快速选择按时间倒序排列的前1000个任务结果数据进行挂载。

提示

按任务挂载最多支持挂载 1000 个任务。

关闭:关闭容器,停止分析。

延时:延长分析时长。

保存数据

容器启动时将会自动生成 output 目录,可以将需要同步至项目「数据管理」的结果数据转移至 output 目录下:

Step1: 启动 Terminal

Step2:使用命令将文件移动或拷贝至 output 目录

示例:

  1. 将 work 目录下的1.md文件移动至 output 目录,你可以使用以下命令:
mv /data/work/1.md /data/output/
  1. 将 work 目录下的1.md文件拷贝至 output 目录,你可以使用以下命令:
cp /data/work/1.md /data/output/

Step3: 完成分析并将数据全部转移至 output 目录后关闭容器,output 下的文件将会自动上传到「数据管理」/Files/ResultData/Notebook/{user}/output/{project_id}/目录下

注意

同步数据建议使用转移的方式,若使用拷贝的方式,完成后请立即删除work目录下重复的文件,work目录为计算存储,浪费存储资源的同时会收取更贵的存储费用。

容器关闭时,会自动将 output 目录下的数据上传「数据管理」。挂载数据、重置资源会重启容器,也会触发数据自动上传。

数据保存的状态可以在「任务管理-数据分析」模块查看。

AI 辅助编程

Stereonote-AI 是DCS智能云平台基于 Jupyter-AI 并结合平台自研的 Genpilot 开发的辅助编程插件,旨在提高数据工作的效率和生产力。您只需用通俗易懂的语言提出问题,Stereonote-AI 就会根据您的指示编写或修改代码。它还能为复杂的代码提供简明的解释,加深你的理解。无论您是专家还是编码初学者,Stereonote-AI都能帮助您出色地完成编程工作。

注意

Stereonote-AI 仅在阿里云片区可使用。

注意

Stereonote-AI 利用基于大型语言模型 (LLM) 的生成式人工智能技术,根据您的指令提供答案。生成的代码和文本等输出结果可能包含错误、偏差和不准确性。请务必在运行代码前对其进行审查。

Stereonote-AI 被封装在官方镜像stereonote-ai 中,选择 stereonote-ai 镜像启动容器即可体验相关功能:

提示

可将 stereonote-ai 作为基础镜像安装所需软件包,构建带有 AI 助手的自定义镜像,如何基于基础镜像构建自定义镜像,详见基于平台预设基础镜像构建

stereonote-ai 提供了两种不同的界面交互。在 JupyterLab 中,你可以使用聊天界面进行对话,以帮助处理代码。此外,你还可以使用%%ai魔术命令调用模型。

编程助手

Jupyter 聊天界面如下图所示,用户可以直接与 Jupyternaut(编程助手)进行对话。

简单问答

代码生成

直接在对话框输入问题

代码解释

代码重写

如果你对代码不满意,还可以要求重写代码:

代码完成了重写:

Notebook 文件生成

使用/generate命令可以直接生成 notebook:

可以在/data/work 目录下查看 AI 生成的 Notebook 文件:

魔法命令

使用%ai%%ai作为魔法命令来调用AI模型,需要先加载魔法命令:

%load_ext jupyter_ai_magics

查看使用说明:

%ai help

魔法命令ai的基本语法

%%ai命令允许使用给定的提示,去调用所选择的语言模型。其语法为 provider-id:local-model-id,其中 provider-id 可以理解为是模型提供方,如huggingface、openai,local-model-id 是模型供应商的特定模型。代码块从第二行起就是prompt提示。

DCS智能云平台官方提供的模型为**:stereonote_provider:depl-gpt35t-16k**。调用时需要使用:

%%ai stereonote_provider:depl-gpt35t-16k

代码生成

我们把format的参数改成 code,选择一道 LeetCode平台上通过率为30.7%的困难题,让 AI 解决。

生成的结果代码如下:

在LeetCode上提交之后直接就通过了。

简单火山图绘制

生成结果并运行:

代码 debug

我们找到一段包含五处错误的Python代码:

    def calcualte_area(radius):
      if type(radius) =! int or type(radius) != float:
          return"Error: Radius should be a number.
      else:
          area = 3.14 * raduis**2
      return area
    print calcualte_area('5')

让 AI 进行修正并解释原因:

不限于编程

除了和代码相关的功能之外,AI还可以生成LaTex公式、网页、 SVG图形等内容。

LaTex公式

我们想让它生成一下伯努利方程组。只要把format的参数改成math,结果就会以LaTex排版之后的格式输出。

网页

我们让它生成一个登录页面,这里需要把format参数改成html。

SVG 图形

让 AI 直接生成一些简单图形,以SVG的形式进行展示。

如何跨项目复制 Notebook 文件?

为了能在其他项目中快速复用代码,DCS智能云平台支持将 Notebook 文件(.ipynb 文件)复制到目标项目中。

Step1:选择想要复制的Notebook 文件(.ipynb 文件),点击“复制”按钮;

Step2:填写复制到新项目后的Notebook 文件名称,选择需要目标项目,点击确认,Notebook 文件将被复制到目标项目中。

如何发布 Notebook 文件?

发布公共库

提示

  1. 分析发布时,分析中所有的 Notebook 内容将同时发布;

  2. 分析发布时,分析关联的镜像也将一并发布至公共库。

撤销发布、重新发布: Notebook文件发布之后,可在公共库查看和搜索已发布的Notebook,已发布的 Notebook 文件也可以“撤销发布”或“重新发布”。

撤销发布、重新发布: Notebook文件发布之后,可在公共库查看和搜索已发布的Notebook,已发布的 Notebook 文件也可以“撤销发布”或“重新发布”。

如何使用公共库 Notebook 文件?

在公共库「公共应用」中将Notebook 文件添加到自己的项目中。点击“复制”按钮。

选择目标项目,仅支持复制到用户创建或管理的项目中。

离线分析

如果你的数据处理需要持续运行较长时间,建议使用「离线任务」进行 云端托管运行:平台为你跑完整个项目,你也可以实时查看运行结果、资源使用情况、系统日志。

快速运行离线分析任务

任务创建

在「个性分析」模块点击“离线分析”按钮。

参数配置

默认“任务类型”为 Notebook,点击“选择 Notebook”

选择已经创建好的Notebook文件并“确定”。

通过 Notebook文件创建离线任务支持三种方式参数配置:

  1. 无参数,默认运行已选择的Notebook文件代码。生成一个离线任务。
  1. 添加参数,在页面上手动添加参数组,可添加多组参数。一组参数将会创建一个离线分析任务。
  1. 参数文件配置,下载 json 或 Excel 模板,填写后导入。一组参数将会创建一个离线分析任务。

下图为通过填写 json 模板方法创建批量离线分析任务的参数示例

下图为通过填写 Excel 模板创建批量离线分析任务的参数示例

资源配置

选择运行任务所需要的计算资源和镜像资源。

投递任务

点击“运行”投递分析任务。

过程监控

在「任务管理-数据分析」模块中查看离线任务。点击任务栏“打开”可查看离线任务运行情况。

点击操作栏“详情”按钮可查看任务详情、任务日志和资源消耗。

通过运行脚本创建离线分析任务

创建脚本

在线分析并创建一个脚本。

选择脚本文件右键并选择“Copy path”复制文件路径。

参数配置

运行离线任务时“任务类型”选择“运行脚本”,输入运行指令,一组指令将创建一个分析任务。

提示

容器内复制的脚本文件路径在运行时需要加上根路径/data,如:

复制的路径:/work/test.py

运行脚本时使用路径:/data/work/test.py

资源配置

选择运行任务所需要的计算资源和镜像资源。

投递任务

点击“运行”投递分析任务。

查看结果

个性分析常见问题

个性分析配额不足怎么办

注意

1T配额是指用户在云平台深圳片区下参与的所有项目下配额之和,例如:用户A在P001项目下使用了20G,在P002项目下使用了900G,此时用户A的work配额共计使用920G,不足10%,需要清理。

进入项目内的任意的个性分析空间后,存储资源显示work目录的配额,当系统提醒清理work目录配额时,建议将work目录下当前不需要的文件删除,将结果文件转入”output“后保存到数据管理,数据管理已经存在的文件请勿重复存放。

若短时间分析需要更多配额,可向ITSM提单申请短期提高配额。

如何使用GPU

  1. 点击个性分析>新建分析

2.填写分析所需的其他基本信息内容,计算资源,选择GPU CUDA节点,提供L4机型一台,内有88cpu,320mem的资源

GPU使用是否有特殊计费规则?

与其他资源申请一样,按照资源申请的大小和使用时长计费,具体内容参考计费说明 | 帮助中心

GPU使用规则是怎样的?

该GPU节点目前在线、离线任务都可使用,采用先申请先使用的原则,为了大家共同的使用效率和节约大家时间和计费,请大家任务运行完毕及时关闭,方便其他人正常申请使用。

如何查看GPU版本信息?

在容器中使用"nvidia-smi"命令查看CUDA版本,示例如下:

如何在代码中使用GPU

当申请GPU节点后,分析时使用GPU 可参考如下代码示例:

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "3dd3c099-8fb4-402f-8187-1902345c0f8d",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using device: cuda\n",
      "\n",
      "NVIDIA A100-SXM4-80GB\n",
      "Memory Usage:\n",
      "Allocated: 0.0 GB\n",
      "Cached:    0.0 GB\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.8/site-packages/torch/cuda/__init__.py:143: UserWarning: \n",
      "NVIDIA A100-SXM4-80GB with CUDA capability sm_80 is not compatible with the current PyTorch installation.\n",
      "The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70.\n",
      "If you want to use the NVIDIA A100-SXM4-80GB GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/\n",
      "\n",
      "  warnings.warn(incompatible_device_warn.format(device_name, capability, \" \".join(arch_list), device_name))\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "# setting device on GPU if available, else CPU\n",
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "print('Using device:', device)\n",
    "print()\n",
    "\n",
    "#Additional Info when using cuda\n",
    "if device.type == 'cuda':\n",
    "    print(torch.cuda.get_device_name(0))\n",
    "    print('Memory Usage:')\n",
    "    print('Allocated:', round(torch.cuda.memory_allocated(0)/1024**3,1), 'GB')\n",
    "    print('Cached:   ', round(torch.cuda.memory_reserved(0)/1024**3,1), 'GB')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "91fb0140-8db4-49ad-aab5-6a4e281460d4",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Net(\n",
      "  (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))\n",
      "  (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))\n",
      "  (fc1): Linear(in_features=400, out_features=120, bias=True)\n",
      "  (fc2): Linear(in_features=120, out_features=84, bias=True)\n",
      "  (fc3): Linear(in_features=84, out_features=10, bias=True)\n",
      ")\n",
      "10\n",
      "torch.Size([6, 1, 5, 5])\n",
      "torch.Size([6])\n",
      "torch.Size([16, 6, 5, 5])\n",
      "torch.Size([16])\n",
      "torch.Size([120, 400])\n",
      "torch.Size([120])\n",
      "torch.Size([84, 120])\n",
      "torch.Size([84])\n",
      "torch.Size([10, 84])\n",
      "torch.Size([10])\n",
      "tensor([[-0.1149,  0.0057,  0.0006,  0.0447,  0.0710,  0.0236, -0.0886,  0.1420,\n",
      "         -0.1140,  0.1704]], grad_fn=<AddmmBackward0>)\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "from torchvision import models\n",
    "\n",
    "class Net(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Net, self).__init__()\n",
    "        self.conv1 = nn.Conv2d(1, 6, 5)\n",
    "        self.conv2 = nn.Conv2d(6, 16, 5)\n",
    "        #此处的16*5*5为conv2经过pooling之后的尺寸,即为fc1的输入尺寸,在这里写死了,因此后面的输入图片大小不能任意调整\n",
    "        self.fc1 = nn.Linear(16*5*5, 120)\n",
    "        self.fc2 = nn.Linear(120, 84)\n",
    "        self.fc3 = nn.Linear(84, 10)\n",
    "    def forward(self, x):\n",
    "        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))\n",
    "        x = F.max_pool2d(F.relu(self.conv2(x)), 2)\n",
    "        x = x.view(-1, self.num_flat_features(x))\n",
    "        x = F.relu(self.fc1(x))\n",
    "        x = F.relu(self.fc2(x))\n",
    "        x = self.fc3(x)\n",
    "        return x\n",
    "    def num_flat_features(self, x):\n",
    "        size = x.size()[1:]\n",
    "        num_features = 1\n",
    "        for s in size:\n",
    "            num_features *= s\n",
    "        return num_features\n",
    "net = Net()\n",
    "print(net)\n",
    "\n",
    "params = list(net.parameters())\n",
    "print (len(params))\n",
    "print(params[0].size())\n",
    "print(params[1].size())\n",
    "print(params[2].size())\n",
    "print(params[3].size())\n",
    "print(params[4].size())\n",
    "print(params[5].size())\n",
    "print(params[6].size())\n",
    "print(params[7].size())\n",
    "print(params[8].size())\n",
    "print(params[9].size())\n",
    "\n",
    "input = torch.randn(1, 1, 32, 32)\n",
    "out = net(input)\n",
    "print(out)\n",
    "\n",
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "vgg = net.to(device)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
上次编辑于: