金沙城娱乐场网址大全 > www041net > 【金沙城娱乐场网址大全】Centos配置深度学习开

原标题:【金沙城娱乐场网址大全】Centos配置深度学习开

浏览次数:165 时间:2019-10-07

^C

3. 安装TensorFlow-gpu

  • 安装anaconda,能够用来确立python3和TensorFlow的一些以来情况。
$ wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh    #下载anaconda
$ bash anaconda.sh      #安装anaconda
$ vim /root/.bashrc     #加入环境变量
    # 最后一行添加:
    export PATH="/root/anaconda3/bin:$PATH"
$ source /root/.bashrc
  • 安装TensorFlow
pip install tensorflow-gpu

su

    su全名称为:switch user,其关键功用为开展别的地点的切换,其常用用法如下所示:

2.6 execle 函数

 

[cpp] view plain copy

 

  1. if (fork() == 0){  
  2.     //child process  
  3.     char * env[] = {"PATH=/home/gateman", "USER=lei", "STATUS=testing", NULL};  
  4.     if (execle("/usr/bin/env","env",NULL,env) <0){  
  5.         perror("error on exec");  
  6.         exit(0);  
  7.     }  
  8. }else{  
  9.     //parent process  
  10.     wait(&childpid);  
  11.     printf("execle donenn");  
  12. }  

 

 

 输出:

金沙城娱乐场网址大全 1

 

 

R:>cat aa.txt
2222

child process 2 is killed by parent!

2.1 cuda

  • 官方网站下载cuda,最佳下载9.0本子:
  • 慎选契合自己机器的设置,选取runfile(local)下载到centos中:
    金沙城娱乐场网址大全 2
  • 内需下载全数补丁,下载后安装cuda:
$ sudo sh cuda_9.0.176_384.81_linux.run
  • 测量检验cuda是或不是安装
$ cd /usr/local/cuda/samples/1_Utilities/deviceQuery
$ sudo make
$ ./deviceQuery

结果:
金沙城娱乐场网址大全 3

用法示例

1、切换到root

[admin@localhost ~]$ su -
密码:
上一次登录:六 8月 18 18:10:46 CST 2018pts/2 上
最后一次失败的登录:六 8月 18 18:17:04 CST 2018从 58.218.92.37ssh:notty 上
最有一次成功登录后有 142 次失败的登录尝试。
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root)

root客户的后缀是 # ,而普通客商为 $

2、实行钦命命令行后即重临原位

[admin@localhost ~]$ head -n 2  /etc/shadow
head: 无法打开"/etc/shadow" 读取数据: 权限不够
[admin@localhost ~]$ su - -c "head -n 2  /etc/shadow"
密码:
root:$6$UbRYE8f8cxI757Lw$BJjLlD./2Om51RcIQadxZ8LbKpWzaVDISDpXd5rNPergZQWH2VAPF7LXRp/HCjx95xk2rd.Lw2Tiggs8Cr1WG0::0:99999:7:::
bin:*:17632:0:99999:7:::

2. exec 函数组

 

      需求注意的是exec并不是1个函数, 其实它只是一组函数的统称, 它富含下边6个函数:

     

