Qlib-Server 部署
章节大纲
-
以下是 Qlib-Server 部署文档的中文翻译:
Qlib-Server 部署
简介
要构建一个 Qlib-Server,用户可以选择:
-
Qlib-Server 的一键部署
-
Qlib-Server 的分步部署
一键部署
Qlib-Server 支持一键部署,用户可以选择以下两种方法中的任何一种进行一键部署:
-
使用 docker-compose 部署
-
在 Azure 中部署
使用 docker-compose 一键部署
按照以下步骤使用 docker-compose 部署 Qlib-Server:
-
安装 docker,请参考 Docker 安装。
-
安装 docker-compose,请参考 Docker-compose 安装。
-
运行以下命令来部署 Qlib-Server:
Bashgit clone https://github.com/microsoft/qlib-server cd qlib-server sudo docker-compose -f docker_support/docker-compose.yaml --env-file docker_support/docker-compose.env build sudo docker-compose -f docker_support/docker-compose.yaml --env-file docker_support/docker-compose.env up -d # 使用以下命令查看日志 sudo docker-compose -f docker_support/docker-compose.yaml --env-file docker_support/docker-compose.env logs -f
在 Azure 中一键部署
注意:
-
用户需要拥有一个 Azure 账户才能在 Azure 中部署 Qlib-Server。
按照以下步骤在 Azure 中部署 Qlib-Server:
-
安装 azure-cli,请参考 install-azure-cli。
-
将 Azure 账户信息添加到配置文件
azure_conf.yaml
中:
YAMLsub_id: 你的订阅ID (Your Subscription ID) username: Azure 用户名 (azure user name) password: Azure 密码 (azure password) # 虚拟机所在的资源组 resource_group: 资源组名称 (Resource group name)
-
执行部署脚本:
运行以下命令:
Bashgit clone https://github.com/microsoft/qlib-server cd qlib-server/scripts python azure_manager.py create_qlib_cs_vm \ --qlib_server_name test_server01 \ --qlib_client_names test_client01 \ --admin_username test_user \ --ssh_key_value ~/.ssh/id_rsa.pub \ --size standard_NV6_Promo\ --conf_path azure_conf.yaml
要了解更多参数,请运行以下命令:
Bashpython azure_manager.py create_qlib_cs_vm -- --help
分步部署
用户可以分步部署 Qlib-Server,其过程如下:
-
构建 RabbitMQ
-
构建 Redis
-
构建 NFS
-
构建 Qlib-Server
构建 RabbitMQ
RabbitMQ 是一个通用任务队列,它使 qlib-server 能够将请求处理过程和数据生成过程分开。
注意:
-
用户不必在与 Qlib-Server 相同的服务器上构建 RabbitMQ 实例。
按照以下步骤构建 RabbitMQ:
-
在您的系统上导入 RabbitMQ 签名密钥:
Bashecho 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
-
更新 apt 缓存并在您的系统上安装 RabbitMQ 服务器:
Bashsudo apt-get update sudo apt-get install rabbitmq-server
-
启用 RabbitMQ 服务并启动它:
-
使用 Init –
Bashsudo update-rc.d rabbitmq-server defaults sudo service rabbitmq-server start sudo service rabbitmq-server stop
-
使用 Systemctl -
Bashsudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server sudo systemctl stop rabbitmq-server
-
在 RabbitMQ 中创建管理员用户:
默认情况下,RabbitMQ 会创建一个用户名为 guest,密码为 guest 的用户。用户也可以在 RabbitMQ 中创建管理员用户:
Bashsudo rabbitmqctl add_user admin <你的密码> sudo rabbitmqctl set_user_tags admin administrator sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
-
启用 Web 管理控制台:
RabbitMQ 还提供了一个 Web 管理控制台,用于管理整个 RabbitMQ。要启用 Web 管理控制台,请运行以下命令。Web 管理控制台有助于用户管理 RabbitMQ 服务器。
Bashsudo rabbitmq-plugins enable rabbitmq_management
访问
<你的 rabbitmq 主机>:15672
来管理您的队列。请记住您的 rabbitmq 主机和凭据,它们将用于 qlib-server 配置中。构建 Redis
Qlib-Server 需要 Redis 来存储和读取一些元信息以及线程锁。
注意:
-
用户不必在与 Qlib-Server 相同的服务器上构建 Redis 实例。
按照以下步骤构建 Redis:
-
下载并安装最新版本的 Redis:
Bashmkdir ~/redis cd ~/redis wget http://download.redis.io/releases/redis-5.0.4.tar.gz tar -zxvf redis-5.0.4.tar.gz cd redis-5.0.4 sudo make && make install
-
启动 Redis 服务:
Bash/usr/local/bin/redis-server
Redis 的默认端口是 6379。请记住您的 Redis 主机和端口,它们将用于 qlib-server 配置中。
构建 NFS
在启动 Qlib-Server 之前,需要确保缓存文件目录已挂载(或至少准备好挂载)到客户端,这可以通过配置 nfs 服务来完成。
按照以下步骤构建 NFS:
-
安装 NFS 服务:
Bashsudo apt-get install nfs-kernel-server
-
检查 nfs 端口是否打开:
Bashnetstat -tl
注意:
-
如果看到
tcp 0 0 *:nfs *:* LISTEN
,则表示 nfs 端口已准备好监听。重启服务以确保它可以使用:
Bashsudo /etc/init.d/nfs-kernel-server restart
-
修改
/etc/exports
以允许目录被挂载。要了解 rw 等关键字的作用并进行更改,请参考 nfs 文档。
Bashsudo echo '<你的数据目录> *(rw,sync,no_subtree_check,no_root_squash)'>>/etc/exports
-
使用
showmount
查看已导出的目录。
构建 Qlib-Server
用户可以选择以下两种方法中的任何一种来构建 Qlib-Server:
-
使用源代码构建
-
使用 Dockerfile 构建
使用源代码构建
按照以下步骤使用源代码构建 Qlib-Server:
-
进入 Qlib-Server 目录并运行
python setup.py install
。 -
根据用户的需求和配置修改
config.yaml
。 -
通过运行以下命令开始使用 Qlib-server:
Bashcp config_template.yaml config.yaml edit config.yaml # 请编辑服务器配置。 python main.py -c config.yaml
警告:
-
RabbitMQ 和 Redis 的配置不能在多个 qlib-server 实例之间共享。
例如:
在 config_1.yaml 中,redis_db:1 task_queue: 'task_queue_1' ✔️
在 config_2.yaml 中,redis_db:2 task_queue: 'task_queue_2' ✔️
在 config_1.yaml 中,redis_db:1 task_queue: 'task_queue_1' ❌
在 config_2.yaml 中,redis_db:1 task_queue: 'task_queue_1' ❌
注意:
-
config.yaml
的内容如下:-
provider_uri:Qlib 数据目录
-
flask_server:Flask 服务器的主机/IP,可以是 0.0.0.0 或私有 IP
-
flask_port:数据服务端口,客户端端口必须与之保持一致才能访问服务器
-
queue_host:RabbitMQ 服务器 IP/主机
-
queue_user:RabbitMQ 用户名
-
queue_pwd:RabbitMQ 密码
-
task_queue:Qlib-Server 的任务队列,如果 RabbitMQ 服务于多个 Qlib-Server,此值不能重复
-
message_queue:Qlib-Server 的消息队列,如果 RabbitMQ 服务于多个 Qlib-Server,此值不能重复
-
redis_host:Redis 服务器主机/IP
-
redis_port:Redis 服务器端口
-
redis_task_db:Redis 数据库名称
-
auto_update:目前此参数未使用
-
update_time:目前此参数未使用
-
client_version:Qlib 的版本必须比 client_version 新才能访问 Qlib-Server
-
server_version:Qlib 的版本必须比 server_version 新才能安装或运行 Qlib-Server
-
dataset_cache_dir_name:数据集缓存目录的名称,不建议修改
-
features_cache_dir_name:特征缓存目录的名称,不建议修改
-
logging_level:Qlib-Server 日志的级别控制
-
logging_config:日志配置,不建议修改
-
使用 Dockerfile 构建
按照以下步骤使用 Dockerfile 构建 Qlib-Server:
-
安装 docker,请参考 Docker Installation。
-
通过运行以下命令开始使用 Qlib-Server:
Bashgit clone https://github.com/microsoft/qlib-server cd qlib-server sudo docker build -f docker_support/Dockerfile -t qlib-server \ --build-arg QLIB_DATA=/data/stock_data/qlib_data \ QUEUE_HOST=rabbitmq_server \ QUEUE_USER=rabbitmq_user \ QUEUE_PASS=rebbitmq_password \ MESSAGE_QUEUE=message_queue \ TASK_QUEUE=task_queue \ REDIS_HOST=redis_server \ REDIS_PORT=6379\ REDIS_DB=1 FLASK_SERVER_HOST=127.0.0.1 \ QLIB_CODE=/code\ sudo docker run -p 9710:9710 qlib-server
-