分享

深度学习100问-3:深度学习应掌握哪些Linux开发技术?

 LibraryPKU 2019-08-21

深度学习100问

Author:louwill

Machine Learning Lab

     先前笔者分享过有三AI的一篇观点性文章:【观点】深度学习从弃用windows开始。虽然这可能让习惯于使用Windows的同学感到难受,但却指出了一个不争的事实:要想在深度学习上搞出点名堂,熟练Linux开发环境是基本前提。

     那作为一名深度学习算法工程师,我们的Linux应掌握到什么程度呢?有必要像运维工程师那样对Linux了如指掌?虽说有点夸张,但做深度学习开发Linux是越熟练越好。本节就简单整理下深度学习算法工程师应掌握的Linux基本技能点。

物理机or虚拟机?

     使用物理机还是虚拟机?这通常是大家面临的第一个问题。其实这根本不是什么问题,如果你喜欢命令行环境和对简洁的界面情有独钟,那么你大可以直接安装Ubuntu系统,直接使用Linux物理机。

     如果你已经习惯于windows操作系统,作为尝试,你可以尝试双系统,当然双系统可能会比较麻烦,这时候虚拟机会是一个比较好的选择。常用的虚拟机工具包括VMware、VirtualBox、Putty和Xshell等。

     如果是入门阶段而言,建议先使用虚拟机,后面熟悉之后可以尝试迁移到Linux真机上。

Linux常用命令

     Linux命令无数,但对于深度学习而言常用的不超过20个。主要包括:cd、ls、pwd、mkdir、touch、rm、mv、cp、find、grep、sed、awk、cat、more、less、tar、ps、chmod、wget、vim等。下面简单就这些命令做个描述。

cd

cd命令应该是最常用的了。cd用于目录切换:

cd ./documents # 切换到当前目录下的documents目录cd ../examples # 切换到上一层目录下的examples目录

ls

ls的使用频率大概仅次于cd了。ls命令用于查看当前目录下的文件和目录。ls命令参数众多,但常用的不多,根据需要重点记住一两个即可,比如 -l、-a等等。

-l :列出项目明细,包含文件的属性与权限数据等

-a :列出全部的文件,包括隐藏文件(开头为.的文件)

-d :仅列出目录本身

pwd

pwd用于查看当前路径。这个不多说。

mkdir

用于新建目录。

mkdir data # 新建data目录

touch

touch命令实际上用的并不多,其主要功能用于修改文件的时间戳或者新建一个不存在的文件。

touch ceshi.log # 创建一个ceshi.log文件

rm

rm是linux系统下的删除命令。该命令也有多个参数:

-d:删除目录

-f:强制删除目录或文件(慎用)

-i:删除之前先询问用户

-r:删除目录和目录下的子目录及文件

mv

mv即move,表示移动目录或文件,也可以用于目录和文件重命名。

mv 待处理的路径文件或目录名 目标路径文件或目录名

cp

cp即copy,表示复制文件,用法与mv类似。详细参数可进一步查找资料。

find

find命令用于linux系统文件查找,比如说想查一下train.py文件在哪个文件夹下,使用如下命令即可:

find / -name train.py

grep/sed/awk

这三个命令号称linux文本处理三剑客,所以放在一起介绍。在Linux中经常需要对文本内容进行查找、编辑和分析,有时候简单的任务用脚本来处理过于麻烦,Linux为我们提供了简洁的命令工具。

grep命令主要用于文本内容的查找。在正则表达式的加持下功能变得非常强大,其用于如下:

grep [option] pattern filename

比如说我们要在train.py文件中查找包含data的行:

grep 'datatrain.py

sed命令用于文本内容的编辑。比如说我们要在train.py文件中最后一行追加一行代码:

sed '$a print('done!')' train.py

而awk主要用于文本内容的分析。比如说我们要对处理的数据以报告形式呈现或者是按列进行处理,这时候awk的作用就体现出来了。具体可进一步查找资料和用法。总之这三个命令异常强大,和其他命令配合熟练使用往往能事半功倍。

cat/more/less

这三个命令均用于查看文件内容。cat表示查看全部文件内容,但如果有时候文件较大的时候使用cat命令会比较不好看,而more和less命令则可以支持翻页查看的功能,其中less比more还要强大一点,可以支持翻页、跳转和查找等功能。

tar

tar表示对文件进行打包。

ps

ps即为process,表示查看当前进程。比如说我们要查看当前用户的所有进程:

ps -u 用户名

chmod

chmod用于更改文件权限。

wget

wget是一个文件下载工具,用于下载网络上的各种资源和软件。比如说我们要下载anaconda到本地:

wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh

vim

vim是linux下最强大的编辑器,具体可参考文末给出的参考学习资料。

Shell脚本

     Shell是用户使用linux的桥梁,Shell既是一种命令语言,也是一种程序设计语言。Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。而Shell脚本指的是为Shell编写的脚本程序。

     在日常的开发工作中,我们可以把Shell脚本当作一种粘合剂,用来粘合各种开发语言。新建一个test.sh文件:

#!/bin/bashecho 'Hello World !'

运行test.sh:

chmod +x ./test.sh #使脚本具有执行权限./test.sh #执行脚本

     Shell作为一种脚本语言,也有变量、函数、输入输出、程序控制等语法规则。具体Shell教程可参考w3cschool:

https://www./linux/linux-shell.html

vim编辑器

     作为世界上最强大文本编辑器,vim的学习曲线无比陡峭(笔者自己目前就徘徊在深入vim各种命令工具中)。首先要明确的是vim包括三种模式,搞不清楚这三种模式vim基本上学不下去的。三种模式的关系和切换如下:

     关于vim的具体使用可参考陈皓(左耳朵耗子)在酷壳网上的教程。简明VIM练级攻略:https:///articles/5426.html

     vim四重境界,需要花费大量时间不断反复的练习才能熟能生巧。

结语

     Linux作为一个系统,功能庞大而又全面。要想很深入的掌握Linux,除了日常的积累之外,还需要更加系统的集中学习。这里推荐鸟叔的Linux私房菜:

http://cn.linux./linux_basic/linux_basic.php

     对于深度学习开发而言,掌握基础的Linux技法是极为必要的。比如说如何在服务器上启动远程jupyter?如何使用虚拟环境?等等。关于Linux笔者就简单罗列到这里,具体还需要大家集中系统的进行学习。

     有学术和技术问题的同学可以加我微信进入机器学习实验室读者交流群。加微信后说明来意,最好做个简单的自我介绍,让我有个印象,加了一言不发不如不加。

参考资料:

http://cn.linux./linux_basic/linux_basic.php

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多