[cpp] view plain copy

 

  1. #include <unistd.h>  
  2.   
  3. int execl(const char *path, const char *arg, ...);  
  4.   
  5. int execlp(const char *file, const char *arg, ...);  
  6.   
  7. int execle(const char *path, const char *arg, ..., char *const envp[]);  
  8.   
  9. int execv(const char *path, char *const argv[]);  
  10.   
  11. int execvp(const char *file, char *const argv[]);  
  12.   
  13. int execve(const char *path, char *const argv[], char *const envp[]);  

 

       可以见见那6个函数名字不一致, 并且他们用于接受的参数也区别.

       实际上他们的效用都以基本上的, 因为要用以接受不相同的参数所以要用差别的名字分别它们, 毕竟c语言未有函数重载的效果嘛..  

 

       不过其实它们的命名是有规律的:

       exec[l or v][p][e]

       exec函数里的参数能够分为3个部分,      施行文书部分,     命令参数部分,   蒙受变量部分.

        譬喻小编要推行1个指令   ls -l /home/gateman  

        实行文书部分正是  "/usr/bin/ls"

        命令参加比赛部分就是 "ls","-l","/home/gateman",NULL              见到是以ls初始 每1个空格都必需分开成2个部分, 并且以NULL结尾的啊.

        情状变量部分, 那是1个数组,最终的要素必得是NULL 举个例子  char * env[] = {"PATH=/home/gateman", "USER=lei", "STATUS=testing", NULL};

        

        好了说下命名法则:

        e后续,  参数必需带情状变量部分,   蒙受变零部分参数会化为实行exec函数时期的蒙受变量, 少之又少用

        l 后续,   命令参数部分必得以"," 相隔, 最终1个指令参数必得是NULL

        v 后续,   命令参数部分必须是1个以NULL结尾的字符串指针数组的头顶指针.         例如char * pstr就是1个字符串的指针, char * pstr[] 就是数组了, 分别针对各种字符串.

        p后续,   实行文书部分能够不带路线, exec函数会在$PATH中找

 

          

         还只怕有1个注意的是, exec函数会代替实践它的长河,  约等于说, 一旦exec函数实践成功, 它就不会再次来到了, 进程截止.   可是假诺exec函数施行停业, 它会再次来到失败的新闻,  况且经过继续推行前面包车型客车代码!

 

       日常exec会放在fork() 函数的子进度部分, 来代替子进度施行啦, 试行成功后子程序就能够灭亡,  可是实践倒闭以来, 必需用exit()函数来让子进度退出!

       上面是各种例子:

 

SYSDATE

2017-12-25 10:06:33

--//晕!!分明set timing off head off;那行未有经过管道出口,而是直接出口到荧屏.因为一旦输入管道,显示的相应是绝非sysdate字段名.
--//留神看后面包车型大巴事例才意识实际上echo 1111 &echo 2222 | cat 输出1111走显示器,而输出2222管道,看上去显示是通常的.
--//约等于要2行都因而管道必需使用括号.修改如下.

R:>(echo set timing off head off; &echo select  sysdate  from dual; ) | sqlplus -s scott/book@78
2017-12-25 10:08:59

--//作者google开采别的的写法,在&前步入^.
R:>echo set timing off head off;^&echo select  sysdate  from dual;  | sqlplus -s scott/book@78
2017-12-25 10:11:57

--//确实是Ok了,但是另外的难点来了:
R:>echo set timing off head off;^&echo select  sysdate  from dual;  | cat
set timing off head off;
select  sysdate  from dual;

R:>echo set timing off head off;^&echo select  sysdate  from dual; > aa.txt

R:>cat aa.txt
set timing off head off;&echo select  sysdate  from dual;

--//不能够明白windows的批管理,通过管道出口2行.而选择文件吸纳展现的是set timing off head off;&echo select  sysdate  from dual;
--//重定向到文件时^实际上转义&.
set timing off head off; &echo select  sysdate  from dual;

--//而实际上那样进行是拾壹分的.
R:>cat aa.txt | sqlplus -s scott/book@78
Enter value for echo:
SP2-0546: User requested Interrupt or EOF detected.

--//如故不佳掌握windows的批管理的神秘!!在自身感到到最好的格局仍旧加括号比较好明白一些.
--//实际上纵然能很好明白链接
--//就会很好精通.

--//可是若是echo里面有括号问题又来了:
R:>(echo set timing off head off;&echo select  (sysdate+1)  from dual;)  | sqlplus -s scott/book@78
那儿不该 from。

--//也便是)要转义,要转义3次.境遇这种状态反复追加^正是了.
R:>(echo set timing off head off;&echo select  (sysdate+1^^^)  from dual;)  | sqlplus -s scott/book@78
2017-12-26 11:16:33

--//而前边那种办法就总结了.
R:>echo set timing off head off;^&echo select  (sysdate+1)  from dual; |   sqlplus -s scott/book@78
2017-12-26 11:17:35

