AI Studio基本操作(一)

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

项目启停

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

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

image.png

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


执行和调试

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

插入断点则需要使用Python自带Debugger: PDB. 用法请点击这里:AI Studio基本操作(二)

多文件代码编辑

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

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

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

上传Notebook

可以用自己的ipynb文件取代当前默认的Notebook(前提是格式合法). 此举会覆盖当前项目中的默认notebook文件.

Notebook快捷键

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

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


暗黑模式

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

Chrome下请搜索: 夜间眼睛

Firefox下请搜索: Dark Reader.

最终效果如下:

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

字号调节

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

Notebook中使用Shell命令

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

下面是两个示例.

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

#显示当前路径 
!pwd

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

例如:

!pip install jupyterthemes

查看当前环境中安装的package

!pip list --format=columns

#以及使用下方命令查看预装软件 !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命令来同步代码

例如:

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

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

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

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

或是用svn: 比如你要下载这个github.com/mozilla/pdf… ,将/tree/master/换成/trunk/即可

svn checkout https://github.com/mozilla/pdf.js/trunk/test/pdfs


文件下载

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

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

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是可以随意颠倒顺序来执行的, 因此本平台自带"变量监控"和"运行历史". 方便用户了解当前代码运行状态.

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


2. Magic命令

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

举个例子:

#显示全部可用的Magic命令 
%lsmagic

Available line magics:
%alias  %alias_magic  %autoawait  %autocall  %automagic  %autosave  %bookmark  %cat  %cd  %clear  %colors  %conda  %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  %pip  %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.
#使用Magic命令来统计运行时长 
import random

%%timeit 
prize = 0 
for i in range(100): 
    roll = random.randint(1, 6) 
    if roll%2 == 0: 
        prize += roll 
    else: 
        prize -= 1

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

%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))

这里需要注意的是, 一个Cell要输出多张图片, 代码写法和输出单张图片时不一样. 写法不正确的话, 可能会有显示异常的问题

在matplotlib中显示中文字体, 需要额外的处理:

方法一:参数指定

在需要显示中文的方法中设置fontproperties的值

%matplotlib inline 
import matplotlib 
import matplotlib.pyplot as plt 
import matplotlib.font_manager as font_manager font = font_manager.FontProperties(fname='/usr/share/fonts/fangzheng/FZSYJW.TTF', size=16) # 创建字体对象 
labels = ['娱乐', '育儿', '饮食', '房贷', '交通', '其它'] 
sizes = [2, 3, 12, 70, 2, 8] 
explode = [0, 0, 0, 0.1, 0, 0] 
plt.pie(sizes, explode=explode, labels=labels, textprops={'fontproperties': font}) plt.title('饼图', fontproperties=font) 
plt.show()

方法二:全局设置

%matplotlib inline 
import matplotlib 
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager # 设置显示中文 
matplotlib.rcParams['font.sans-serif'] = ['FZSongYi-Z13S'] # 指定默认字体 matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题 
# 可以不设置 
matplotlib.rcParams['font.size'] = 16 
labels = ['娱乐', '育儿', '饮食', '房贷', '交通', '其它'] 
sizes = [2, 3, 12, 70, 2, 8] 
explode = [0, 0, 0, 0.1, 0, 0] 
plt.pie(sizes, explode=explode, labels=labels) 
plt.title('饼图') 
plt.show()

%env:设置环境变量

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

# Running %env without any arguments 
# lists all environment variables 
# The line below sets the environment 
# variable OMP_NUM_THREADS 
%env OMP_NUM_THREADS=4

%run: 运行python代码

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

当然是用!python也是可以的

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

%cd /home/aistudio 
%run work/SampleOfRun.py

!python work/SampleOfRun.py

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

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

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

%%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)

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

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

%pycat SaveToPythonCode.py

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

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

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

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

示例:

import random
?random.randint

Signature: random.randint(a, b)
Docstring:
Return random integer in range [a, b], including both end points.
        
File:      /opt/conda/envs/python35-paddle120-env/lib/python3.7/random.py
Type:      method

关于变量监控

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

!pip install pydataset
from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all" 
from pydataset import data 

quakes = data('quakes') 
quakes.head() 
quakes.tail()

关于调试代码

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

# 对, 它也是依赖 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))