hunkier

学习笔记,开源代码,技术分享

AI Studio基本操作(一) Notebook篇

由于AI Studio使用了Notebook为主要编辑器, 因此也引入了一些iPython操作. 特别示例说明

AI Studio的Notebook项目的基本操作.

项目启停
执行和调试
多文件代码编辑
上传Notebook
Notebook快捷键
暗黑模式
字号调节
Notebook中使用Shell命令
    使用pip来安装自己需要的package (但不支持apt-get)
    查看当前环境中安装的package
    持久化安装
        使用git命令来同步代码 (暂时需要Paddle 1.4.1以上)
    文件下载
Python代码执行与调试
变量监控
Magic命令
     %env:设置环境变量
     %run: 运行python代码
     %%writefile and %pycat: 导出cell内容/显示外部脚本的内容
关于快速查看某个对象/方法/接口的用法
关于变量监控
关于调试代码

项目启停

当进入自己项目的详情页面时, 用户可以选择”运行”项目, 也就是准备项目环境.

同样的, 当不想继续时, 可以此页面点击”停止”以终止项目.

img


当启动项目时, 如个人信息完整, 则可以获得算力奖励

img


主动填写个人信息的入口在右上角的个人中心里

img

执行和调试

基于Notebook的方案和传统IDE方案略有不同, 请见下图:

img

插入断点则需要使用Python自带Debugger: PDB. 用法请点击这里:

PDB用法

多文件代码编辑

本系统的Notebook支持多文件编辑, 支持.py, .json, .txt, .log等格式的在线编辑, 支持部分图片类型文件的在线预览.

img

上传文件的体积是150MB. 如果需要引用更大体积的文件, 请使用数据集功能.

用户也可以使用命令, !cat <<newfile > newfile.py 在项目空间内直接创建文件, 之后双击进行编辑. 如下图所示:

img

上传Notebook

可以用自己的ipynb文件取代当前默认的Notebook(前提是格式合法)

img

Notebook快捷键

和原生Notebook快捷键基本一致.

快捷键分成两种状态下的. 一个是命令模式, 一个是编辑模式, 掌握之后事半功倍.

img

img


暗黑模式

经常有小伙伴来咨询如何使用暗黑模式(Dark Theme), @ACK白纸 同学提供了一个快捷方案: 使用浏览器插件.

Chrome下请搜索: 夜间眼睛

Firefox下请搜索: Dark Reader.

最终效果如下:

img

@ACK白纸 同学还推荐了更多有用的插件, 可以点击这里. 很有帮助哦

字号调节

如果觉得字体太小看不清楚, 可在左侧设置区找到相关设置进行调节:

img

Notebook中使用Shell命令

通过在Shell命令前添加! (感叹号), 就可以执行部分Shell命令. 包括诸如 !pip install这样的命令. 不过, !apt-get这种可能引发用户进一步操作的命令是不支持的.

下面是两个示例.

In [1]

# 查看当前挂载的数据集目录
!ls /home/aistudio/data/
data269

In [4]

#显示当前路径

!pwd
/home/aistudio

使用pip来安装自己需要的package (但不支持apt-get)

例如:

In [26]

!pip install jupyterthemes

查看当前环境中安装的package

In [1]

!pip list --format=columns
Package            Version        
------------------ ---------------
absl-py            0.8.1          
attrs              19.2.0         
backcall           0.1.0          
bleach             3.1.0          
certifi            2019.9.11      
chardet            3.0.4          
Click              7.0            
cloudpickle        1.2.1          
cma                2.7.0          
cycler             0.10.0         
Cython             0.29           
decorator          4.4.0          
entrypoints        0.3            
Flask              1.1.1          
funcsigs           1.0.2          
future             0.18.0         
graphviz           0.13           
grpcio             1.24.1         
gym                0.12.1         
h5py               2.9.0          
idna               2.8            
imageio            2.6.1          
imageio-ffmpeg     0.3.0          
importlib-metadata 0.23           
ipykernel          5.1.0          
ipython            7.0.1          
ipython-genutils   0.2.0          
itsdangerous       1.1.0          
jedi               0.15.1         
Jinja2             2.10.1         
jsonschema         3.1.1          
jupyter-client     5.3.3          
jupyter-core       4.5.0          
kiwisolver         1.1.0          
Markdown           3.1.1          
MarkupSafe         1.1.1          
matplotlib         2.2.3          
mistune            0.8.4          
more-itertools     7.2.0          
moviepy            1.0.1          
nbconvert          5.3.1          
nbformat           4.4.0          
nltk               3.4.5          
notebook           5.7.0          
numpy              1.16.4         
opencv-python      4.1.1.26       
paddlehub          1.2.0          
paddlepaddle-gpu   1.5.1.post97   
pandas             0.23.4         
pandocfilters      1.4.2          
parl               1.1.2          
parso              0.5.1          
pexpect            4.7.0          
pickleshare        0.7.5          
Pillow             6.2.0          
pip                19.2.3         
prettytable        0.7.2          
proglog            0.1.9          
prometheus-client  0.5.0          
prompt-toolkit     2.0.10         
protobuf           3.10.0         
ptyprocess         0.6.0          
pyarrow            0.13.0         
pyglet             1.4.5          
Pygments           2.4.2          
pyparsing          2.4.2          
pyrsistent         0.15.4         
python-dateutil    2.8.0          
pytz               2019.3         
PyYAML             5.1.2          
pyzmq              18.0.1         
rarfile            3.1            
recordio           0.1.7          
requests           2.22.0         
scikit-learn       0.20.0         
scipy              1.3.0          
Send2Trash         1.5.0          
setuptools         41.4.0         
simplegeneric      0.8.1          
six                1.12.0         
sklearn            0.0            
tb-nightly         1.15.0a20190801
tb-paddle          0.3.6          
tensorboardX       1.8            
termcolor          1.1.0          
terminado          0.8.2          
testpath           0.4.2          
tornado            5.1.1          
tqdm               4.36.1         
traitlets          4.3.3          
urllib3            1.25.6         
visualdl           1.3.0          
wcwidth            0.1.7          
webencodings       0.5.1          
Werkzeug           0.16.0         
wheel              0.33.6         
zipp               0.6.0          

