SageMath and Python on Jupyter

SageMath 是一个开源免费的数学软件,综合了大量的开源数学软件,用Python当做软件基本语言。因此,可以在使用Python的过程中,把SageMath当做一个额外功能模块来用。当然,如果是编程来使用,则这样用就够了。不过,SageMath和Python合起来还可以当做“计算器”来使用。这个时候,就最好有一个图形界面,并且能够把结果也在必要的时候做图形呈现,最好还能够分享。

Jupyter就是这样一个界面环境。

有两个方法可以通过Jupyter来集成使用SageMath和Python。

  1. 第一,安装完成SageMath之后,在SageMath界面下打开Jupyter。例如,$./SageMath/sage -n jupyter。前面的SageMath是SageMath的安装目录。SageMath自带了Jupyter,因此,不用重新安装Jupyter。
  2. 第二,单独安装Jupyter和SageMath。在Jupyter界面下打开SageMath。为了能够让Jupyter知道SageMath在哪里,我们需要安装一个Jupyter拓展包,通过下面的命令:$sudo jupyter kernelspec install SageMath/local/share/jupyter/kernels/sagemath。其中的SageMath是SageMath的安装目录。之后,就可以通过运行jupyter notebook来实现通过Jupyter来使用SageMath和Python了。
  3. 如果你还想在任意的目录下都能够通过运行jupyter notebook来实现通过Jupyter来使用SageMath和Python,则还需要修改路径设定,让系统知道SageMath的sage文件和bin文件存在哪里。例如,通过在.bashrc中增加一行:export SAGE_ROOT=SageMath。其中SageMath是SageMath的安装目录,例如/opt/SageMath。以及添加路径,例如 export Path=SageMath:$PATH 来实现。

    注意,这是linux系统,Python是默认系统性安装的。如果其他系统,可能还需要在Jupyter下配置Python。

    安装一个可以在网上完成这个计算——通过Jupyter来集成使用SageMath和Python——的服务器。甚至可以考虑建一个包含机器学习功能的服务器,例如通过anaconda(可以连接上TensorFlow或者其他机器学习包)。如果使用anaconda则可以采用清华anaconda软件仓库

    如果希望其他用户也能够使用这个带了SageMath内核的jupyter notebook,则还需要安装JupyterHub。

“项目学习和概念地图用于机器学习”学习小组

有一些研究工作,例如文章的监督分类和非监督分类、概念和概念之间关系的自然语言处理,需要尝试一些新的分析算法。受到最近照片分类的工作的启发,打算用机器学习来试试。这个学习小组定位在理解了的工具的层次,旨在自觉自发地创造性地运用机器学习来处理自己工作中的问题。

学习材料整理,见小组目前的成员的博客,以及本网站上的相应论坛

把学习小组的要求提一下。小组成员分成两种类型:严肃的学习者和贡献者、感兴趣的人。对于感兴趣的人,我们不提非常明确的要求,仅希望积极参与讨论。学习者和贡献者需要做报告,报告之前需要提前阅读(听课)和准备。准备工作需要做好总结(图形化,推荐概念地图、思维导图):整体思路、重点问题和项目的联系(也就是应用的问题)。所准备出来的材料最好事先先传到小组的网站。

希望有兴趣的严肃的学习者来参与。

编程的学习

必要性:当你对世界的运行有一个猜想或者理解的时候,你想检验一下;当你有这个世界运行的数据,你想发掘一下;当你有一个问题没法解析求解,你想大概看一下,你都需要运用计算机,而且通常是自己编程,来解决问题。

这个时候,最重要的是学会像计算机语言一样思考问题。具体来说,反映在面向过程编程上就是:知道流程的每一步,程序–想象成你自己–会面对什么数据什么情况,下一步做什么,尤其是所有流程控制的关键点。反映在面向对象的编程上面,就是要把问题转化成为对象和对对象的操作来解决。要搞清楚什么时候创建对象,什么时候改变对象的状态,用户做什么会激活这些创造对象和改变对象状态的事情。

这个像计算机一样思考回到传统的编程的时候你熟悉的语言就是画出流程图,以及搞清楚对象的抽象接口。

