先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
正文
-
6 测试
-
- 6.1 Toy_example部署验证
-
- 6.1.1 单边测试
-
6.1.2 双边测试
-
6.2 最小化测试
-
- **6.2.1 上传预设数据:**
-
**6.2.2 快速模式:**
-
**6.2.3 正常模式**:
-
6.3 Fateboard testing
-
7 系统运维
-
- 7.1 服务管理
-
- 7.1.1 服务管理
-
7.2 查看进程和端口
-
- 7.2.1 查看进程
-
7.2.2 查看进程端口
-
7.2.3 服务日志
-
- 7.2.4 文件目录说明
-
8. 卸载
-
-
-
- 8.1 概述
-
-
-
8.2 执行卸载
=============================================================
这篇文章是我对Fate cluster部署方式的总结。从零开始,一步一步实现Fate cluster的部署,如果有不对的地方请给我留言。PDF版本我上传到CSDN了,有需要的可以下载,地址:
https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/21314477
=================================================================
1)FATE
FATE (Federated AI Technology Enabler) 是微众银行AI部门发起的开源项目,
提供了一种基于数据隐私保护的安全计算框架,为机器学习、深度学习、迁移学习算法提供强有力的安全计算支持。
安全底层支持同态加密、秘密共享、哈希散列等多种多方安全计算机制,算法层支持多方安全计算模式下的逻辑回归、Boosting、联邦迁移学习等。
2)EggRoll
Eggroll 是一个适用于机器学习和深度学习的大规模分布式架构,包括了计算、存储和通信等模块。为FATE框架提供底层支撑。
3)FATE官方网站:https://fate.fedai.org/
本文将介绍使用ansible部署脚本进行FATE集群的部署。
| 软件产品 | 组件 | 端口 | 说明 |
| — | — | — | — |
| fate | fate_flow | 9360;9380 | 联合学习任务流水线管理模块 |
| fate | fateboard | 8080 | 联合学习过程可视化模块 |
| fate | FederatedML | | 算法代码包 |
| eggroll | clustermanager | 4670 | cluster manager管理集群 |
| eggroll | nodemanger | 4671 | node manager管理每台机器资源 |
| eggroll | rollsite | 9370 | 跨站点或者跨party通讯组件 |
| mysql | mysql | 3306 | 数据存储,clustermanager和fateflow依赖 |
=================================================================
本示例是每端只有一台主机,每端可以多台主机,目前只支持nodemanager多节点部署,其他组件都是单节点。
| role | partyid | IP地址 | 操作系统 | 主机配置 | 存储 | 部署模块 |
| — | — | — | — | — | — | — |
| host | 10000 | 192.168.65.161 (有外网) | CentOS 7.2/Ubuntu 18.04 | 8C16G | 500G | fate_flow,fateboard,clustermanager,nodemanger,rollsite,mysql |
| guest | 9999 | 192.168.65.162 | CentOS 7.2/Ubuntu 18.04 | 8C16G | 500G | fate_flow,fateboard,clustermanager,nodemanger,rollsite,mysql |
| 类别 | 说明 |
| — | — |
| 主机配置 | 不低于8C16G500G,千兆网卡 |
| 操作系统 | CentOS linux 7.2及以上同时低于8/Ubuntu 18.04 |
| 依赖包 | 需要安装如下依赖包:
#centos
gcc gcc-c++ make openssl-devel gmp-devel mpfr-devel libmpc-devel libaio
numactl autoconf automake libtool libffi-devel ansible
#ubuntu
gcc g++ make openssl ansible libgmp-dev libmpfr-dev libmpc-dev
libaio1 libaio-dev numactl autoconf automake libtool libffi-dev
cd /usr/lib/x86_64-linux-gnu
if [ ! -f “libssl.so.10” ];then
ln -s libssl.so.1.0.0 libssl.so.10
ln -s libcrypto.so.1.0.0 libcrypto.so.10
fi |
| 用户 | 用户:app,属主:apps(app用户需可以sudo su root而无需密码) |
| 文件系统 | 1、数据盘挂载在/data目录下。
2、创建/data/projects目录,目录属主为:app:apps。
3、根目录空闲空间不低于20G。 |
| 虚拟内存 | 不低于128G |
| 系统参数 | 1、文件句柄数不低于65535。
2、用户进程数不低于65535。 |
| 类别 | 说明 |
| — | — |
| 防火墙策略 | 1、如果通过公网互通,两端rollsite所部署主机需互相开通出和入防火墙策略。
2、防火墙设备需要支持长连接和需要对连接数无限制。 |
| 外网带宽 | 入通过公网互通,公网带宽不低于20Mb |
| 负载均衡设备 | 1、如果出或入口有负载均衡设备则此设备需要支持grpc或者支持透明转发。
2、fate为双向通讯,需支持出和入方向主动请求。 |
===================================================================
准备一台至少12核CPU、24G内存、1T硬盘(最好SSD)和一个不低于10MB能上互联网的网络。(最好能满足上面的条件,要不然即使安装的没有问题,也可能跑不起来)。
Xshell 、VMware Workstation 16 Pro,这两款软件的下载地址: https://pan.baidu.com/s/1j6j4n4TMlxxvtSFb-r_G5A 提取码:52bv
Centos,下载地址:http://vault.centos.org/7.5.1804/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso
从我给的网盘地址将VMWare软件下载下来安装即可,自行激活,如果有问题问度娘。
安装完成后,点击“编辑→虚拟网络编辑器”,如下图:
查找网关
选择VMnet8,然后点击NAT设置。
在这里找到网关:192.168.65.2 记住这个网关,后面配置网络的时候要用到。
打开vwmare软件,点击创建新的虚拟机
选择“典型(推荐)“,然后选择”下一步“。
选择“下一步“
如下图,选择“Linux“、”Centos7 64位“、然后选择”下一步“
给虚拟机命名,第一台命名为“fate01”,第二台虚拟机命名为“fate02”。
然后选择安装路径,安装在空间较大的盘符。然后选择“下一步”
最大磁盘大小设置为“500G”,选择“将磁盘拆分成多个文件”,然后选择“下一步”.
选择“自定义硬件”,如下图:
然后设置内存为8G,处理器数量设置为1,每个处理器的内核数量设置为4,在“新CD/DCD(IDE)”选项中设置“CentOS-7-x86_64-DVD-1804.iso”文件的路径,完成上面的设置后选择关闭。
然后我们就能看到虚拟机的配置,如果没有问题,则选择”完成”,等待虚拟机安装结束。
出现下图则说明安装完成,选择“开启此虚拟机”,你就可以看到Centos7的安装页面。
选择“Install CentOS 7”,然后按“Enter”键。
出下面如下画面,选择“中文”,在右侧选择“简体中文(中国)”,然后选择“继续”。
选择“键盘”,点击“+”,选择“英语(英国)”,然后点击“添加”,再选择“完成”。
接下来,点击“软件选择”。在左侧选择“最小安装”,在右侧选择“调试工具”和”系统管理工具”。然后选择“完成”。
设置“安装位置”,然后选择“我要配置分区”,选择“完成”。
然后出现如下画面,选择“点这里自动创建他们”
选择“home”,设置期望容量为100GiB,然后点击“+”
添加新的挂载点“/data”,容量为“341.12GiB”,然后点击“添加挂载点”。
然后点击“完成”,选择“接受更改”
点击“网路和主机名”
以太网,选择“打开”,设置主机名为“fate01”,点击“应用”,然后选择“配置”。
点击“IPv4设置”,方法设置为“手动”,点击“Add”,增加IP地址,如下图,ip地址为“192.168.65.161”,另一台的ip地址设置为192.168.65.162,子网掩码和网关相同都,分别设置为“24”和“192.168.65.2”(这个网关我们在前面提到过)。DNS服务器设置为“192.168.65.2”,勾选“需要IPv4地址完成这个连接”。
点击”IPv6设置”,方法选择“忽略”。然后选择“保存”。
然后观察IP设置是否正确,如果没有问题则选择“完成”。
完成上面的设置后,选择“开始安装”。然后设置root密码。
将密码设置为“123456”,然后点击“完成”,等待安装完成。
安装完成后,点击“重启”。
重启之后,出现如下画面,输入“root”,密码“123456”登录root账户。
另一台虚拟机的安装步骤和第一台一样只是名字是“fate02”,IP地址为“192.168.65.162”。
安装完成后,安装Xshell,用Xshell登录。个人认为用xshell执行命令方便一些。
===================================================================
1)修改主机名
在192.168.65.161 root用户下执行:
hostnamectl set-hostname VM_0_1_centos
在192.168.65.162 root用户下执行:
hostnamectl set-hostname VM_0_2_centos
2)加入主机映射
在目标服务器(192.168.65.161 192.168.65.162)root用户下执行:
vi /etc/hosts
添加内容
192.168.0.1 VM_0_1_centos
192.168.0.2 VM_0_2_centos
添加完成后,执行"su root"命令重新登录。
在目标服务器(192.168.65.161 192.168.65.162)root用户下执行:
确认是否已安装selinux
centos系统执行:rpm -qa | grep selinux
ubuntu系统执行:apt list --installed | grep selinux
如果已安装了selinux就执行:setenforce 0
在目标服务器(192.168.65.161 192.168.65.162)root用户下执行:
1)备份CentOS-Base.repo文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
2)修改yum仓库配置
vi /etc/yum.repos.d/CentOS-Base.repo
添加内容:
CentOS-Base.repo
The mirror system uses the connecting IP address of the client and the
update status of each mirror to pick mirrors that are updated to and
geographically close to the client. You should use this for CentOS updates
unless you are manually picking other mirrors.
If the mirrorlist= does not work for you, as a fall back you can try the
remarked out baseurl= line instead.
[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/ r e l e a s e v e r / o s / releasever/os/ releasever/os/basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=os
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/ r e l e a s e v e r / u p d a t e s / releasever/updates/ releasever/updates/basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=updates
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/ r e l e a s e v e r / e x t r a s / releasever/extras/ releasever/extras/basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=extras
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/ r e l e a s e v e r / c e n t o s p l u s / releasever/centosplus/ releasever/centosplus/basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=centosplus
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
3)使新仓库配置生效
yum clean all
yum makecache
在目标服务器(192.168.65.161 192.168.65.162)root用户下执行:
1)清理20-nproc.conf文件
cd /etc/security/limits.d
ls -lrt 20-nproc.conf
存在则:
mv 20-nproc.conf 20-nproc.conf_bak
2)修改limits.conf文件
vi /etc/security/limits.conf
添加下面的信息:
-
soft nofile 65535
-
hard nofile 65535
-
soft nproc 65535
-
hard nproc 65535
重新登陆,ulimit -a查看是否生效
mv /etc/my.cnf /etc/my.cnf_bak
在目标服务器(192.168.65.161 192.168.65.162)root用户下执行
systemctl disable firewalld.service
systemctl stop firewalld.service
systemctl status firewalld.service
在目标服务器(192.168.65.161 192.168.65.162)root用户下执行
groupadd -g 6000 apps
useradd -s /bin/bash -g apps -d /home/app app
passwd app
app初识密码设置为123456
在目标服务器(192.168.65.161 192.168.65.162)root用户下执行
vi /etc/sudoers.d/app
添加内容:
app ALL=(ALL) ALL
app ALL=(ALL) NOPASSWD: ALL
Defaults !env_reset
给文件sudoers文件增加写入权限
chmod u+w /etc/sudoers
编辑 sudoers文件
vi /etc/sudoers
在root ALL=(ALL) ALL下面追加:
root ALL=(ALL) NOPASSWD: ALL
app ALL=(ALL) ALL
app ALL=(ALL) NOPASSWD: ALL
给文件sudoers文件删除写入权限
chmod u-w /etc/sudoers
在目标服务器(192.168.65.161 192.168.65.162)root用户下执行
生产环境使用时,因内存计算需要增加128G虚拟内存,执行前需检查存储空间是否足够。
手工创建,root用户执行:
cd /data
dd if=/dev/zero of=/data/swapfile128G bs=1024 count=134217728
mkswap /data/swapfile128G
swapon /data/swapfile128G
cat /proc/swaps
echo ‘/data/swapfile128G swap swap defaults 0 0’ >> /etc/fstab
目标服务器(192.168.65.161 192.168.65.162)root用户执行
#安装基础依赖包
#centos
yum install -y gcc gcc-c++ make openssl-devel gmp-devel mpfr-devel libmpc-devel libaio numactl autoconf automake
#ubuntu
apt-get install -y gcc g++ make openssl libgmp-dev libmpfr-dev libmpc-dev libaio1 libaio-dev numactl autoconf automake libtool libffi-dev
#如果有报错,需要解决依赖安装源问题。
#安装ansible和进程管理依赖包
#centos
yum install -y ansible
#ubuntu
apt-get install -y ansible
#如果安装有报错同时服务器有外网,没有外网的需要解决yum源不全的问题,执行:
#centos
yum install -y epel-release
#增加一个更全面的第三方的源,然后再重新安装ansible
在目标服务器(192.168.65.161 192.168.65.162)root用户下执行
cd /data
mkdir projects
chown app:apps projects
ls -l
chown -R app /data
1)配置自身免密
在目标服务器(192.168.65.161 192.168.65.162)app用户下执行
在虚拟机VM_0_1_centos 上以app用户身份在home目录下执行
su app
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >>/home/app/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
使用ssh 192.168.65.161命令测试,第一次需要确认yes ,之后应可以不需密码登录为成功。
在VM_0_2_centos 上执行相同步骤配置VM_0_2_centos 的自身免密登录。
2)配置VM_0_1_centos 免密登录VM_0_2_centos
在VM_0_1_centos app用户下执行
scp ~/.ssh/authorized_keys app@192.168.65.162:/home/app/.ssh
输入VM_0_2_centos的app密码
在VM_0_2_centos app用户下执行
cat ~/.ssh/id_rsa.pub >> /home/app/.ssh/authorized_keys
scp ~/.ssh/authorized_keys app@192.168.65.161:/home/app/.ssh
输入VM_0_1_centos 的app密码完成文件传输。
在VM_0_1_centos app用户下执行
ssh 192.168.65.162
应不需要密码即可登录fate02机。到这里我们已经完成环境的配置了。
=================================================================
在目标服务器(192.168.65.161 192.168.65.162)app用户下执行
#虚拟内存,size不低于128G,如不满足需参考3.6章节重新设置
cat /proc/swaps
Filename Type Size Used Priority
/data/swapfile128G file 134217724 384 -1
#文件句柄数,不低于65535,如不满足需参考3.3章节重新设置
ulimit -n
65535
#用户进程数,不低于64000,如不满足需参考3.3章节重新设置
ulimit -u
65535
#检查进程是否有fate进程残留,如有则需要停止服务
ps -ef| grep -i fate
netstat -tlnp | grep 4670
netstat -tlnp | grep 4671
netstat -tlnp | grep 9370
netstat -tlnp | grep 9371
netstat -tlnp | grep 9360
netstat -tlnp | grep 8080
netstat -tlnp | grep 3306
#检查部署目录,如有需先进行mv
ls -ld /data/projects/fate
ls -ld /data/projects/data
ls -ld /data/projects/snmp
#检查supervisord配置文件,如有则需要mv或者删除掉
ls -lrt /data/projects/common/supervisord/supervisord.d/fate-*.conf
在目标服务器(192.168.65.161 具备外网环境)app用户下执行
进入执行节点的/data/projects/目录,执行:
#注意:URL链接有换行,拷贝的时候注意整理成一行
cd /data/projects/
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/ansible_nfate_1.6.0_release-1.0.0.tar.gz
tar xzf ansible_nfate_1.6.0_release-1.0.0.tar.gz
5.3.1 初始化配置文件
cd ansible-nfate-*
#init.sh文件不需要修改,主要是辅助生成一些配置文件
#生产环境加prod参数执行
sh ./tools/init.sh prod
sh ./tools/init.sh prod
clean old config
init environments/prod
init var_files/prod
init project_prod.yml
5.3.2 证书制作配置(可选)(这一步我没有做,官方给的有)
1)证书制作
vi /data/projects/ansible-nfate-1.*/tools/make.sh
#1、自定义安全证书需同时部署两端,只部署一端需要手工处理证书,手工处理部分暂不介绍。
#2、安全证书支持如下部署方式:
1)部署host+guest,host和guest使用安全证书通讯。
2)部署host+exchange+guest,其中host和exchange使用安全证书通讯,guest和exchange普通通讯。
3)部署host+exchange+guest,其中guest和exchange使用安全证书通讯,host和exchange普通通讯。
guest_host=“192.168.65.161” —根据实际IP修改
host_host=“192.168.65.162” —根据实际IP修改
exchange_host=“192.168.65.160” —根据实际IP修改,本示例不部署无需修改
2)执行脚本制作证书
cd tools
sh ./make.sh
在keys/host,guest目录下会产生证书文件。
3)拷贝证书到部署目录
sh cp-keys.sh host guest
证书文件会拷贝到roles/eggroll/files/keys目录
特别说明:
1、目前脚本部署只支持2方设置证书认证。(host&guest、host&exchange、guest&exchange)
5.3.3 修改配置文件
1)修改初始化主机IP
vi /data/projects/ansible-nfate-1.*/environments/prod/hosts
#ansible格式配置文件
[fate] —把需要部署的主机IP填入fate组
192.168.65.161
192.168.65.162
[deploy_check] —把执行ansible的本机IP填入deploy_check组
192.168.65.161
[all:vars]
ansible_connection=ssh
ansible_ssh_port=22 —根据实际情况修改
ansible_ssh_user=app
#ansible_ssh_pass=test —如果未做免密登陆需提供密码
##method: sudo or su
ansible_become_method=sudo
ansible_become_user=root
ansible_become_pass= —各个主机未做免密sudo需填写root密码
2)修改host方参数
注意:默认是不启用安全证书的配置,如果启用安全证书通讯需把server_secure,client_secure,is_secure设置为true,以及is_secure对应的port设置为9371。
#不部署host方则不用修改
#除了nodemanger可以设置多个IP外,其他都是单个IP
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
vi /data/projects/ansible-nfate-1.*/environments/prod/hosts
#ansible格式配置文件
[fate] —把需要部署的主机IP填入fate组
192.168.65.161
192.168.65.162
[deploy_check] —把执行ansible的本机IP填入deploy_check组
192.168.65.161
[all:vars]
ansible_connection=ssh
ansible_ssh_port=22 —根据实际情况修改
ansible_ssh_user=app
#ansible_ssh_pass=test —如果未做免密登陆需提供密码
##method: sudo or su
ansible_become_method=sudo
ansible_become_user=root
ansible_become_pass= —各个主机未做免密sudo需填写root密码
2)修改host方参数
注意:默认是不启用安全证书的配置,如果启用安全证书通讯需把server_secure,client_secure,is_secure设置为true,以及is_secure对应的port设置为9371。
#不部署host方则不用修改
#除了nodemanger可以设置多个IP外,其他都是单个IP
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-m9ac1GVp-1713134605609)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!