--//以笔者之见windows批处理真是变态加变态..

 1 #include<stdio.h>
 2 #include<signal.h>
 3 #include<unistd.h>
 4 #include<sys/types.h>
 5 #include<sys/wait.h>
 6 int wait_mark;
 7 void waiting(),stop();
 8 void main()
 9 {int  p1, p2;
10 signal(SIGINT,stop);
11 while((p1=fork())==-1);
12 if(p1>0)                            /*在父进程中*/
13 {①
14 while((p2=fork())==-1);
15            If(p2>0)                    /*在父进程中*/
16             { ②
17                   wait_mark=1;
18                  waiting(0);
19                 kill(p1,10);
20                 kill(p2,12);
21                 wait( );
22                wait( );
23                printf("parent process is killed!n");
24                exit(0);
25             }
26            else                        /*在子进程2中*/
27            {
28 wait_mark=1;
29 signal(12,stop);
30 waiting();
31 lockf(1,1,0);
32 printf("child process 2 is killed by parent!n");
33 lockf(1,0,0);
34 exit(0);
35 }
36 } 
37 else                        /*在子进程1中*/
38 {
39       wait_mark=1;
40       signal(10,stop);
41       waiting();
42       lockf(1,1,0);
43       printf("child process 1 is killed by parent!n");
44       lockf(1,0,0);
45       exit(0);
46 }
47 }
48 void waiting()
49 {
50    while(wait_mark!=0);
51 }
52 void stop()
53 {
54    wait_mark=0;
55 }

测试

输入:

$ python
>>> import tensorflow

显示:

>>> import tensorflow
/root/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
>>> 

未报错,安装成功。

转载请申明出处。

    在采纳Linux系统中,偶然候还亟需做身份切换,那是干吗?

1.4 使用wait() 函数主程序等子程序实施实现(退出)后再实践.   

 

        由地点例子得知,  主程序和子程序的实行顺序是随机的,  可是实际上情状下, 常常我们盼望子进程实行后,  才继续推行主进程. 

        比如对于地点的fork_1()函数, 小编想先输出子进度的8个 "This is child process"  然后再出口 8个 主进程"This is parent process", 改如何做?

        wait()函数就提供了这几个意义,    在if 条件内的  主进程呢部分内 加上wait() 函数, 就足以让主进度实行fork()函数时先hold 住, 等子进程退出后再实行, 平时会合营子进程的exit()函数一起使用.

 

        我将fork_1()函数修改一下, 增多了wait()语句:

 

[cpp] view plain copy

 

  1. int fork_1(){  
  2.     int childpid;  
  3.     int i;  
  4.   
  5.     if (fork() == 0){  
  6. 【金沙城娱乐场网址大全】Centos配置深度学习开垦条件,进度间通信。        //child process  
  7.         for (i=1; i<=8; i++){  
  8.             printf("This is child processn");  
  9.         }  
  10.         exit(0);  
  11.     }else{  
  12.         //parent process  
  13.         wait();  
  14.         for(i=1; i<=8; i++){  
  15.             printf("This is parent processn");  
  16.         }  
  17.     }  
  18.   
  19.     printf("step2 after fork() !!nn");  
  20. }  

 

输出:

 

金沙城娱乐场网址大全 4

      见到那时的显示器输出就很有规律了!

      其实wait() 函数还恐怕有1个功能, 便是能够吸收接纳1个 pid_t(在unistd.h内,其实正是Int啦) 指针类型参数,   给这么些参数赋上子进度退出前的体系pid值

     流程图:

  金沙城娱乐场网址大全 5

 

 

 

 

R:>echo 1111 & echo 2222 > aa.txt
1111

Child process 1 is killed by parent!

  • 1. 装置显卡驱动
  • 2. 安装CUDACUDNN
  • 3. 安装TensorFlow-gpu
  • 测试
  • su:能够切换来钦赐的客户,要是切换来root,则需求了解root的密码
  • sudo:提前设置好sudo权限,试行以sudo 命令,则能够以root身份实行命令,比较于su来说,可以确定保障root密码不会漏风。

2.3 execve 函数

 