具体到语言的学习,不同的语言有不同的优势。可以考虑利用C语言来做科学计算和核心计算分析模块,利用Python来做字符处理、组装程序,用R语言来做统计分析,利用shell语言来做组装程序、输入输出和增加程序灵活性的控制。了解大量的程序包,并且熟悉其中的一部分。例如,所有的矩阵运算可以考虑lapack,傅立叶分解可以利用FFTW,一般积分插值等数值计算可以用gsl等等。

算法,语言本身,只要不是开创,是很简单的事情,通过编写一两个程序,也就学会了。进一步,我们不是真的计算机科学家,因此,算法方面,大多数时候,应该站在巨人的肩膀上,用其他人开发好的程序库来实现。语言本身大概包含程序的基本结构、数据类型、流程控制,库函数。前面的三个几个小时编一两个程序就能学会。后面的,用到再学,先大概浏览知道有哪些功能即可。

学会像计算机一样思考,了解语言和程序包之后,就需要开始写程序。写程序需要有良好的习惯和风格,例如变量和函数的名称要有意义,利用好注释,本功能拆分成尽量独立和能重用的子程序。缩进、大小写尽量保持一致。

当好科学家不是一件容易的事情,你希望各种理念和工具上,都走在世界的前面。

安装计算用ubuntu的步骤

1、安装ubuntu桌面版或者服务器版。配置IP地址、机器名、域名等。配置sudo用户帐号。
2、安装计算机硬件驱动,有可能需要ubuntu additional driver,如果遇到broadcom的网卡,还需要特殊处理。通常ubuntu已经为各种硬件做好了准备。
3、调整软件源。在我这里mirror.neu.edu.cn不错,也可以在图形环境下自动选择最快的。
4、自动安装openssh server, chromium或者chrome, p7zip-full, latex (texlive手动安装,否则ctex不能使用), office, filezilla, gnuplot, valgrind, grace, r, sprng(sprng2能够自动安装)。必要的话,复制字体文件到~/.fonts/目录下。
5、自动安装gcc, g++, gfortran, cmake, python-numpy, python-scipy, python-matplotlib, python-setuptools, python-pip, build essential package。
6、手动安装openmpi, mpich (mpiexec)
7、手动安装lapack (lapack+atlas+blas), petsc, slepc, fftw, networksX, igraph, xmds2, gsl

手动安装mpich:1)下载和解压mpich。2)进入mpich的解压后目录,mkdir Build,进入Build,../configure -enable-shared 2>&1 | tee c.txt,make 2>&1 | tee m.txt,sudo make install 2>&1 | tee mi.txt。3)检验mpiexec是否正确运行。有可能需要加入 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib。

手动安装hydra:跳过,暂时不用。mpich已经默认提供了这个任务管理器。

手动安装openmpi:1)下载和解压openmpi。2)进入openmpi的解压后目录,mkdir Build,进入Build,../configure –prefix=/opt/openmpi, make -j 8 all, sudo make install。3)检验mpiexec是否正确运行(例如运行, /opt/openmpi/bin/mpiexec -n 3 hostname)。

手动安装atlas+lapack: 1)下载和解压atlas,下载lapack。2)进入atlas的解压后目录,mkdir Biuld,进入Build,../configure -b 64 -D c -DPentiumCPS=3400 –prefix=/opt/atlas –with-netlib-lapack-tarfile=/home/…/lapack-3.5.0.tgz –shared。3) make build, make check,make ptcheck,make time,sudo make install

在安装atlas的时候,可能需要关掉CPU节能模式。这个可以采用修改grub的形式,或者修改/etc/init.d/cpufrequtils 文件。

手动安装igraph:0) sudo apt-get install libxml2-dev(igraph依赖这个包) 1)C-igraph,下载和解压igraph。进入igraph的解压后目录, ./configure –prefix=/opt/igraph, make, sudo make install, 然后需要调整一下igraph的目录,需要添加/opt/igraph/lib到LD_LIBRARY_PATH:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/igraph/lib。
2)R-igraph,sudo R,然后在R内部运行install.packages(“igraph”)。3)Python-igraph,下载python-igraph,解压,进入目录,修改setup.py文件中igraph的路径(/opt/igraph/include, /opt/igraph/lib),python setup.py build,然后运行 sudo python setup.py install。

