个性分析
个性分析
DCS智能云平台个性分析是基于Jupyter 的在线协作分析工具。旨在帮助用户轻松创建、组织和共享项目代码、数据、环境和结果,并保证其可重复性。同时支持在线分析和离线分析。
在线分析
在线分析是基于Jupyter 的在线协作分析工具。
快速运行在线分析
运行在线分析前,需要完成以下前置步骤:
创建项目
在DCS智能云平台上进行分析的第一步是创建项目,在「项目管理」首页新建项目。或者你也可以在已加入的项目中分析。
构建镜像
镜像是启动分析容器的基础,它包含了完整的文件系统、运行环境和所需的依赖项。通过使用镜像,可以创建一个或多个容器,每个容器都是一个独立的运行实例。在项目「镜像管理」模块中新建自定义镜像。
准备数据
容器挂载文件是将项目文件或目录与Docker容器内的文件系统进行关联,使容器可以访问项目文件。通过挂载文件,可以实现在容器内对项目文件的读取。可通过「数据管理」上传数据,并将「数据管理」中的文件挂载到启动容器中。
创建分析
- 点击“新建在线分析”创建一个新的分析空间。不同分析的环境与数据相互隔离。

- 新建后填写分析的基础信息,选择编程环境及计算资源配置,选择镜像并挂载数据后保存。

a. 编程环境:云平台提供两种编程环境,Jupyter适用于数据分析处理及可视化等操作,当想进行代码编写及调试更推荐使用Vscode
b. 计算资源:云平台提供写代码、安装软件(software)、大内存、GPU等资源类型,software节点用于联网安装软件,为保证数据安全,选择该节点, 不可挂载数据
c. 时间设置:为了节省费用,请设置闲置时间,当 分析 闲置(未运行任何代码且页面不在激活状态)超过设置的时间后自动释放该节点。
d. 镜像:选择Jupter或Vscode,需要选择匹配的镜像,否则会启动失败。系统为Vscode提供code-server默认镜像,可基于该镜像继续打包软件。
e. 存储资源:为防止资源滥用,云平台给每个个性分析用户的work目录分配了1T的配额,超过使用上限后续将影响分析启动。
f. 分析创建完成后直接点击右上角“快速运行”按钮,启动分析容器并开始分析。

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

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

JupyterLab 的主要元素有:
左侧边栏,支持以下功能:
a. 查看和管理在分析过程中创建或添加(上传或下载)的文件,包括 .ipynb文件;
b. 管理当前正在运行的内核会话;
c. 显示当前打开的 .ipynb文件的结构和目录,并支持快速浏览和跳转;
d. 安装、卸载、启用和禁用JupyterLab的扩展,以增强和定制JupyterLab的功能。
文件目录
input:数据的挂载目录;
task:可查看已运行的离线分析结果;
temp:分析的中间结果可保存在临时存储在该目录,容器关闭后,该目录下的文件会被自动销毁;
users:可查看项目组其他成员的.ipynb文件和离线分析任务结果;
work:工作目录,用户可在工作目录下创建文件夹或文件,新创建的目录和分析的文件会保存在工作目录,与项目组其他成员共享。该目录下的.ipynb文件会被系统读出,展示在「个性分析」模块首页,在work目录下更深层目录的.ipynb文件不会被读取。
工具栏,提供了常用的功能和操作选项,如保存文件,剪切、复制和粘贴代码块,撤销和重做,运行,中断内核,重启内核等操作。
Notebook,包含了交互式分析的代码和输出结果,以及附带的Markdown 注释。
Cell,可以输入代码、Markdown和原始文本。
Terminal,JupyterLab 终端扩展,类似于Linux shell 或Windows Power Shell。
Console,提供了一个交互式的命令行界面,可以在JupyterLab环境中执行命令和操作,方便进行实验、调试和数据处理。
Vscode简介