In [1]

#以及使用下方命令查看预装软件
!apt list

持久化安装

如果需要进行持久化安装, 需要使用持久化路径, 如下方代码示例:

!mkdir /home/aistudio/external-libraries
!pip install beautifulsoup4 -t /home/aistudio/external-libraries

同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可:

import sys
sys.path.append('/home/aistudio/external-libraries')

使用git命令来同步代码 (暂时需要Paddle 1.4.1以上)

例如:

In [1]

%cd work/
/home/aistudio/work

In [3]

!git clone https://github.com/PaddlePaddle/Paddle.git  #Paddle官方模型

可以看到同步后work目录下出现一个Models文件夹

img

也可以活用Git命令进行本地代码管理.

注意: Paddle的Git体积过大, 同步会非常迟缓. 建议使用浏览器插件, 对指定目录进行下载, 然后上传至AI Studio的项目空间中. Chrome版


文件下载

文件下载分为”文件夹打包下载”和”单一文件下载”, 两者操作按钮在同一位置:

img

但文件夹下载可能耗时比较久, 每次只能下载一个文件夹内容, 也可能需要较长时间等待.

Python代码执行与调试

Notebook执行Python代码的原理和传统IDE略有不同.

  1. 传统IDE, 当点击Run按钮时, 编译器/解释器开始构建一个进程. 用户通过单步执行/设置断点进行代码调试和变量监控. 当代码出错, 或用户点击Stop按钮时, 进程被杀死, 资源回收.

而Notebook, 一旦启动, 就是开始创建一个”进程”(kernel). 每一个Cell, 都是一个天然的断点. 当代码出错, 或用户点击Stop按钮时, “进程”通常也不会被杀死.

因此如果代码陷入死循环等情况, 需要用户手动关闭并重启该”进程”.

  1. 此外, Notebook的Cell是可以随意颠倒顺序来执行的. 这点和传统IDE有很大不同.
  2. 作为前端的Notebook, 与后端的进程(kernel), 建立有一个Session. 未来本平台将支持terminal功能. 也就可以同时支持多个Session来控制kernel.

变量监控

因为Notebook的Cell是可以随意颠倒顺序来执行的, 因此本平台自带”变量监控”和”运行历史”. 方便用户了解当前代码运行状态.

通过重启环境并清空输出, 可以消除已生成的变量监控.

img


2. Magic命令

Magic命令是Notebook的高级用法了. 可以运行一些特殊的指令. Magic 命令的前面带有一个或两个百分号(% 或 %%),分别代表行 Magic 命令和单元格 Magic 命令。行 Magic 命令仅应用于编写 Magic 命令时所在的行,而单元格 Magic 命令应用于整个单元格。

举个例子:

In [7]

#显示全部可用的Magic命令

%lsmagic
Available line magics:
%alias  %alias_magic  %autoawait  %autocall  %automagic  %autosave  %bookmark  %cat  %cd  %clear  %colors  %config  %connect_info  %cp  %debug  %dhist  %dirs  %doctest_mode  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %less  %lf  %lk  %ll  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %lx  %macro  %magic  %man  %matplotlib  %mkdir  %more  %mv  %notebook  %page  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %popd  %pprint  %precision  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %qtconsole  %quickref  %recall  %rehashx  %reload_ext  %rep  %rerun  %reset  %reset_selective  %rm  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode

Available cell magics:
%%!  %%HTML  %%SVG  %%bash  %%capture  %%debug  %%file  %%html  %%javascript  %%js  %%latex  %%markdown  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile

Automagic is ON, % prefix IS NOT needed for line magics.

In [8]

#使用Magic命令来统计运行时长

import random

In [9]

%%timeit

prize = 0 
for i in range(100):
    roll = random.randint(1, 6)
    if roll%2 == 0:
        prize += roll
    else:
        prize -= 1
        
175 µs ± 2.12 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

甚至还可以直接嵌入可视化内容, 例如%matplotlib inline:

In [12]

%matplotlib inline
%config InlineBackend.figure_format = 'retina'

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,1,300)
for w in range(2,6,2):
    plt.plot(x, np.sin(np.pi*x)*np.sin(2*w*np.pi*x))

img

<Figure size 432x288 with 1 Axes>

这里需要注意的是, 当前技术架构局限, 一个Cell里面只能输出一张图片. 如果输出多张图片, 可能会有显示异常的问题


%env:设置环境变量

使用该命令, 可以在不必重启Kernel的情况下管理notebook的环境变量

In [4]

# Running %env without any arguments
# lists all environment variables

# The line below sets the environment
# variable OMP_NUM_THREADS
%env OMP_NUM_THREADS=4
env: OMP_NUM_THREADS=4

%run: 运行python代码

使用%run 可以运行.py格式的python代码

当然是用!python也是可以的

我在项目空间中上传了一个.py文件, 里面只有一行print代码. 我们执行一下看看.

img

In [5]

%run work/SampleOfRun.py
It's a demo code written in file SampleOfRun.py

In [6]

!python work/SampleOfRun.py
It's a demo code written in file SampleOfRun.py

%%writefile and %pycat: 导出cell内容/显示外部脚本的内容

AI Studio当前支持一定格式文件的预览和处理, 如果您的格式比较特殊, 尚未支持的话, 不妨试试这两个命令.

%%writefile magic可以把cell的内容保存到外部文件里。 而%pycat则可把外部文件展示在Cell中

In [13]

%%writefile SaveToPythonCode.py

from math import sqrt
for i in range(2,10):
    flag=1
    k=int(sqrt(i))
    for j in range(2,k+1):
        if i%j==0:
            flag=0
        break
        if(flag):
            print(i)
Writing SaveToPythonCode.py

因为没有指定路径, 所以文件被保存到了根目录下. 但至少it works.

img

我们再来尝试从中读文件内容

In [15]

%pycat SaveToPythonCode.py

更多Magic命令可以点击这里查询 Magic命令


关于快速查看某个对象/方法/接口的用法

在要查询的对象前输入?或??并执行即可. 单问号是普通信息, 双问号是详细信息.

前提: 该对象方法已经被正确导入(import)

示例:

In [2]

import paddle
import paddle.fluid

In [5]

?paddle.fluid.layers.conv3d

关于变量监控

你可以通过修改内核选项ast_note_interactivity,使得Jupyter对独占一行的所有变量或者语句都自动显示,这样你就可以马上看到多个语句的运行结果了。

In [2]

!pip install pydataset

In [3]

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

from pydataset import data

quakes = data('quakes')
quakes.head()
quakes.tail()
initiated datasets repo at: /home/aistudio/.pydataset/
     lat    long  depth  mag  stations
1 -20.42  181.62    562  4.8        41
2 -20.62  181.03    650  4.2        15
3 -26.00  184.10     42  5.4        43
4 -17.97  181.66    626  4.1        19
5 -20.42  181.96    649  4.0        11
        lat    long  depth  mag  stations
996  -25.93  179.54    470  4.4        22
997  -12.28  167.06    248  4.7        35
998  -20.13  184.20    244  4.5        34
999  -17.40  187.80     40  4.5        14
1000 -21.59  170.56    165  6.0       119

关于调试代码

Notebook自带一个调试器, 叫The Python Debugger (pdb),我们来看看它是如何工作的.

In [23]

# 对, 它也是依赖Magic命令启动的.
# 理论上pdb是可以通过脚本形式来启动. 但是在Notebook中不行, 会造成阻断

%pdb


def reverse(x: int) -> int:
    inputnumber = x.__str__()
    reversedStr = inputnumber[::-1]
    strOriLen = len(reversedStr)
    result = list()
    flag = 1
    for i in range(0, strOriLen):
        if i == (strOriLen -1) and reversedStr[i] == '-' :
            flag = -1
        else:
            result.append(reversedStr[i])
    outputs = ''.join(result)
    outputInt = int(outputs)        
     
    outputInt = outputInt * flag
        
    if outputInt > pow(2,31)-1  or outputInt < -1 * pow(2,31):
        outputInt = 0
        
    return outputInt

print(reverse(134))
Automatic pdb calling has been turned OFF
431

原文地址:https://aistudio.baidu.com/aistudio/projectdetail/417073?pV=76627

下一节将重点讲一下PDB的用法

谢谢你请我喝牛奶

欢迎关注我的其它发布渠道