[cpp] view plain copy

 

  1. if (fork() == 0){  
  2.     //child process  
  3.     char * execve_str[] = {"env",NULL};  
  4.     char * env[] = {"PATH=/tmp", "USER=lei", "STATUS=testing", NULL};  
  5.     if (execve("/usr/bin/env",execve_str,env) <0 ){  
  6.         perror("error on exec");  
  7.         exit(0);  
  8.     }  
  9. }else{  
  10.     //parent process  
  11.     wait(&childpid);  
  12.     printf("execve donenn");  
  13. }  

 

 

1.echo &.
R:>echo 1111 & echo 2222
1111
2222

child process 2 is killed by parent!

目录

基本配备

  • 1、单一客户可进行root全数命令
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL # 系统默认
admin   ALL=(ALL)       ALL # 用户增加

各队解释如下所示:
root/admin:顾客账号,钦点哪些账号可利用sudo命令
ALL=(ALL):登入者的来源主机名=可切换的地点
  登入者的来源于主机名:设置账号可由哪一台互连网主机连接过来,即设置可信主机。
  可切换的地点:账号能够切换到什么样身份来实行后续的授命
ALL:可实行的一声令下:本条渠道必需以相对路线来填写
  ALL是新鲜入眼字,代表任何身份、任何主机和任何命令的情趣。

  • 2、利用客商组和免密码的意义
      绝比较于通过单个顾客来讲,通过客商组来支配更是便利灵活。
# 修改用户的属组,只用户属于wheel则可以执行sudo命令
[root@localhost ]# usermod -a -G wheel admin

[root@localhost ~]# visudo
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL # %wheel:代表任何组

# 使用sudo 命令而不需要输入密码
%wheel  ALL=(ALL)       NOPASSWD: ALL
  • 3、有限制的授命操作
      以上三种情势,能够实惠顾客使用root身份施行别的交事务情,假若想给顾客分配部分权力试行命令,该怎么布置?
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
# 该用户仅有执行 ls 的权限,路径必须为绝对路径
admin   ALL=(ALL)       /usr/bin/ls
# 添加用户的执行sudo命令的排除权限,! 表示不可执行
admin   ALL=(ALL)   !/usr/bin/ls,!/usr/bin/passwd,!/usr/bin/passwd root
  • 4、通过外号批量设置权限
[root@localhost ~]# visudo
# 批量设置别名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme

# 批量设置命令权限
## Command Aliases
Cmnd_Alias SOFTWARE = !/usr/bin/rpm,!/usr/bin/up2date,!/usr/bin/yum

# 设置sudo的限制命令
ADMINS ALL=(root) SOFTWARE

透过外号举行权力设置均须要采纳大写字符

  • 5、搭配su使用
        在好些个岁月大家须要一大波实行比非常多root的干活,所以直接使用sudo会认为很麻烦,那有未有简要的法子使sudo搭配su,一回性调换为root,并且依旧客商本人的密码?方法如下所示:
[root@localhost ~]# visudo
# 批量设置别名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme

# 设置sudo的限制命令
ADMINS ALL=(root) /usr/bin/su -
# 使用按以下输入即可,即可直接切换为root用户
[root@localhost ~]# sudo su -

正文同步在微信订阅号上揭橥,如各位小同伴们欣赏小编的小说,也能够关注小编的微信订阅号:woaitest,或扫描上面包车型地铁二维码增多关切:
金沙城娱乐场网址大全 6

1.1 fork() 函数的职能

       平日来说, 大家编辑1个常常的c程序, 运维那个顺序直到程序结束, 系统只会分配1个pid给那几个顺序, 也就就说, 系统里只会有一条关于那么些程序的进度.

 

        可是推行了fork() 这几个函数就不相同了. 

        fork 那个阿尔巴尼亚语单词在立陶宛(Lithuania)语里是"分叉"意思,  fork() 那一个函数作用也很相符那么些意思.  它的效果是复制当前进度(富含经过在内部存款和储蓄器里的仓库数据)为1个新的镜像. 然后这些新的镜像和旧的进程同一时候实施下去. 也正是自然1个进度, 境遇fork() 函数后就分割成多少个经过同时实践了. 并且那七个进度是互不影响

 

        参照他事他说加以考察下边这一个小程序:

 

