以安装PyTorch为例说明Anaconda在Windows/Linux上的使用

时间:2023-07-01 17:21:40

  在Windows10上配置完MXNet 1.3.0后,再配置PyTorch 1.0时,发现两者需要依赖的NumPy版本不一致,之前是通过pip安装NumPy,根据pip的版本不同,会安装不同版本的NumPy,使用起来很不方便,而且MXNet和PyTorch依赖的Python版本也可能不同,这里使用Anaconda来轻松解决以上问题。
  
  简单来说,Anaconda是包管理器和环境管理器,它可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本,其包含了conda, numpy, scipy, Python等在内的1400多个科学包及其依赖项。Anaconda是在conda上发展出来的。Anaconda有2.x和3.x两个版本,2.x对应于Python的2.x,3.x对应于Python的3.x,因为Python2.x不久便会停止维护,因此直接下载Ananconda3.x版本即可,其中又分为32位和64位,根据需要下载对应的即可。
  
  conda是包及其依赖项和环境的管理工具,可运行在Windows, Linux, Mac平台,它可以快速安装、运行和升级包及其依赖项,可以在计算机中便捷地创建、保存、加载和切换环境。如果你需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。conda可以建立多个虚拟环境,在不同环境之间进行切换比较方便,环境管理也较为简单。
  
  conda为Python项目而创造,但可适用于R, Ruby, C/C++等多种语言。conda包和环境管理器包含于Anaconda的所有版本当中。pip是用于安装和管理软件包的包管理器。virtualenv是用于创建一个独立的Python环境的工具。conda结合了pip和virtualenv的功能。
  
  windows上安装Anaconda操作步骤:
  
  (1). 从  https://www.anaconda.com/download/#windows下载Anaconda3-2018.12-Windows-x86_64.exe ,大约614MB;
  
  (2). 以管理员身份运行Anaconda3-2018.12-Windows-x86_64.exe,然后依次点击Next;I Agree;Next;选择安装路径,这里安装到D:\ProgramFiles\Anaconda3,Next;勾选Register Anaconda as the system Python 3.7, Install;Next;不安装Microsoft VSCode,Skip;取消勾选Lear more, Finish;安装完成;安装完后D:\ProgramFiles\Anaconda3目录大小大约为5GB;
  
  (3). 以管理员身份运行Anaconda Prompt,在命令行中输入conda list,若结果可以正常显示,则说明安装成功,如下图所示:
  
  (4). 更新所有包,执行 conda upgrade --all,结果如下图:
  
  (5). 创建环境,安装pytorch 1.0版本,如环境名为pytorch1.0,包名为python,python版本为3.6,执行conda create -n pytorch1.0 python=3.6,结果如下图:
  
  (6). 进入环境,环境名为pytorch1.0,执行conda activate pytorch1.0,结果如下图:
  
  (7). 安装pytorch 1.0版本,CPU, Python3.6,执行conda install pytorch-cpu torchvision-cpu -c pytorch,结果如下图:
  
  (8). 验证pytorch 1.0是否安装正确,测试代码及执行结果如下,说明pytorch 1.0已正确安装:
  
  (9). 退出环境,执行conda deactivate,结果如下图:
  
  (10). 创建另一新环境pytorch0.4.1,安装pytorch 0.4.1版本,python版本为3.6,执行conda create -n pytorch0.4.1 python=3.6,结果如下图:
  
  (11). 进入pytorch0.4.1环境,执行conda activate pytorch0.4.1,结果如下图,注意:行首括号内的变化,之前未进入环境前是(base),进入pytorch1.0环境后是(pytorch1.0),现在进入pytorch0.4.1环境后是(pytorch0.4.1),即行首括号内显示的是当前所在的环境名:
  
  (12). 删除指定的环境,如删除pytorch0.4.1,执行conda env remove -n pytorch0.4.1,结果如下图:
  
  (13). 显示已创建的环境,执行conda info --envs,结果如下图,新建的环境均在Anaconda安装目录(D:\ProgramFiles\Anaconda3)的envs目录下:
  
  (14). 复制环境,假设已存在环境test,想复制环境test到test2,则执行conda create --name test2 --clone test,结果如下图,复制后两个环境test和test2的配置相同:
  
  (15). 共享环境,它能让其他人安装你的代码中使用的所有包,并确保这些包的版本正确,假如你当前环境为test2,想将test2的环境导出,则执行conda env export > test2.yaml,即将当前环境test2保存到test2.yaml文件中,结果如下图,生成的文件存放地址在C:/WINDOWS/system32;
  
  (16). 导入共享环境,执行conda env update -f= C:/WINDOWS/system32/test2.yaml,-f表示要导入文件的本地路径,结果如下图所示:
  
  ubuntu上安装Anaconda操作步骤:
  
  (1). 从 https://www.anaconda.com/download/#linux 下载Anaconda3-2018.12-Linux-x86_64.sh,大约652MB;
  
  (2). 依次执行以下命令,结果如下图所示:
  
  chmod +x Anaconda3-2018.12-Linux-x86_64.sh
  
  ./Anaconda3-2018.12-Linux-x86_64.sh
  
  (3). 启动Anaconda,执行:$ source ~/.bashrc 或关闭终端,然后再打开终端;
  
  (4). 验证Anaconda是否安装正确,执行 conda list,结果如下,说明Anaconda已被成功安装;
  
  (5). 创建环境,环境名为pytorch0.4.1,包名为python,版本为3.6,执行conda create -n pytorch0.4.1 python=3.6,结果如下:
  
  (6). 进入环境pytorch0.4.1,执行conda activate pytorch0.4.1,结果如下:
  
  (7). 安装pytorch 0.4.1,python版本为3.6,CUDA版本为8.0,这里通过从https://pytorch.org/get-started/previous-versions/ 下载cu80/torch-0.4.1-cp36-cp36m-linux_x86_64.whl文件进行安装,文件大小约471MB,本机已安装CUDA 8.0,执行conda install ./ torch-0.4.1-cp36-cp36m-linux_x86_64.whl时一直报Solving environment: failed, PackagesNotFoundError: The following packages are not available from current channels错误,后面换成使用pip命令安装,结果如下:
  
  (8). 验证pytorch 0.4.1 cuda8.0版本是否安装正确,测试代码及执行结果如下,说明安装正确。
  
  conda在windows和linux下常用命令如下:
  
  # 显示conda版本号
  
  conda --version
  
  # 更新所有包
  
  conda upgrade --all
  
  # 查看conda帮助信息
  
  conda --help
  
  # 安装包,如numpy
  
  conda install numpy
  
  # 安装指定版本号的包,如numpy 1.10
  
  conda install numpy=1.10
  
  # 可同时安装多个包,如pandas numpy
  
  conda install pandas numpy
  
  # 卸载包,如numpy
  
  conda remove numpy
  
  # 更新包,如numpy
  
  conda update numpy
  
  # 列出已安装的包
  
  conda list
  
  # 搜索包,如numpy
  
  conda search numpy
  
  # 创建新环境,如环境名为pytorch1.0,包名为python,python版本号为3.6
  
  conda create -n pytorch1.0 python=3.6
  
  # 进入新环境,如pytorch1.0
  
  conda activate pytorch1.0
  
  # 退出环境
  
  conda deactivate
  
  # 删除指定环境,如环境名为pytorch0.4.1
  
  conda env remove -n pytorch0.www.michenggw.com 4.1
  
  # 显示已创建的环境
  
  conda info --envs
  
  # 复制环境,如将已存在的环境名test复制到test2,复制后两个环境test2和test的配置相同
  
  conda create --name test2 --clone test
  
  # 导出共享环境,假如你当前环境为test2,想将test2的环境导出
  
  conda env export > test2.yaml
  
  # 导入共享环境,加入导入test2.yaml,-f表示yaml文件的本地路径
  
  oid insert(int x){
  
  for (int i=30;i>=0;i--)
  
  if (x>0&&(x&(1<<i)))
  
  if (b[i]) x^=b[i]; else{
  
  b[i]=x;
  
  for (int j=30;j>i;j--)
  
  if (b[j]&(1<<i)) b[j]^=b[i];
  
  for (int j=i-1;j>=0;j--)
  
  if (b[i]&(1<<j)) b[i]^=b[j];
  
  return;
  
  }
  
  }
  
  复制代码
  
  关于线性基的应用:
  
  1、求最大值
  
  把只有0/1的线性基,所有1的位对应的二进制数加起来就可以了。(所以说比较方便喽,都不用证明啥的)
  
  2、求第k大
  
  把所有的1的位单独拎出来,然后用按照k的二进制表示把值加上去就OK啦!代码如下:
  
  for (int i=0;i<=63;i++www.dasheng178.com) a[++cnt]=i;
  
  for (int i=cnt;i>=0;i--)
  
  if (k>>i) ans+=1<<a[i];
  
  一些例题:
  
  例1:albus就是要第一个登场
  
  题目大意:给你n个数,任取几个数进行xor操作(可以不取),得到2^n个数(可以有重复),把这些数从小到大排序,求k第一次出现时的下标。
  
  数据范围:n<=100000,所有数均小于10^9。
  
  来源:洛谷P4896
  
  题解:问题在于会有重复,怎么解决呢?
  
  如果你对线性基的理解够深刻的话,很快就能意识到——每一个线性相关的元素都会使得每一个值重复的元素数量乘以2。
  
  那么问题就已经很清楚了,设线性基中一共有cnt个1,我们只需要求出k是第几大的,然后再乘个2^(n-cnt)就可以了。
  
  代码:
  
  复制代码
  
  #include<bits/stdc++.h>
  
  using namespace std;
  
  int b[35];
  
  int n,k,cnt,tot,x,now,p;
  
  void insert(int x){
  
  for (int i=30;i>=0;i--)
  
  if (x>0&&(x&(1<www.ysyl157.com <i)))
  
  if (b[i]) x^=b[i]; else{
  
  b[i]=x;
  
  for (int j=30;j>i;j--)
  
  if (b[j]&(1<<i)) b[j]^=b[i];
  
  for (int j=i-1;j>=0;j--)
  
  if (b[i]&(1<<j)) b[i]^=b[j];
  
  return;
  
  }
  
  }
  
  int sqr(int x){
  
  return x*x%p;
  
  }
  
  int power(int x,int y){
  
  if (!y) return 1;
  
  if (y&1) return sqr(power(x,y/2))*x%p;
  
  else return sqr(power(x,y/2));
  
  }
  
  int main(){
  
  scanf("%d",&n);
  
  for (int i=1;i<=n;i++)
  
  scanf("%d",&x),insert(x);
  
  scanf("%d",&k);
  
  p=10086;
  
  for (int i=0;i<=30;i++)
  
  if (b[i]){
  
  if (k&(1<<i)) now+=1<<tot;
  
  tot++;
  
  }
  
  long long ans=(now%p*power(2,n-tot)+1)%p;
  
  printf("%lld\n",ans);
  
  return 0;
  
  conda env update -f= C:/WINDOWS/system32/test2.yaml