conda、anaconda、pip、torch、pytorch、tensorflow到底是什么东西?(转载自本人的知乎回答)
转载自本人的知乎回答(截止2024年9月,1700赞同,2400收藏)
https://www.zhihu.com/question/566592612/answer/3063465880
如果你是一个大四的CS准研究生回去补基础课,假如是科班CS甚至科班EE的话那你基础也太差了。你这个基础如果是去做视觉的科研是肯定做不了的。
转载请注明出处。
@Triborg 包括估计对教授这种做计算物理的,以及 @曾晋哲 这种做计算化学的会很好使。不过二位皆大佬肯定是会了。
我这次就一次把所有的东西全部讲完。
但是这个问题是个好问题。值得好好写一写。尤其是针对一些刚刚入门data science的同学。我觉得还有必要再加几个东西上去:docker,Nvidia-docker,VMware,vim/vi,服务器,以及如何靠MobaXterm/winscp去连接服务器。
首先,我们先说第一个东西。什么是anaconda。
1,anaconda
anaconda是一个软件,是一个“集成开发环境。”anaconda是一个非常适合写Python的软件,尤其是非常适合写Python的数据科学,data science。其实Python还有很多别的作用(甚至可以说除了生孩子,写操作系统以外基本都能干,包括很多半导体工程,其实也就是烧砖哥本人科研方向的研发也要用Python)。
当然,市面上最常见的用Python的除了机器学习/深度学习/数据科学/数据可视化这一套,用Python做网站,或者做应用软件开发也是一个比较主流的活。后者,我个人的经验是,用著名的软件Intellij-IDEA做开发会比较好。当然那是另外一回事了。
Python,在英语里是蟒蛇的意思。而anaconda,其实是一种南美洲的水蟒。考虑到读者的感受,图片我就不放了。
作为软件开发工具的anaconda是“集成,”也就是把所有能用的工具都给你堆在一起。我粗略的把他分为,写python的工具,比如最典型的就是spyder和jupyter。前者非常适合做开发。非常适合写,写给自己的程序;后者非常适合做汇报。比如写一个数据科学的报告,作为产品经理去写数据分析项目,或者大学生研究生写作业。

Fig.1 anaconda-spyder打开,长这个样。图片来自网络
另外一方面是支持这些开发工具的维护工具。比如安装一个新的开发环境,删除一个开发环境;安装一个新的库,对库进行升级,这类的工作。
那么为什么Python要搞这么麻烦的东西呢?因为Python是一个向后兼容不向前兼容的语言。什么叫向后兼容不向前兼容?Python后面的开发,是不需要保证之前发布的语法还是对的。这样做的好处就是Python永远是一个非常简洁的语言。但是这样做的坏处也非常明显。就是Python,会产生很多很多的“历史遗留问题。”
在Python的开发中,这些活儿是可以说是非常讨厌的。初学者可以说无不头疼。最典型的就是,如果你真正去做深度学习,你经常会发现,github上下载的深度学习的源代码,你没有办法直接去执行。那是因为你电脑上或者服务器上的库的版本和他用的开发版本不一样。用anaconda是可以解决这个问题的(配环境,一个个去配,但是会很麻烦)。其实解决这个问题最好的方法是用docker(甚至大部分深度学习的github code都会给你配一个docker的source file,非常方便你去create一个新的镜像,极大的降低你做深度学习的难度)。docker这个后面我们再说。
相比之下docker才更适合干深度学习。anaconda,配环境,更适合处理一些你日常的,反复需要去干的工作。这种工作的话一般你不需要反复去调python的库,版本。这里面还有另一个问题,anaconda你装一个新环境,需要的硬盘空间是远大于docker新建一个镜像需要的硬盘空间的。
如果你比如说是一个,简单做做data science,做做量化分析,计算物理/化学,生物信息,计量经济学的同学,用anaconda,知道怎么装环境,怎么装库,那其实就足够了。但是如果你的目标是做计算机视觉或者NLP等深度学习的研究,你是绝对很难用一个docker去handle所有问题的。
这个工作,在Python里面,是由prompt(navigator的命令行版),navigator(promopt的点鼠标版)来完成。prompt支持conda,和pip两个软件。而conda和pip具体是什么?我们过会儿再来更详细的结合案例去说。
软件版的anaconda,在这儿下载。记得下载免费版就足够了:
Free Download | Anaconda
也可以参考一篇旧文:
Anaconda核心特征:环境管理,及其使用指南 - 知乎 (zhihu.com)
2,conda,pip
我们前面说到,anaconda除了让你用spyder和jupyter去写代码以外,更大的作用在于"维护(Maintenace)."
比如,常用的包里,anaconda自带的包,包括numpy,pandas,matplotlib,sklearn等。但是著名的图像处理库(请注意这个是基于信号分析的不是深度学习)OpenCV anaconda里面就没有。你得自己去安装。tensorflow,pytorch你也得自己去安装。
要干这些活,你就要有工具。pip和conda,就是我们干这些事儿的工具。
从干活的角度,在anaconda里面的conda和pip是没有任何区别的。操作的指令几乎都完全一样。但是大家还是需要从理论的高度去知道他们的区别。conda是一个通用的,什么语言都可以管理的包。而pip(Pip install packages)实际上是一个专门针对python开发的包管理器。跟著名的virtualenv(Python后三大神器之一,以后有文章我们可以专门介绍)最早是在一块儿的。
不过他们还是有一些区别的。pip是从Pypi下载库,而conda则是从anaconda的官方库里去下载库的。
(Pypi是什么:PyPI(Python Package Index)是Python的官方软件包仓库,是一个用于共享、发布和安装Python软件包的中央存储库。它是由Python社区维护的一个公共资源,供开发者共享和获取Python包。
PyPI是一个集中的存储库,允许开发者将他们编写的Python库、框架和工具发布到一个统一的地方,供其他人使用。开发者可以将自己开发的软件包上传到PyPI,然后其他人可以使用pip等工具来从PyPI下载和安装这些软件包。
在PyPI上,你可以找到大量的开源Python软件包,涵盖了各种领域和用途,从数据科学到Web开发、机器学习、自然语言处理等等。PyPI提供了一个方便的方式来发现、共享和安装Python软件包,促进了Python社区的发展和合作。
要使用PyPI,你可以使用pip(Python的包管理工具)来从PyPI下载和安装软件包。pip会连接到PyPI服务器,查找指定的软件包并自动下载安装。这使得在Python项目中引入和使用第三方库变得非常简单和高效。)

