/images/avatar.png

macos cmake-gui

之前使用命令行安装:

1
brew install cmake

安装的是最新版,安装速度也很快,但是这个cmake是不带 GUI的,用着不习惯,就又一个命令行给卸载了。

1
brew uninstall cmake

然后手动安装cmake,去官网下载。

网址:https://cmake.org/download/

https://cdn.jsdelivr.net/gh/JoshuaChou2018/oss@main/uPic/730180-20200529135817483-1173478203-20221230133628532.1V6hYj.png

下载框线这个,可能因为时间段问题,晚上下载只有几kb/s,然后就放弃了,早上下载几MB/s。

下载完成后直接双击安装。双击会出现这个界面,直接将cmake图标拖到右边Application文件夹中,这样就可以在launcher中找到cmake了。

https://cdn.jsdelivr.net/gh/JoshuaChou2018/oss@main/uPic/730180-20200529140038097-1063038490-20221230133638235.qaNBcu.png

这个样可以从laucher中找到cmake并使用,但是命令行还是查不到cmake,也不能使用cmake。

安装完成之后,使用以下指令创建/usr/local/bin下 CMake 的软链接。

1
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install

查看版本:

1
cmake --version

Ref: https://www.cnblogs.com/juluwangshier/p/12987258.html

pycharm增加运行时内存

1,Help -> Find Action -> (输入 “VM”) -> (点击)“Edit Custom VM options”

2,Pycharm会在编辑器中打开适当的vmoptions文件(pycharm.vmoptions或pycharm64.options)。

3,将**-Xms**属性的值修改为你想要的结果,然后保存

1
-Xmx750m 增加到 -Xmx1024m

4,重启Pycharm

[转载] 谷歌开源计算框架JAX”

https://cdn.jsdelivr.net/gh/JoshuaChou2018/oss@main/uPic/13c5ca4ab1d74eabb4de40ba585536a9.v8Ccmw.png

相信大家对numpy, Tensorflow, Pytorch已经极其熟悉,不过,你知道JAX吗? JAX发布之后,有网友进行了测试,发现,使用JAX,Numpy运算可以快三十多倍!

下面是使用Numpy的运行情况:

1
2
3
import numpy as np  # 使用标准numpy,运算将在CPU上执行。
x = np.random.random([5000, 5000]).astype(np.float32)
%timeit np.matmul(x, x)

运行结果:

1
2
1 loop, best of 3: 3.9 s per loop 而下面是使用JAX的Numpy的情况:
import jax.numpy as np # 使用"JAX版"的numpy from jax import random # 注意JAX下随机数API有所不同 x = random.uniform(random.PRNGKey(0), [5000, 5000]) %timeit np.matmul(x, x)

运行情况:

1
1 loop, best of 3: 109 ms per loop

我们可以发现,使用原始numpy,运行时间大概为3.9s,而使用JAX的numpy,运行时间仅仅只有0.109s,速度上直接提升了三十多倍!

[转载] 同态加密:实现数据的“可算不可见”

同态加密是密码学领域自1978年以来的经典难题,也是实现数据隐私计算的关键技术,在云计算、区块链、隐私计算等领域均存在着广泛的应用需求和一些可行的应用方案。

本文首先介绍同态加密的基本概念、研究进展以及标准化进展,然后对主流的乘法/加法半同态加密算法和全同态加密算法及其工程实现情况进行概述,最后对同态加密在各领域的应用场景进行分析。

一、同态加密概述

1、基本概念

同态加密(Homomorphic Encryption, HE)是指满足密文同态运算性质的加密算法,即数据经过同态加密之后,对密文进行特定的计算,得到的密文计算结果在进行对应的同态解密后的明文等同于对明文数据直接进行相同的计算,实现数据的“可算不可见”。同态加密的实现效果如图1所示。https://cdn.jsdelivr.net/gh/JoshuaChou2018/oss@main/uPic/1595586273.N8LctX.jpeg

图1:同态加密原理

如果一种同态加密算法支持对密文进行任意形式的计算,则称其为全同态加密(Fully Homomorphic Encryption, FHE);如果支持对密文进行部分形式的计算,例如仅支持加法、仅支持乘法或支持有限次加法和乘法,则称其为半同态加密或部分同态加密,英文简称为SWHE(Somewhat Homomorphic Encryption)或PHE(Partially Homomorphic Encryption)。一般而言,由于任意计算均可通过加法和乘法构造,若加密算法同时满足加法同态性和乘法同态性,则可称其满足全同态性。

目前,同态加密算法已在区块链、联邦学习等存在数据隐私计算需求的场景实现了落地应用。由于全同态加密仍处于方案探索阶段,现有算法存在运行效率低、密钥过大和密文爆炸等性能问题,在性能方面距离可行工程应用还存在一定的距离。因此,实际应用中的同态加密算法多选取半同态加密(如加法同态),用于在特定应用场景中实现有限的同态计算功能。

2、研究进展

1978年,Rivest、Adleman(“RSA”中的“R”和“A”)和Dertouzos提出了全同态加密的构想[1],自此成为了密码学研究领域的一个公开难题。目前,同态加密算法主要分为半同态加密和全同态加密两大类。半同态加密主要包括以RSA算法[2]和ElGamal算法[3]为代表的乘法同态加密、以Paillier算法[4]为代表的加法同态加密以及以Boneh-Goh-Nissim方案[5]为代表的有限次数全同态加密;全同态加密算法主要包括以Gentry方案[6][7]为代表的第一代方案、以BGV方案[8]和BFV方案[9][10]为代表的第二代方案、以GSW方案[11]为代表的第三代方案以及支持浮点数近似计算的CKKS方案[12]等等。上述方案及其基本特性和应用情况总览如表1所示。

表1:各类同态加密算法

*类型* *算法* *时间* *说明* *实际应用*
半同态加密 乘法同态 RSA算法 1977 非随机化加密,具有乘法同态性的原始算法面临选择明文攻击 在非同态场景中应用广泛
ElGamal算法 1985 随机化加密 DSS数字签名标准基于ElGamal数字签名算法的变体
加法同态 Paillier算法 1999 应用最为成熟 联邦学习
有限次数全同态 Boneh-Goh-Nissim方案 2005 仅支持1次乘法同态运算 /
全同态加密 Gentry方案 2009 第一代全同态加密,性能较差 /
BGV方案 2012 第二代全同态加密,性能相对较好 IBM HElib开源库
BFV方案 2012 第二代全同态加密,与BGV类似 微软SEAL开源库
GSW方案 2013 第三代全同态加密,基于近似特征向量 TFHE开源库
CKKS方案 2017 可实现浮点数近似计算,适合机器学习建模场景 HElib和SEAL

3、标准化进展

(1)半同态加密标准化