手动安装networkX:sudo pip install networkx或者下载networkX包,然后easy_install networkx…egg。

手动安装torque:下载,解压,进入目录,./configure, make, sudo make install (其中,可能需要安装libssl-dev包,自动安装这个包即可)。如果出现动态库的错误。需要建立一个/etc/ld.so.conf.d/torque.conf的文件,其内容为/usr/local/lib(torque库文件的位置),然后运行ldconfig。安装torque就完成了。下面是配置torque。

配置torque:(没搞定)

手动安装petsc:下载,解压,进入目录,设定参数 export PETSC_ARCH=linux-gnu,然后./configure –with-blas-lapack-dir=/opt/atlas/lib –with-scalar-type=complex –with-clanguage=c –with-fortran-kernels=generic –download-scalapack=1 –download-superlu=1 –download-plapack=1 –with-debugging=1 –download-fftw=/home/jinshanw/soft/resource/fftw-3.3.3.tar.gz –download-blacs=1 –prefix=/opt/petsc –with-mpi-dir=/opt/mpich。其中fftw提供了文件包,–with-debugging=1可以改成0,然后make all test, sudo make install。

手动安装slepc:下载,解压,进入目录,设定参数 export PETSC_DIR=/opt/petsc(petsc安装目录), unset PETSC_ARCH,然后./configure –prefix=/opt/slepc,make all test, sudo make install。注意,configure完成之后的每一步系统都会给出下一步的提示。随着版本的不同,上面的命令可能会失效,需要按照提示来操作。

手动安装gsl:下载,解压,进入目录,./configure –prefix=/opt/gsl (默认路径可能与系统安装的冲突)。make all, sudo make install。

手动安装sprng5:下载,解压,进入目录,./configure –prefix=/opt/sprng5 (默认路径可能与系统安装的冲突)。make all, sudo make install。sprng5的语言是C++。如果你需要在C语言中调用sprng5,后期需要用g++来link。

手动安装MKL(Intel数学核):下载、解压、进入目录,运行sudo ./install.sh,按照提示设置安装路径。使用的时候,要注意编译过程的链接方式(lib,include),可以参考Intel® Math Kernel Library Link Line Advisor

写程序的一些经验

首先,最初的习惯和最初的老师很重要。一定要自己写过几万行以上程序的老师才能有好的习惯。如果没有好的老师,那么浏览一下编程风格之类的书籍或者网页(google)是很有益处的。

其次,从带学生开始,才知道原来连如何写程序也是要教的。

下面,我把几条经验写在这里,供以后的学生参考。

第零、Linux可以运行脚本,主程序实现最核心的功能即可,其他调参数、记录结果等等,都可以通过脚本实现。更方便,程序也更容易写。
第一、编一个程序,运行的时候实现所有的参数(接受参数、安排流程是主程序的主要功能),而不是给每一个参数编一个程序;
第二、把每一项子功能定义好,写成子程序。考虑的出发点是:凡是重复很多次的代码一定要用子程序(除非特别必要的时候为了可读性多写几次);凡是 可以使得流程更加容易读和理解的,用子程序,把细节藏起来;凡是其它的程序中可能用得着的模块,写成子程序。
第三、写文件的输出在Linux下可以用运行时候的重定向实现,直接打印即可,不用写文件。
第四、一定要有很详细的注释,假定两个月以后你需要来读程序,你得看得懂。假定有你的师弟师妹需要参考你的程序,他们得看得懂。

关于风格:大括号写在子程序(或者for循环,if语句)名称后面,还是下一行;对齐方式;注释详细到什么程度;通常函数几个返回值;子程序和变量如何命名(不能太短,也不能特别特别长),这些问题没有一个标准,但是要形成一个惯例,而且这个惯例最好与主流的惯例差不多。

其它的,我请编外补充一下。