VS Code 具有简单直观的布局,可最大化为编辑器提供的空间,同时留出足够的空间来浏览和访问文件夹或项目的完整上下文。UI 分为五个主要区域:
编辑器- 编辑文件的主要区域。您可以垂直和水平并排打开任意多个编辑器。
主侧边栏- 包含不同的视图(例如资源管理器),以在您处理项目时为您提供帮助。
状态栏- 有关打开的项目和您编辑的文件的信息。
活动栏- 位于最左侧,可让您在视图之间切换并为您提供其他特定于上下文的指示器,例如启用 Git 时传出更改的数量。
面板- 编辑器区域下方用于查看视图的附加空间。默认情况下,它包含输出、调试信息、错误和警告以及集成终端。面板还可以向左或向右移动以获得更多垂直空间。
云平台集成的Vscode的文件目录
input:数据挂载目录;
output:输出目录用于存储您希望保存到项目数据管理中的文件。在分析容器关闭后,所有文件将直接上传到您的项目文件中,供其他项目成员进行分析。请注意,重置资源和挂载数据将启动一个新的分析容器并触发数据保存。
output-history:该目录用于存储转移到数据管理中失败的文件,可手动删除
task:可查看已运行的离线分析结果;
temp:分析的中间结果可保存在临时存储在该目录,容器关闭后,该目录下的文件会被自动销毁;
users:可查看项目组其他成员的分析文件和离线分析任务结果;
work:工作目录,用户可在工作目录下创建文件夹或文件,新创建的目录和分析的文件会保存在工作目录,与项目组其他成员共享。该目录下的'.py', '.r', '.wdl', '.ipynb', '.yaml', '.rdata'文件会被系统读出,展示在「个性分析」模块首页
如何查看Vscode的分析环境中的云平台工作目录?
Vscode从数据管理挂载到容器中分析使用,进入容器后,在左侧活动栏选择"file"->"Open Folder",选择/data/目录,可以看到与Jupyter一致的目录结构。
更多Vscode使用方式参考以下链接:https://code.visualstudio.com/docs/editor/vscode-web
容器控制
保存环境:将当前运行容器环境保存成新镜像;
重置资源:分析过程中所使用资源余量不足、需要切换镜像环境或需要重新挂载数据时,可通过“重置资源”重新申请分析资源、切换镜像和挂载数据。系统将根据配置后的资源重启容器。

修改容器的数据挂载,用户挂载的数据将在容器input目录下。支持按文件挂载和按分析任务挂载。
- 文件挂载:支持挂载项目「数据管理」模块的数据;

提示
按文件挂载最多支持挂载 1000 个文件。
- 任务挂载:可选择项目中任意任务的结果数据进行挂载,也可通过“选择前1000条”快速选择按时间倒序排列的前1000个任务结果数据进行挂载。

提示
按任务挂载最多支持挂载 1000 个任务。
关闭:关闭容器,停止分析。
延时:延长分析时长。
保存数据
容器启动时将会自动生成 output 目录,可以将需要同步至项目「数据管理」的结果数据转移至 output 目录下:

Step1: 启动 Terminal

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

示例:
- 将 work 目录下的1.md文件移动至 output 目录,你可以使用以下命令:
mv /data/work/1.md /data/output/
- 将 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 文件?
发布公共库

提示
分析发布时,分析中所有的 Notebook 内容将同时发布;
分析发布时,分析关联的镜像也将一并发布至公共库。

撤销发布、重新发布: Notebook文件发布之后,可在公共库查看和搜索已发布的Notebook,已发布的 Notebook 文件也可以“撤销发布”或“重新发布”。
撤销发布、重新发布: Notebook文件发布之后,可在公共库查看和搜索已发布的Notebook,已发布的 Notebook 文件也可以“撤销发布”或“重新发布”。
如何使用公共库 Notebook 文件?
在公共库「公共应用」中将Notebook 文件添加到自己的项目中。点击“复制”按钮。

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

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

参数配置
默认“任务类型”为 Notebook,点击“选择 Notebook”

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

通过 Notebook文件创建离线任务支持三种方式参数配置:
- 无参数,默认运行已选择的Notebook文件代码。生成一个离线任务。

- 添加参数,在页面上手动添加参数组,可添加多组参数。一组参数将会创建一个离线分析任务。

- 参数文件配置,下载 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
- 点击个性分析>新建分析。

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
}