Notebook项目
目录
页面概览
创建并运行Notebook项目
概述
AI Studio Notebook迎来全面升级,现已支持BML Codelab和AI Studio 经典版两种使用方式。AI Studio经典版为之前的Notebook;BML CodeLab基于JupyterLab 3.0进行优化扩展,支持多ipynb查看和编辑、双语言、亮暗主题切换、代码实时自动补全、变量重命名、编写用户实时提醒等众多新特性,详见BML Codelab环境使用说明.
注意:
1.体验BML Codelab当前仅支持创建新项目或Fork Notebook版本为BML Codelab的项目.
2.由于基础架构不同, AI Studio经典版和BML Codelab在产品功能上暂不支持互相转换,如需转换请手动进行(下载并上传ipynb,重新挂载数据集等),即将上线经典版向BML Codelab转换的功能.
BML Codelab
1、点击项目大厅页面的「创建项目」,选择创建「Notebook」.
2、Notebook版本选择「BML Codelab」之后完善项目信息,点击「创建」.
3、项目创建成功,点击「查看」.
4、至我的项目-项目详情页
- 项目删除、修改及设置为公开项目操作;修改项目时,不支持修改Notebook版本.
- 版本内容: 展示当前Notebook最新内容.
- 数据集:支持部分数据类型预览.
- 后台任务:基于ipynb文件在后台完成训练任务.
- 模型部署: 用于生成在线API服务和趣味体验馆.
- 项目启停与部署操作.
5、点击右方「运行」进行项目环境选择.
- 支持基础版(CPU环境)、高级版(GPU环境-16GB)、至尊版(GPU-32GB)三种模式选择,默认为基础版,选择完毕点击确认.
6、点击「确定」跳转到项目代码在线编辑Notebook环境,Notebook使用说明详见下一节《项目-BML Codelab环境使用说明》,代码编辑完成后点击运行,保存之后可在我的项目-项目详情页查看最新版本内容,即如本文档页面概览所示.
AI Studio 经典版
1、点击项目大厅页面的「创建项目」,选择创建「Notebook」.
2、Notebook版本选择「AI Studio经典版」之后完善项目信息,点击「创建」.
3、项目创建成功,点击「查看」.
4、至我的项目-项目详情页,默认展示main.ipynb中的内容,如删除main.ipynb,项目详情页会显示默认内容(内容与原始main.ipynb相同),如需展示用户个人内容请将对应的ipynb更名为main.ipynb.
- 项目删除、修改及设置为公开项目操作;修改项目时,不支持修改Notebook版本.
- 版本内容: 展示当前Notebook最新内容.
- 数据集:支持部分数据类型预览.
- 后台任务:基于ipynb文件在后台完成训练任务.
- 模型部署: 用于生成在线API服务和趣味体验馆.
- 项目启停与部署操作.
5、点击右方「运行」进行项目环境选择.
- 支持基础版(CPU环境)、高级版(GPU环境-16GB)、至尊版(GPU-32GB)三种模式选择,默认为基础版,选择完毕点击确认.
6、点击「确定」跳转到项目代码在线编辑Notebook环境,Notebook使用说明详见下一节《项目-BML Codelab环境使用说明》,代码编辑完成后点击运行,保存之后可在我的项目-项目详情页查看最新版本内容,即如本文档页面概览所示.
VisualDL工具
VisualDL是一个面向深度学习任务设计的可视化工具。VisualDL 利用了丰富的图表来展示数据,用户可以更直观、清晰地查看数据的特征与变化趋势,有助于分析数据、及时发现错误,进而改进神经网络模型的设计。喜欢的同学可以去star支持一下哦~
AI Studio Notebook 项目(Paddle1.8.0及以上版本)已经集成VisualDL工具以便于您的使用,可在可视化tab中启动VisualDL服务。
目前,VisualDL 支持 scalar, image, audio, graph, histogram, pr curve, high dimensional 七个组件,项目正处于高速迭代中,敬请期待新组件的加入。
组件名称 | 展示图表 | 作用 |
---|---|---|
Scalar | 折线图 | 动态展示损失函数值、准确率等标量数据 |
Image | 图片可视化 | 显示图片,可显示输入图片和处理后的结果,便于查看中间过程的变化 |
Audio | 音频可视化 | 播放训练过程中的音频数据,监控语音识别与合成等任务的训练过程 |
Graph | 网络结构 | 展示网络结构、节点属性及数据流向,辅助学习、优化网络结构 |
Histogram | 直方图 | 展示训练过程中权重、梯度等张量的分布 |
PR Curve | 折线图 | 权衡精度与召回率之间的平衡关系 |
High Dimensional | 数据降维 | 将高维数据映射到 2D/3D 空间来可视化嵌入,便于观察不同数据的相关性 |
AI Studio操作说明
Step1 训练代码中增加 Loggers 来记录不同种类的数据. 注意我们的logdir = "./log"
, 即需要把log目录放到/home/aistudio/log
.
from visualdl import LogWriter
if __name__ == '__main__':
value = [i/1000.0 for i in range(1000)]
# 初始化一个记录器
with LogWriter(logdir="./log/scalar_test/train") as writer:
Step2 训练过程中插入数据打点语句,将结果储存至日志文件中
for step in range(1000):
# 向记录器添加一个tag为`acc`的数据
writer.add_scalar(tag="acc", step=step, value=value[step])
# 向记录器添加一个tag为`loss`的数据
writer.add_scalar(tag="loss", step=step, value=1/(value[step] + 1))
Step3 切换到「可视化」页签,指定日志文件与模型文件(不指定日志文件无法启动VisualDL)
*注意:VisualDL启动中不可删除或替换日志/模型文件;日志文件可多选,模型文件一次只能上传一个,且模型文件暂只支持模型网络结构,不支持展示各层参数
- 选择日志文件(适用于scalar, image, histogram, pr curve, high dimensional五种组件)
- 选择模型文件(适用于graph)
- 点击「启动VisualDL」后,再点击「打开VisualDL」即可打开可视化界面
*注意:使用VisualDL2.0需要Paddle版本1.8.0及以上;端口8080是VisualDL的专用端口,严禁占用,否则无法正常启动VisualDL
Scalar--标量组件
介绍
Scalar 组件的输入数据类型为标量,该组件的作用是将训练参数以折线图形式呈现。将损失函数值、准确率等标量数据作为参数传入 scalar 组件,即可画出折线图,便于观察变化趋势。
记录接口
Scalar 组件的记录接口如下:
add_scalar(tag, value, step, walltime=None)
接口参数说明如下:
参数 | 格式 | 含义 |
---|---|---|
tag | string | 记录指标的标志,如train/loss ,不能含有% |
value | float | 要记录的数据值 |
step | int | 记录的步数 |
walltime | int | 记录数据的时间戳,默认为当前时间戳 |
*注意tag的使用规则为:
- 第一个
/
前的为父tag,并作为一栏图片的tag - 第一个
/
后的为子tag,子tag的对应图片将显示在父tag下 - 可以使用多次
/
,但一栏图片的tag依旧为第一个/
前的tag
具体使用参见以下三个例子:
- 创建train为父tag,acc和loss为子tag:
train/acc
、train/loss
,即创建了tag为train的图片栏,包含acc和loss两张图片:
- 创建train为父tag,test/acc和test/loss为子tag:
train/test/acc
、train/test/loss
,即创建了tag为train的图片栏,包含test/acc和test/loss两张图片:
- 创建两个父tag:
acc
、loss
,即创建了tag分别为acc和loss的两个图片栏::
Demo
- 基础使用
下面展示了使用 Scalar 组件记录数据的示例,代码见Scalar组件
from visualdl import LogWriter
if __name__ == '__main__':
value = [i/1000.0 for i in range(1000)]
# 初始化一个记录器
with LogWriter(logdir="./log/scalar_test/train") as writer:
for step in range(1000):
# 向记录器添加一个tag为`acc`的数据
writer.add_scalar(tag="acc", step=step, value=value[step])
# 向记录器添加一个tag为`loss`的数据
writer.add_scalar(tag="loss", step=step, value=1/(value[step] + 1))
运行上述程序后,点击可视化选择相应日志文件即可查看可视化结果
- 多组实验对比
下面展示了使用Scalar组件实现多组实验对比
多组实验对比的实现分为两步:
- 创建子日志文件储存每组实验的参数数据
- 将数据写入scalar组件时,使用相同的tag,即可实现对比不同实验的同一类型参数
from visualdl import LogWriter
if __name__ == '__main__':
value = [i/1000.0 for i in range(1000)]
# 步骤一:创建父文件夹:log与子文件夹:scalar_test
with LogWriter(logdir="./log/scalar_test") as writer:
for step in range(1000):
# 步骤二:向记录器添加一个tag为`train/acc`的数据
writer.add_scalar(tag="train/acc", step=step, value=value[step])
# 步骤二:向记录器添加一个tag为`train/loss`的数据
writer.add_scalar(tag="train/loss", step=step, value=1/(value[step] + 1))
# 步骤一:创建第二个子文件夹scalar_test2
value = [i/500.0 for i in range(1000)]
with LogWriter(logdir="./log/scalar_test2") as writer:
for step in range(1000):
# 步骤二:在同样名为`train/acc`下添加scalar_test2的accuracy的数据
writer.add_scalar(tag="train/acc", step=step, value=value[step])
# 步骤二:在同样名为`train/loss`下添加scalar_test2的loss的数据
writer.add_scalar(tag="train/loss", step=step, value=1/(value[step] + 1))
运行上述程序后,点击可视化选择相应日志文件即可查看以下折线图,观察scalar_test和scalar_test2的accuracy和loss的对比。
功能操作说明
- 支持数据卡片「最大化」、「还原」、「坐标系转化」(y轴对数坐标)、「下载」折线图
- 数据点Hover展示详细信息
- 可搜索卡片标签,展示目标图像
- 可搜索打点数据标签,展示特定数据
- X轴有三种衡量尺度
- Step:迭代次数
- Walltime:训练绝对时间
- Relative:训练时长
Image--图片可视化组件
介绍
Image 组件用于显示图片数据随训练的变化。在模型训练过程中,将图片数据传入 Image 组件,就可在 VisualDL 的前端网页查看相应图片。
记录接口
Image 组件的记录接口如下:
add_image(tag, img, step, walltime=None)
接口参数说明如下:
参数 | 格式 | 含义 |
---|---|---|
tag | string | 记录指标的标志,如train/loss ,不能含有% |
img | numpy.ndarray | 以ndarray格式表示的图片 |
step | int | 记录的步数 |
walltime | int | 记录数据的时间戳,默认为当前时间戳 |
Demo
下面展示了使用 Image 组件记录数据的示例,代码文件请见Image组件
import numpy as np
from PIL import Image
from visualdl import LogWriter
def random_crop(img):
"""获取图片的随机 100x100 分片
"""
img = Image.open(img)
w, h = img.size
random_w = np.random.randint(0, w - 100)
random_h = np.random.randint(0, h - 100)
r = img.crop((random_w, random_h, random_w + 100, random_h + 100))
return np.asarray(r)
if __name__ == '__main__':
# 初始化一个记录器
with LogWriter(logdir="./log/image_test/train") as writer:
for step in range(6):
# 添加一个图片数据
writer.add_image(tag="eye",
img=random_crop("../../docs/images/eye.jpg"),
step=step)
运行上述程序后,点击可视化选择相应日志文件即可查看可视化结果
功能操作说明
- 可搜索图片标签显示对应图片数据
- 支持滑动Step/迭代次数查看不同迭代次数下的图片数据
Audio--音频播放组件
介绍
Audio组件实时查看训练过程中的音频数据,监控语音识别与合成等任务的训练过程。
记录接口
Audio 组件的记录接口如下:
add_audio(tag, audio_array, step, sample_rate)
接口参数说明如下:
参数 | 格式 | 含义 |
---|---|---|
tag | string | 记录指标的标志,如audio_tag ,不能含有% |
audio_arry | numpy.ndarray | 以ndarray格式表示的音频 |
step | int | 记录的步数 |
sample_rate | int | 采样率,注意正确填写对应音频的采样率 |
Demo
from visualdl import LogWriter
import numpy as np
import wave
def read_audio_data(audio_path):
"""
Get audio data.
"""
CHUNK = 4096
f = wave.open(audio_path, "rb")
wavdata = []
chunk = f.readframes(CHUNK)
while chunk:
data = np.frombuffer(chunk, dtype='uint8')
wavdata.extend(data)
chunk = f.readframes(CHUNK)
# 8k sample rate, 16bit frame, 1 channel
shape = [8000, 2, 1]
return shape, wavdata
if __name__ == '__main__':
with LogWriter(logdir="./log") as writer:
audio_shape, audio_data = read_audio_data("./testing.wav")
audio_data = np.array(audio_data)
writer.add_audio(tag="audio_tag",
audio_array=audio_data,
step=0,
sample_rate=8000)
运行上述程序后,点击可视化选择相应日志文件即可查看可视化结果
功能操作说明
- 可搜索音频标签显示对应音频数据
- 支持滑动Step/迭代次数查看不同迭代次数下的音频数据
- 支持播放/暂停音频数据
- 支持音量调节
- 支持音频下载
Graph--网络结构组件
介绍
Graph组件一键可视化模型的网络结构。用于查看模型属性、节点信息、节点输入输出等,并进行节点搜索,协助开发者们快速分析模型结构与了解数据流向。
在生成Model文件后,在可视化模块中选择模型文件,启动后即可查看网络结构可视化:
功能操作说明
-
一键上传模型
- 支持模型格式:PaddlePaddle、ONNX、Keras、Core ML、Caffe、Caffe2、Darknet、MXNet、ncnn、TensorFlow Lite
- 实验性支持模型格式:TorchScript、PyTorch、Torch、 ArmNN、BigDL、Chainer、CNTK、Deeplearning4j、MediaPipe、ML.NET、MNN、OpenVINO、Scikit-learn、Tengine、TensorFlow.js、TensorFlow
- 支持上下左右任意拖拽模型、放大和缩小模型
- 搜索定位到对应节点
- 点击查看模型属性
- 支持选择模型展示的信息
- 支持以PNG、SVG格式导出文件
- 点击节点即可展示对应属性信息
- 支持一键更换模型
Histogram--直方图组件
介绍
Histogram组件以直方图形式展示Tensor(weight、bias、gradient等)数据在训练过程中的变化趋势。深入了解模型各层效果,帮助开发者精准调整模型结构。
记录接口
Histogram 组件的记录接口如下:
add_histogram(tag, values, step, walltime=None, buckets=10)
接口参数说明如下:
参数 | 格式 | 含义 |
---|---|---|
tag | string | 记录指标的标志,如train/loss ,不能含有% |
values | numpy.ndarray or list | 以ndarray或list格式表示的数据 |
step | int | 记录的步数 |
walltime | int | 记录数据的时间戳,默认为当前时间戳 |
buckets | int | 生成直方图的分段数,默认为10 |
Demo
下面展示了使用 Histogram组件记录数据的示例,代码见Histogram组件
from visualdl import LogWriter
import numpy as np
if __name__ == '__main__':
values = np.arange(0, 1000)
with LogWriter(logdir="./log/histogram_test/train") as writer:
for index in range(1, 101):
interval_start = 1 + 2 * index / 100.0
interval_end = 6 - 2 * index / 100.0
data = np.random.uniform(interval_start, interval_end, size=(10000))
writer.add_histogram(tag='default tag',
values=data,
step=index,
buckets=10)
运行上述程序后,点击可视化选择相应日志文件即可查看可视化结果
功能操作说明
-
支持数据卡片「最大化」、「下载」直方图
-
可选择Offset或Overlay模式
- Offset模式
- Overlay模式
-
数据点Hover展示参数值、训练步数、频次
- 在第240次训练步数时,权重为-0.0031,且出现的频次是2734次
-
可搜索卡片标签,展示目标直方图
-
可搜索打点数据标签,展示特定数据流
PR Curve--PR曲线组件
介绍
PR Curve以折线图形式呈现精度与召回率的权衡分析,清晰直观了解模型训练效果,便于分析模型是否达到理想标准。
记录接口
PR Curve组件的记录接口如下:
add_pr_curve(tag, labels, predictions, step=None, num_thresholds=10)
接口参数说明如下:
参数 | 格式 | 含义 |
---|---|---|
tag | string | 记录指标的标志,如train/loss ,不能含有% |
values | numpy.ndarray or list | 以ndarray或list格式表示的实际类别 |
predictions | numpy.ndarray or list | 以ndarray或list格式表示的预测类别 |
step | int | 记录的步数 |
num_thresholds | int | 阈值设置的个数,默认为10,最大值为127 |
Demo
下面展示了使用 PR Curve 组件记录数据的示例,代码见PR Curve组件
from visualdl import LogWriter
import numpy as np
with LogWriter("./log/pr_curve_test/train") as writer:
for step in range(3):
labels = np.random.randint(2, size=100)
predictions = np.random.rand(100)
writer.add_pr_curve(tag='pr_curve',
labels=labels,
predictions=predictions,
step=step,
num_thresholds=5)
运行上述程序后,点击可视化选择相应日志文件即可查看可视化结果
功能操作说明
-
支持数据卡片「最大化」、「还原」、「下载」PR曲线
-
数据点Hover展示详细信息:阈值对应的TP、TN、FP、FN
-
可搜索卡片标签,展示目标图表
- 可搜索打点数据标签,展示特定数据
-
支持查看不同训练步数下的PR曲线
-
X轴-时间显示类型有三种衡量尺度
- Step:迭代次数
- Walltime:训练绝对时间
- Relative:训练时长
High Dimensional--数据降维组件
介绍
High Dimensional 组件将高维数据进行降维展示,用于深入分析高维数据间的关系。目前支持以下两种降维算法:
- PCA : Principle Component Analysis 主成分分析
- t-SNE : t-distributed stochastic neighbor embedding t-分布式随机领域嵌入
记录接口
High Dimensional 组件的记录接口如下:
add_embeddings(tag, labels, hot_vectors, walltime=None)
接口参数说明如下:
参数 | 格式 | 含义 |
---|---|---|
tag | string | 记录指标的标志,如default ,不能含有% |
labels | numpy.array 或 list | 一维数组表示的标签,每个元素是一个string类型的字符串 |
hot_vectors | numpy.array or list | 与labels一一对应,每个元素可以看作是某个标签的特征 |
walltime | int | 记录数据的时间戳,默认为当前时间戳 |
Demo
下面展示了使用 High Dimensional 组件记录数据的示例,代码见High Dimensional组件
from visualdl import LogWriter
if __name__ == '__main__':
hot_vectors = [
[1.3561076367500755, 1.3116267195134017, 1.6785401875616097],
[1.1039614644440658, 1.8891609992484688, 1.32030488587171],
[1.9924524852447711, 1.9358920727142739, 1.2124401279391606],
[1.4129542689796446, 1.7372166387197474, 1.7317806077076527],
[1.3913371800587777, 1.4684674577930312, 1.5214136352476377]]
labels = ["label_1", "label_2", "label_3", "label_4", "label_5"]
# 初始化一个记录器
with LogWriter(logdir="./log/high_dimensional_test/train") as writer:
# 将一组labels和对应的hot_vectors传入记录器进行记录
writer.add_embeddings(tag='default',
labels=labels,
hot_vectors=hot_vectors)
运行上述程序后,点击可视化选择相应日志文件即可查看可视化结果
功能操作说明
-
支持展示特定打点数据
-
可搜索展示特定数据标签或展示所有数据标签
-
支持「二维」或「三维」展示高维数据分布
-
可选择「PCA」或「T-SNE」作为降维方式
SSH模式(试运行)
设置公钥
生成公钥(Windows)
a. 在本地电脑上启动CMD
b. 运行ssh-keygen
然后采用默认值即可
c. 打开id_rsa.pub文件, 复制公钥文本
在AI Studio设置中存储公钥
a. 登录AI Studio, 点击个人头像, 进入设置
b. 输入刚才复制的文本. 并提供一个辅助记忆的标题. 点击确认.
c. 如成功, 则添加的公钥会出现在下方"公钥管理"中, 最多可以存储5个公钥. 您可以删除不再使用的公钥.
配置本地环境
VS Code + Python Addon
a. 安装并启动Microsoft Visual Studio Code
b. 安装微软官方Python插件
c. 安装Remote-SSH插件
VIsual Studio和PyCharm上也有类似能力. 请自行检索安装方法.
以SSH模式启动Notebook项目环境
a. 创建一个Notebook项目(最好选择最新的框架版本)
b. 启动该项目, 并选择SSH
c. 启动成功后, 从中可以获得SSH地址
远程连接并使用
a. 启动Visual Studio Code, 点击左下角远程连接按钮. 然后选择: Remote SSH: Connect to Host...
b. 然后选择 + Add New SSH Host
c. 输入AI Studio网页界面上的网址
d. 之后启动远程连接
e. 连接成功后, 点击Open Folder按钮, 并直接OK
f. 点击文件目录中的任意文件进行编辑即可.
SSH常见使用问题
Q: VS Code配置完成SSH之后,连接超时问题。
A: 可以按步骤检查:
- 可以先检查是否SSH地址是否有效,直接使用ssh命令进行连接,如果连接成功则表示SSH地址有效。如果同样超时,检查aistudio项目是否运行中,如果刚启动的项目可能有一个短暂的路由生效时间。
- 动态IP导致的Host校验失败,可删除~/.ssh/known_hosts文件重试(也可仅删除对应IP的那条记录)。
- 检查VSCode的SSH配置文件中的Host和Port信息是否正确。
- 分析VSCode的SSH连接日志信息。
Q: SSH连接出现输入密码提示问题
A: 此种情况表示ssh连接连接时,公钥验证失败,检查平台配置的公钥和本地生成的公钥是否一致。
Q:PaddlePaddle和Python环境问题
A:当前SSH连接成功之后,PaddlePaddle和Python环境需要自行激活,对应步骤:
- 配置环境变量:export PATH=$PATH:/opt/conda/bin/
- 查看当前paddle conda环境的名称:conda env list
- 激活Paddle环境环境:source activate {步骤2的paddle环境名称}