Fig. 2 Pypi的官方网站
我感觉Pypi的详细让我想起了NIST,或者普林斯顿化学化工指南。基本涵盖了你要的那个库的全部信息。详细,准确,靠谱,体贴。比如我的老师著名光伏电子工程专家Ned J. Daukes教授开发的著名的太阳能模拟工具solcore在pypi上也找得到。
更具体的conda和pip的区别可以参考这位大佬的文章:
Anaconda与conda、pip与conda的区别 - 知乎 (zhihu.com)
我们在这儿,从实战的角度,给大家看一下怎么分别用pip和conda去安装包。
比如,我们要用python去画图。除了系统自带的matplotlib,还有几个非常著名的画图库:
pyecharts,一个百度开发的画图库。
plotly,号称史上最强可视化工具。
如果你是一个产品经理或者对数据可视化有要求的人,那么这种库可以帮助你解决问题。
你可以自己打开anaconda的prompt,分别pip install pyecharts, conda install plotly, 当然反过来也可以,看看他们的效果。其实他们是完全相同的。
有时候,你如果发现用conda下载不了,你就pip吧。pip下载不了,你就conda吧。我刚才试了一下solcore。就存在这个问题(我们的这个solcore,我建议你一般不要在windows下用,因为这个只能让你发挥出70%的功能。因为需要调用很多fortran的代码。你要实现在python里调用fortran是比较麻烦的。我试过,很难搞。不要把时间浪费在这种没有意义的工作上。我的建议是在linux下用solcore,根本不需要解决这个问题。包括在win自带的linux虚拟机上也可以直接实现这个功能)。

Fig 3. conda install无法安装solcore(这个是个bug)