[cpp] view plain copy

 

  1. int fork_3(){  
  2.     printf("it's the main process step 1!!nn");  
  3.   
  4.     fork();  
  5.   
  6.     printf("step2 after fork() !!nn");  
  7.   
  8.     int i; scanf("%d",&i);   //prevent exiting  
  9.     return 0;  
  10. }  

 

          在这一个函数里, 共有两条printf语句, 不过实践推行时则打出了3行消息. 如下图: 

--//可是一旦写成如下:

1、编写一段程序,使用系统调用fork( )创立多少个子进程,再用系统调用signal( )让父进  程捕捉键盘上来的暂停频限信号(即按ctrl+c键),当捕捉到中断功率信号后,父进度用系统调用kill( )向三个子进度发出功率信号,子进度捕捉到功率信号后,分别出口下列音讯后甘休:  

2. 安装CUDACUDNN

sudo

    su使用起来十分有利,但同样也存在安全祸患。在一台服务器上边,纵然有几个人利用,在行使su命令切换到root后,则大家都清楚了root密码,那么今后其余用每户平均可以以root顾客身份登入和掩护服务器,则安全计策形同虚设了。那该如何做?Linux系统中则提供了别的二个限令sudo

3. fork() 和exec 函数与system()函数比较

     看见上边execvp函数的输出. 你会意识 exec函数只是系统调用, 它是不辅助管线管理的

     而system()函数是支撑的.   他的里边会活动fork() 1个子进度,不过成效未有fork() 和 exec合作使用好.

 

     然则exec 补助实行脚本.  所以不必要管线管理的授命也许脚本能够运用fork() 和 exec函数来实行.

 

 

R:>echo set timing off head off; &echo select  sysdate  from dual;
set timing off head off;
select  sysdate  from dual;

parent process is killed!

1. 装置显卡驱动

  • 检查评定显卡驱动及型号
$ sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  • 添加ELPepo源
$ sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
  • 设置NVIDIA驱动物检疫查测验
$ sudo yum install nvidia-detect
$ nvidia-detect -v

$ yum -y install kmod-nvidia

    基于上述思量,在平日行使中都以利用普通账户举行登陆和常用操作。假诺急需维护系统或设置、更新软件时,则要求切换来root身份张开操作。而常用的形式着重有五个:

1.4 使用exit() 函数令子过程在if 判定内甘休.

          参照他事他说加以考察上边的函数, 就算应用if 对 fork() 的再次回到值进行判断,  达成了子进度和 主进度在if推断的界定内实践了不一样的代码,  然而就好像上边包车型大巴流程图, 一旦if试行到位, 他们照旧会独家试行前面包车型地铁代码. 

          平时那不是大家期待的,  大家越来越多时会希望子进度推行一段特其余代码后就让他结束,  前边的代码让主程序试行就行了.

          这么些完毕起来很简单, 在子程序的if 条件内最后加上exit() 函数就ok了.

 

         将上面包车型地铁fork_1()函数修改一下, 加上exit语句:

 

[cpp] view plain copy

 

  1. int fork_1(){  
  2.     int childpid;  
  3.     int i;  
  4.   
  5.     if (fork() == 0){  
  6.         //child process  
  7.         for (i=1; i<=8; i++){  
  8.             printf("This is child processn");  
  9.         }  
  10.         exit(0);  
  11.     }else{  
  12.         //parent process  
  13.         for(i=1; i<=8; i++){  
  14.             printf("This is parent processn");  
  15.         }  
  16.     }  
  17.   
  18.     printf("step2 after fork() !!nn");  
  19. }  

       再看看输出:

 

金沙城娱乐场网址大全 7

 

            能够看出, step2只输出1次了,   那是因为子程序在 if条件内停止了啊, 一旦 if 剖断成, 就只剩下1个主进度实施上面包车型地铁代码了, 那多亏我们想要的!

            注意: exit() 函数在 stdlib.h 头文件内

 

流程图:

金沙城娱乐场网址大全 8

 

 

 

[20171225]变态的windows批处理4.txt

本文由金沙城娱乐场网址大全发布于www041net,转载请注明出处:【金沙城娱乐场网址大全】Centos配置深度学习开

关键词:

上一篇:Centos7安插Ali云yum源,车辆工程

下一篇:没有了