机器学习环境迅速搭建

不想在搞环境上浪费时间精力,先去云服务器买个ubuntu 22,带GPU的,内存最好100g以上。设置下复杂的密码,删掉默认安全组,新建一个机器学习安全组,开启如下常用端口:

ssh 22
streamlit 8xxx
jupyterlab 8888 8889
时序数据库端口
ping端口

别忘了设置出站规则,all/all即可。
然后安装miniconda,去官网wget好一个install.sh,然后chmod +x install.sh,然后重启终端即可。

# 3.8 3.9够用
conda create -n myenv python=3.9
conda activate myenv

以下都知道是干啥的,不赘述。

pip install pandas numpy scikit-learn seaborn matplotlib cufflinks scipy statsmodels tqdm
pip install mplfinance # 绘图
# 多变量rolling numpy_ext
pip install clickhouse-driver

磁盘工具ncdu,以及校准时间:

cd ~ # 自行下载 https://dev.yorhel.nl/ncdu
tar -zxvf ncdu-2.3-linux-x86_64.tar.gz
chmod u+x ncdu && mv ./ncdu /usr/bin

yum install ntp -y
ntpdate ntp.aliyun.com

可以加入cron

0 0 * * 7 ncdu -0o- / | gzip >/home/tom/ncdu_$(date+"%y%m%d").gz
0 0 1 * * rm -rf /home/tom/ncdu_$(date --date='-1 month' + "%y%m")*.gz
0 * * * * /usr/sbin/ntpdate ntp.aliyun.com

jupyter专门搞一下,labnotebook好,lab更新后配置可能不同了,自行查阅。

pip install jupyterlab
jupyter lab --generate-config # 生成如下py
vim ~/.jupyter/jupyter_notebook_config.py
# 旧版本
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False
# 新版本
c.ServerApp.allow_remote_access = 
# 提前from jupyter_server.auth import passwd; passwd()获得hashed pwd
c.ServerApp.password = 'hashed pwd'
c.ServerApp.notebook_dir = # 默认打开当前位置
c.ServerApp.port = 
c.ServerApp.ip = 
jupyter notebook password # 很旧的版本

然后开个tmux,没有自己装,在sessionjupyter lab,暴露到外网,然后就可以外网+密码访问了,很方便。注意,有时候可能由于不同环境的lab的版本不同,导致找不到正确的配置文件,那就手动指定:

jupyter lab --config=/home/ubuntu/.jupyter/jupyter_notebook_config.py

如果多用户,可以把这个配置复制几份并修改,主要是端口,起始目录:


image.png

可以在这里放一个SimHei.ttf,这样画图支持中文。

~/miniconda3/envs/myenv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf

再安装一下臭名昭著但离不开的talib

wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar -xzf ta-lib-0.4.0-src.tar.gz
cd ta-lib/
./configure --prefix=/usr
make
sudo make install
pip install TA-Lib

Windows下这样安装:

# 这里选择版本下载
# https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib 
# pip install .\TA_Lib‑0.4.24‑cp39‑cp39‑win_amd64.whl
# pip install TA-Lib # 好像不需要这个也行

Mac下使用brew install ta-lib,再pip install TA-Lib

CUDA

看下系统版本,不看也行:

lsb_release -a

看下推荐的显卡驱动:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
ubuntu-drivers devices

看见recommended那一行,就装那个吧。

sudo apt install nvidia-driver-530

另:lspci |grep -i vga检查型号,根据型号去https://www.nvidia.cn/Download/index.aspx?lang=cn选择下载。
装完后看看:

nvidia-smi
nvcc --version

也能看到CUDA版本,但据说是一个运行环境。还得专门安装,可以到官网一步步选一下。这是官网:

https://developer.nvidia.com/cuda-downloads

然后:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda-repo-ubuntu2204-12-1-local_12.1.1-530.30.02-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-1-local_12.1.1-530.30.02-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

看看版本:

nvcc --version 
sudo apt install nvidia-cuda-toolkit # 需要安装5G左右的包,可放弃

CK

可以看官网:

# https://clickhouse.com/docs/zh/getting-started/install
sudo apt-get install -y apt-transport-https ca-certificates dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754

echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \
    /etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client