添加图片注释,不超过 140 字(可选)
Fig 4. 我们用pip install就可以成功安装solcore
三,docker/nvidia-docker
docker是一个非常强悍的工具。如果你正经干深度学习,用anaconda是解决不了你的问题的,你肯定要用docker甚至nVidia docker(在windows上用不成,你要用linux去跑)才能解决你的问题。
docker是个啥?简单的来说,docker采用了化学里的“沙箱反应思想。”其实也就是一种简化。docker理论上可以处理任何语言,包括C++,java,JavaScript,Python,等等。一切语言。把你执行一个小程序所用的全部语言都浓缩到一个小小的“镜像”里面。然后如果你要跑这个程序,就用一个小小的镜像就足够了。
10本 Docker 入门学习书籍推荐 (zhihu.com)
如果,你要用docker,那么我建议你最好懂一点vim的知识。因为在docker里面你要改代码,要用vim。
nvidia-docker就是docker对GPU的一个升级。你要玩深度学习,很多时候要用GPU。那么怎么办?你就要套一层nVidia docker。这方面的东西,你就得去看更详细的资料,网站和文献了。
四,tensorflow,pytorch都是写深度学习的框架。一般用Python去调用。但是Matlab和java也可以。
深度学习具体怎么干活,自己去看,自己去研究,自己去写代码。太多了,不讲。比如你做object detection就那几个网络:R-CNN, fast R-CNN, faster-RCNN以及yolo,从v1到现在的v7,不同的版本。代码你自己看。我如果有兴趣了可以讲讲这些代码和算法。
五,服务器
很多时候我们需要把活放在大型计算机上去跑。或者,我们需要能够用自己的电脑(小终端)去连接服务器跑代码。
服务器的本质就是一台大型计算机。一般,正经的做深度学习的组,都有服务器。要么是自己组里的,要么是学校的超级计算机(比如新南威尔士大学拥有南半球排名第一的超级计算机katana),再不济也是花科研经费租的AWS,阿里云,腾讯云,GCP或者华为云。
你要连服务器,我推荐俩软件。第一个是mobaxterm,第二个是winscp。但是这个地方,务必注意,必须(从官方网站)安装正版。严禁安装任何来历不明的连服务器软件!!!否则非常容易被黑客入侵。盗走你的服务器资源用处很多,比如拿去挖矿。
如果你们用的是组里的服务器的话,组里的老板肯定会告诉你非常详细的怎么去搞的。一般来说,学生用户要在学校的超算或者cluster上注册一个号。学校的服务器是最好的。一般有专门的工程师去维护。
我在这儿拿winscp举个例子。

Fig 5. winscp的登陆页面
我划掉的地方(除了我这个地方因为是搞计算物理用SFTP协议就够了,传文件就行,速度快)都是你需要输入的地方。比如,你的学校的ip,端口号,你的用户名和密码等。只要连上这个,你就可以舒舒服服的躺在家里的床上给实验室工作,或者在五星级酒店的酒吧里喝着苏格兰威士忌听着美国的乡村音乐给实验室工作顺便给waiter小哥哥或者waitress小姐姐介绍一下你的工作,或者在南太平洋的船上连着wifi给实验室工作,或者在大堡礁玩潜水的时候,还不忘给学校的机子上提交一个小程序跑一跑。你烧砖哥怎么这么门清儿呢?因为你烧砖哥都干过。这样,你就可以不用去实验室了。
而且,干活我们还可以更卷一点:

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)
打开这个app他是这个样子:

添加图片注释,不超过 140 字(可选)
然后是:

添加图片注释,不超过 140 字(可选)
基本上可以帮助解决所有问题。
相关文章:
conda、anaconda、pip、torch、pytorch、tensorflow到底是什么东西?(转载自本人的知乎回答)
转载自本人的知乎回答(截止2024年9月,1700赞同,2400收藏) https://www.zhihu.com/question/566592612/answer/3063465880 如果你是一个大四的CS准研究生回去补基础课,假如是科班CS甚至科班EE的话那你基础也太差了。你…...
数据库系列之GaussDB数据库中逻辑对象关系简析
初次接触openGauss或GaussDB数据库的逻辑对象,被其中的表空间、数据库、schema和用户之间的关系,以及授权管理困惑住了,与熟悉的MySQL数据库的逻辑对象又有明显的不同。本文旨在简要梳理下GaussDB数据库逻辑对象之间的关系,以加深…...
如何进行不同数据库的集群操作?--从部署谈起,今天来看MySQL和NoSql数据库Redis的集群
篇幅较长,主要分为mysql和Redis两部分。找想要的部分可见目录食用。。 目录 什么是集群?为什么要集群? 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢? ----------------…...
第 6 章图像聚类
本章将介绍几种聚类方法,并展示如何利用它们对图像进行聚类,从而寻找相似的图像组。聚类可以用于识别、划分图像数据集,组织与导航。此外,我们还会对聚类后的图像进行相似性可视化。 6.1 K-means聚类 K-means 是一种将输入数据划…...
HC-SR501人体红外传感器详解(STM32)
目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 body_hw.h文件 body_hw.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 HC-SR501人体红外模块是基于红外线技术的自动控制模块,采用德国原装进口LHI77…...
关于武汉芯景科技有限公司的IIC电平转换芯片XJ9517开发指南(兼容PCF9517)
一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.电平转换 2.芯片使能/失能 EN 引脚为高电平有效,内部上拉至 VCC(B),允许用户选择中继器何时有效。这可用于在上电时隔离行为不良的从机,直到…...
C语言:scanf()、getchar()、gets()
一、gets() gets()能吸收空格和换行,因此输入后,对输出要去除空格 和换行\n; #include <stdio.h> #include <string.h> int main() {char str[1000];int count0;gets(str);for(int i0;i<strlen(str);i)count;printf("%s\n",str…...
基于MATLAB的全景图像拼接系统实现
简要的论文框架和技术思路 摘要 本文深入探讨了基于MATLAB平台的块匹配全景图像拼接系统的设计与实现。通过详细解析SIFT/SURF特征提取、RANSAC变换估计、APAP局部对齐、图割算法拼接缝选择及multi-band blending图像融合等关键技术,构建了高效且高质量的全景图像…...
AI模型“减肥”风潮:量化究竟带来了什么?
量化对大模型的影响是什么 ©作者|YXFFF 来源|神州问学 引言 大模型在NLP和CV领域的广泛应用中展现了强大的能力,但随着模型规模的扩大,对计算和存储资源的需求也急剧增加,特别是在资源受限的设备上面临挑战。量化技术通过将模型参数和…...
第四届“长城杯”网络安全大赛 暨京津冀网络安全技能竞赛(初赛) 全方向 题解WriteUp
战队名称:TeamGipsy 战队排名:18 SQLUP 题目描述:a website developed by a novice developer. 开题,是个登录界面。 账号admin,随便什么密码都能登录 点击头像可以进行文件上传 先简单上传个木马试试 测一下&…...
ETCD的备份和恢复
一、引言 ETCD是一个高度可用的键值存储系统,被广泛应用于Kubernetes等分布式系统中以存储关键配置数据和服务发现信息。由于ETCD的重要性,确保其数据的安全性和可靠性至关重要。本文将介绍ETCD备份与恢复的基础知识、常用方法及最佳实践。 二、概述 …...
Linux Makefile文本处理函数知识详解
1.Makefile函数 GNU make 提供了大量的函数用来处理文件名、变量、文本和命令。通过这些函数,用户可以节省很多精力,编写出更加灵活和健壮的Makefile。函数的使用和变量引用的展开方式相同: $(function arguments)${function arguments}关于…...
Rust的数据类型
【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust到底值不值得学,之一 -CSDN博客 Rust到底值不值得学,之二-CSDN博客 3.5 数据类型的定义和分类 在Rust…...
如何在vim中批量注释和取消注释
一、批量注释 首先在你需要注释的初始所在行在命令模式下输入CTRL v,然后按下HJKL来控制方向(不能使用键盘上的箭头方向键): 然后输入 shifti: 输入两个斜杠然后加exc就可以完成批量注释: 二、批量取消注…...
Centos7.9 安装Elasticsearch 8.15.1(图文教程)
本章教程,主要记录在Centos7.9 安装Elasticsearch 8.15.1的整个安装过程。 一、下载安装包 下载地址: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-8-15-1 你可以通过手动下载然后上传到服务器,也可以直接使用在线下载的方式。 wget https://artifacts…...
哈希表-数据结构
一、哈希表基本概念 哈希表(也称为散列表)是根据键而直接访问在内存存储位置的数据结构,也就是说实际上是经过哈希函数进行映射,映射道表中一个位置来访问记录,这个存放记录的数组称为散列表。 哈希函数:就…...
指针之旅(4)—— 指针与函数:函数指针、转移表、回调函数
目录 1. 函数名的理解 1.1 “函数名”和“&函数名”的含义 1.2 函数(名)的数据类型 2. 函数指针(变量) 2.1 函数指针(变量)的创建格式 2.2 函数指针(变量)的使用格式 2.3 例子 判别 3. typedef 关键字 3.1 typedef的作用 3.2 typedef的运作逻辑 和 函数指针类型…...
打造线上+线下相结合的O2O平台预约上门服务小程序源码系统 带完整的安装代码包以及搭建部署教程
系统概述 本系统采用前后端分离的设计架构,前端以微信小程序为载体,提供直观、易用的用户界面;后端则采用稳定的服务器架构,确保数据处理的高效与安全。系统主要包括用户端、商户端和管理员端三大模块,通过API接口实现…...
python sys模块
在Python中,sys模块提供了访问和使用解释器的许多功能的方法,包括命令行参数、环境变量、路径管理、标准输入输出流等。sys模块是Python的标准库的一部分,不需要额外安装即可使用。 常用的sys模块功能 1. sys.argv sys.argv是一个包含命令…...
【Linux 报错】SSH服务器拒绝了密码。请再试一次。(xshell)
出现该错误 可能的原因: 你写入的登录密码错误了,错误原因有: 1、本来输入就错误了 2、创建用户时,只创建了用户名,但密码没有重新设置 3、多人使用同一台服务器时,该服务器管理员(本体&#x…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
