章节大纲

  • 以下是 Qlib-Server 部署文档的中文翻译:


    Qlib-Server 部署

    简介

    要构建一个 Qlib-Server,用户可以选择:

    • Qlib-Server 的一键部署

    • Qlib-Server 的分步部署


    一键部署

    Qlib-Server 支持一键部署,用户可以选择以下两种方法中的任何一种进行一键部署:

    • 使用 docker-compose 部署

    • Azure 中部署

    使用 docker-compose 一键部署

    按照以下步骤使用 docker-compose 部署 Qlib-Server

    1. 安装 docker,请参考 Docker 安装。

    2. 安装 docker-compose,请参考 Docker-compose 安装。

    3. 运行以下命令来部署 Qlib-Server

    Bash
    git 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

    1. 安装 azure-cli,请参考 install-azure-cli。

    2. 将 Azure 账户信息添加到配置文件 azure_conf.yaml

    YAML
    sub_id: 你的订阅ID (Your Subscription ID)
    username: Azure 用户名 (azure user name)
    password: Azure 密码 (azure password)
    # 虚拟机所在的资源组
    resource_group: 资源组名称 (Resource group name)
    
    1. 执行部署脚本:

      运行以下命令:

    Bash
    git 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
    

    要了解更多参数,请运行以下命令:

    Bash
    python azure_manager.py create_qlib_cs_vm -- --help
    

    分步部署

    用户可以分步部署 Qlib-Server,其过程如下:

    • 构建 RabbitMQ

    • 构建 Redis

    • 构建 NFS

    • 构建 Qlib-Server

    构建 RabbitMQ

    RabbitMQ 是一个通用任务队列,它使 qlib-server 能够将请求处理过程和数据生成过程分开。

    注意

    • 用户不必在与 Qlib-Server 相同的服务器上构建 RabbitMQ 实例。

    按照以下步骤构建 RabbitMQ

    1. 在您的系统上导入 RabbitMQ 签名密钥

    Bash
    echo '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 -
    
    1. 更新 apt 缓存并在您的系统上安装 RabbitMQ 服务器

    Bash
    sudo apt-get update
    sudo apt-get install rabbitmq-server
    
    1. 启用 RabbitMQ 服务并启动它

    • 使用 Init

    Bash
    sudo update-rc.d rabbitmq-server defaults
    sudo service rabbitmq-server start
    sudo service rabbitmq-server stop
    
    • 使用 Systemctl -

    Bash
    sudo systemctl enable rabbitmq-server
    sudo systemctl start rabbitmq-server
    sudo systemctl stop rabbitmq-server
    
    1. 在 RabbitMQ 中创建管理员用户:

      默认情况下,RabbitMQ 会创建一个用户名为 guest,密码为 guest 的用户。用户也可以在 RabbitMQ 中创建管理员用户:

    Bash
    sudo rabbitmqctl add_user admin <你的密码>
    sudo rabbitmqctl set_user_tags admin administrator
    sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
    
    1. 启用 Web 管理控制台:

      RabbitMQ 还提供了一个 Web 管理控制台,用于管理整个 RabbitMQ。要启用 Web 管理控制台,请运行以下命令。Web 管理控制台有助于用户管理 RabbitMQ 服务器。

    Bash
    sudo rabbitmq-plugins enable rabbitmq_management
    

    访问 <你的 rabbitmq 主机>:15672 来管理您的队列。请记住您的 rabbitmq 主机和凭据,它们将用于 qlib-server 配置中。

    构建 Redis

    Qlib-Server 需要 Redis 来存储和读取一些元信息以及线程锁。

    注意

    • 用户不必在与 Qlib-Server 相同的服务器上构建 Redis 实例。

    按照以下步骤构建 Redis

    1. 下载并安装最新版本的 Redis

    Bash
    mkdir ~/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
    
    1. 启动 Redis 服务

    Bash
    /usr/local/bin/redis-server
    

    Redis 的默认端口是 6379。请记住您的 Redis 主机和端口,它们将用于 qlib-server 配置中。

    构建 NFS

    在启动 Qlib-Server 之前,需要确保缓存文件目录已挂载(或至少准备好挂载)到客户端,这可以通过配置 nfs 服务来完成。

    按照以下步骤构建 NFS

    1. 安装 NFS 服务

    Bash
    sudo apt-get install nfs-kernel-server
    
    1. 检查 nfs 端口是否打开

    Bash
    netstat -tl
    

    注意

    • 如果看到 tcp 0 0 *:nfs *:* LISTEN,则表示 nfs 端口已准备好监听。重启服务以确保它可以使用:

    Bash
    sudo /etc/init.d/nfs-kernel-server restart
    
    1. 修改 /etc/exports 以允许目录被挂载。要了解 rw 等关键字的作用并进行更改,请参考 nfs 文档。

    Bash
    sudo echo '<你的数据目录> *(rw,sync,no_subtree_check,no_root_squash)'>>/etc/exports
    
    1. 使用 showmount 查看已导出的目录

    构建 Qlib-Server

    用户可以选择以下两种方法中的任何一种来构建 Qlib-Server

    • 使用源代码构建

    • 使用 Dockerfile 构建

    使用源代码构建

    按照以下步骤使用源代码构建 Qlib-Server

    1. 进入 Qlib-Server 目录并运行 python setup.py install

    2. 根据用户的需求和配置修改 config.yaml

    3. 通过运行以下命令开始使用 Qlib-server

    Bash
    cp 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_versionQlib 的版本必须比 client_version 新才能访问 Qlib-Server

      • server_versionQlib 的版本必须比 server_version 新才能安装或运行 Qlib-Server

      • dataset_cache_dir_name:数据集缓存目录的名称,不建议修改

      • features_cache_dir_name:特征缓存目录的名称,不建议修改

      • logging_level:Qlib-Server 日志的级别控制

      • logging_config:日志配置,不建议修改

    使用 Dockerfile 构建

    按照以下步骤使用 Dockerfile 构建 Qlib-Server

    1. 安装 docker,请参考 Docker Installation。

    2. 通过运行以下命令开始使用 Qlib-Server

    Bash
    git 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