# 这里会让输入默认密码,强一点
sudo service clickhouse-server start
clickhouse-client # or "clickhouse-client --password" if you've set up a password.

可以开启SQL管理用户和权限:

sudo -s
cd /etc/clickhouse-server
vim users.xml
...
# 定位并修改并添加成这样
<access_management>1</access_management>
<named_collection_control>1</named_collection_control>
<show_named_collections>1</show_named_collections>
<show_named_collections_secrets>1</show_named_collections_secrets>
# 可能是只读的,通过chmod u+w user.xml修改

添加一个管理员账号,不添加的话就直接用default账号来管理:

CREATE USER clickhouse_admin IDENTIFIED BY 'asdfadsf';
GRANT ALL ON *.* TO clickhouse_admin WITH GRANT OPTION;

后面就可以用管理员账号来添加比如一个只读用户:

CREATE USER read_only_user IDENTIFIED BY 'tytytytyty';
GRANT SELECT ON mydb.* TO read_only_user;

正常使用,如果涉及备份恢复,使用如下:

clickhouse-client --host 内网IP --password abcabc --query "SELECT * FROM olddb.oldtable FORMAT Native" > oldtable.native
clickhouse-client --password cbacba --query "INSERT INTO newdb.newtable FORMAT Native" < oldtable.native
# Native格式是CK自带的,可能速度快,但文件比较大。

示例建表语句:

CREATE TABLE real.tick
(
    stockcode String,
    trade_time DateTime64(9), # 9纳秒, 9微妙
    last Int64,
    volume Int64,
    turnover Int64,
    side Int64,
    change_rate Float64,
)
ENGINE = MergeTree
PARTITION BY stockcode
ORDER BY trade_time

CK的ReplacingMergeTree感觉没啥用,因为无法及时去重,需要每次查询的时候加入final。

小坑

CK的分钟查询是%i,而不是%M
如果CK占空间太多,

sudo journalctl --vacuum-size=500M # 保留最近500M 系统systemd日志
journalctl -f # 查看日志,发现CK不停写入
systemctl restart clickhouse-server # 日志正常

如下查询空间,也可以去掉partition查询。

SELECT database, table, partition, formatReadableSize(sum(bytes)) AS size
FROM system.parts
WHERE active = 1
GROUP BY database, table, partition
ORDER BY sum(bytes) DESC;

MySQL

还需要数据库来保存交易等信息。

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
sudo mysql_secure_installation # 根据提示来,基本一路yes

# 登陆
sudo mysql
SELECT user,host,authentication_string,plugin FROM mysql.user WHERE user='root'; # 正常会看到auth_socket
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'yourpassword';
FLUSH PRIVILEGES;
# 这样认证方式就改成了mysql_native_password了,密码也改了
# 退出后重新登陆
sudo mysql -u root -p

接下来修改配置:

vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 找到并修改端口
# bind-address = 0.0.0.0

保存后sudo systemctl restart mysql
平时不用root登录操作,新建一个吧。

CREATE USER 'newuser'@'%' IDENTIFIED BY 'newpassword';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' WITH GRANT OPTION;
# 可以把'%'换成特定的IP地址,限制登录IP

记得防火墙打开,够玩了。

MQ

有时候需要MQ缓冲一下tick数据,先安装erlang

https://www.erlang.org/downloads

安装rabbitmq

choco install rabbitmq

去开始菜单,直接点启动有点问题,没解决,于是去sbin目录下:

rabbitmq-server.bat start

接着去管理页面,端口15672修改admin,建立exchangequeuebinding等等,不赘述。Ubuntu参考这个,麻烦但可用:

# 一步步来
# https://www.rabbitmq.com/install-debian.html#apt-quick-start-cloudsmith
sudo rabbitmq-plugins enable rabbitmq_management
rabbitmqctl add_user full_access s3crEt
rabbitmqctl set_user_tags full_access administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

Redis

有时候需要轻量级原子性的全局变量,Redis就很方便,避免在Windows下安装吧。官网就行:

# 当然也有绿色解压包那种安装,但那种安装还需要配置服务,也费事
# https://redis.io/docs/getting-started/installation/install-redis-on-linux/

GUI管理端使用:

https://github.com/qishibo/AnotherRedisDesktopManager

至于配置,基本都是修改redis.conf并重启,密码要强大一点,端口改掉。

PyTorch

接下来安装PyTorch,官网选择:

https://pytorch.org/get-started/locally/

官网有时候没有,比如cuda12,那就pip试试:

pip3 install torch torchvision torchaudio

不保证可用,不行的话就反复折腾,比如降cuda11.8

CatBoost

安装比较简单pip install catboost,就能支持GPU,略。但官网CatBoost的batch trainset_baseline感觉有点问题,修改如下:

model_list = []
for df_train in tqdm(generator):         
    batch = Pool(data=df_train.drop(columns=['label_col']),
                 label=df_train['label_col'],
                 cat_features=None,
                 embedding_features=None,) 
    model = CatBoostClassifier(n_estimators=hyper_params['n_estimators'],
                               thread_count=8,
                               task_type='GPU',
                               devices='0:1',
                               learning_rate=hyper_params['learning_rate'],
                               depth=hyper_params['depth'],
                               l2_leaf_reg=hyper_params['l2_leaf_reg'],
                               loss_function=loss_function,
                               auto_class_weights='SqrtBalanced', # SqrtBalanced(保守), Balanced(激进)
                               grow_policy='SymmetricTree', # 'SymmetricTree', 'Depthwise', 'Lossguide'
                              )
    
    if len(model_list) > 0:
        # 多分类必须明确 prediction_type='RawFormulaVal', 二分类一定要用  'Class'!
        batch.set_baseline(model_list[-1].predict(batch,
                                                  prediction_type='Class'))
    model.fit(X=batch,
              logging_level='Silent')

LGBM

方法1

LGBM的GPU版本安装稍微啰嗦:

git clone --recursive https://github.com/microsoft/LightGBM
cd LightGBM
mkdir build
cd build
cmake -DUSE_GPU=1 ..
# if you have installed NVIDIA CUDA to a customized location, you should specify paths to OpenCL headers and library like the following:
# cmake -DUSE_GPU=1 -DOpenCL_LIBRARY=/usr/local/cuda/lib64/libOpenCL.so -DOpenCL_INCLUDE_DIR=/usr/local/cuda/include/ ..
make -j4

第一步可能各种卡,掉线:

cd LightGBM
git submodule update --init --recursive

安装pip:

pip install lightgbm
# 官网还推荐conda
conda install -c conda-forge lightgbm

会对numpy进行版本修改,可能影响到talib等包的使用,有点烦人。

方法2

于是换了一个安装方法,参考这里:

# 听说GPU版本比CUDA版本稳定
https://github.com/Microsoft/LightGBM/tree/master/python-package#build-gpu-version

首先看看几个依赖要求:

# 要求>=2.28
ldd --version
# cmake --version
sudo snap install cmake --classic # 这个可以
https://cmake.org/download/ # 官网有点啰嗦,自行尝试
# 安装libboost  system filesystem
sudo apt-get update
sudo apt-get install libboost-all-dev

好了之后,安装:

pip install lightgbm --install-option=--gpu
# 或者指定dir
pip install lightgbm --install-option=--gpu --install-option="--opencl-include-dir=/usr/local/cuda/include/" --install-option="--opencl-library=/usr/local/cuda/lib64/libOpenCL.so"

安装完成后,在import的时候报错'GLIBCXX_3.4.30' not found,主要尝试了这里的方法:

https://stackoverflow.com/questions/72540359/glibcxx-3-4-30-not-found-for-librosa-in-conda-virtual-environment-after-tryin

# GLIBCXX版本低 不管用
sudo apt-get update
sudo apt-get upgrade gcc

# Ubuntu 22.04不管用
conda install -c conda-forge gcc=12.1.0 

# 不管用
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4.30
strings /home/ubuntu/miniconda3/envs/ts/bin/../lib/libstdc++.so.6 | grep GLIBCXX_3.4.30
export LD_LIBRARY_PATH=/home/ubuntu/miniconda3/envs/ts/bin/../lib:$LD_LIBRARY_PATH

# 管用了
conda install -c anaconda scipy==1.9.1 

具体原因是个迷,但我不想折腾了。

有了这三够玩的了

继续测试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容