本文档主要介绍 MegaWise Docker 的安装和配置等操作。
组件 | 配置 |
---|---|
GPU | NVIDIA Pascal 或以上 |
CPU | Intel CPU Sandy Bridge 或以上 |
内存 | 16 GB 或以上 |
硬盘 | 1 TB 或以上 |
组件 | 版本 |
---|---|
操作系统 | Ubuntu 16.04 或以上 |
NVIDIA 驱动 | 410 或以上,推荐最新版本 |
Docker | 19.03 或以上 |
NVIDIA Container Toolkit | 1.0.5-1 或以上 |
-
禁用 Nouveau 驱动。
安装 NVIDIA 驱动之前必须先禁用 Nouveau 驱动。请通过以下命令检查是否已启用 Nouveau 驱动:
$ lsmod | grep nouveau
该命令执行后,如果终端打印了相关信息则说明 Nouveau 驱动已经被启用。如果启用了 Nouveau 驱动,则需执行后续的步骤将其禁用,否则请跳过以下步骤,开始安装 NVIDIA 驱动。
-
在以下路径创建文件
/etc/modprobe.d/blacklist-nouveau.conf
并在文件中写入如下内容:blacklist nouveau options nouveau modeset=0
-
执行以下命令并重启系统:
$ sudo update-initramfs -u $ sudo reboot
-
确认禁用 Nouveau 驱动,执行该命令将不输出任何信息。
$ lsmod | grep nouveau
如果系统中未安装 lsmod 工具,则先安装 lsmod, 然后执行上述命令。
$ sudo apt-get install lsmod
-
-
从 NVIDIA官方驱动下载链接 下载最新版本的驱动安装文件。
注意:安装或更新 NVIDIA 驱动存在一定风险,有可能导致显示系统崩溃。在安装或更新 NVIDIA 驱动前,请在NVIDIA官方驱动下载链接检查您的显卡是否适用最新版本的 NVIDIA 驱动。
-
安装NVIDIA驱动需要先关闭图形界面, 按 Ctrl+Alt+F1 进入命令行界面,并执行以下命令关闭图形界面。
$ sudo service lightdm stop
-
如果您已经安装 NVIDIA 驱动软件,请删除旧的驱动软件。
$ sudo apt-get remove nvidia-*
-
赋予安装文件执行权限并安装驱动软件。下面的示例假设安装文件下载在
/home
目录下。$ sudo chmod a+x NVIDIA-Linux-x86_64-430.50.run $ sudo ./NVIDIA-Linux-x86_64-430.50.run
-
重启系统。
$ sudo reboot
-
测试是否安装成功。
$ sudo nvidia-smi
如果安装正确,终端打印的内容将包含类似如下信息:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 430.34 Driver Version: 430.34 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 1660 Off | 00000000:01:00.0 On | N/A | | 28% 49C P0 24W / 130W | 2731MiB / 5941MiB | 1% Default | +-------------------------------+----------------------+----------------------+
-
更新源。
$ sudo apt-get update
-
使用 curl 工具下载最新版本的 Docker。
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
如果系统中未安装 curl 工具,则先安装 curl, 然后执行上述命令。
$ sudo apt-get install curl
-
更新 apt-get 仓库。
$ sudo apt-get update
-
安装 Docker 及其相关的命令行接口和 runtime 环境。
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
-
重新执行以下命令验证 Docker 是否安装成功。如果能够打印 Docker 的版本信息,则说明已成功安装 Docker。
$ sudo docker -v
-
使用 curl 添加 gpg key。
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \ sudo apt-key add - $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
-
更新下载源。
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.list
-
安装 NVIDIA runtime。
$ sudo apt-get update $ sudo apt-get install -y nvidia-container-toolkit
-
重启 Docker daemon。
$ sudo systemctl restart docker
-
验证 NVIDIA container toolkit 是否安装成功。
$ sudo docker run --gpus all nvidia/cuda:9.0-base nvidia-smi
如果能够成功打印服务器 GPU 信息,则表示安装成功。
-
下载脚本
install_megawise.sh
和data_import.sh
至同一目录,并确保当前用户对两个脚本有可执行权限。$ wget https://raw.githubusercontent.com/Infini-Analytics/infini/master/script/data_import.sh \ https://raw.githubusercontent.com/Infini-Analytics/infini/master/script/install_megawise.sh $ chmod a+x *.sh
-
安装 MegaWise 并导入示例数据。
$ ./install_megawise.sh [参数1,必选] [参数2,可选]
参数1:MegaWise 安装目录的绝对路径,请确保该目录不存在,并且当前用户对该目录有读写权限。
参数2:MegaWise 镜像id,可选,默认'0.4.2'
示例:
$ ./install_megawise.sh /home/$USER/megawise '0.4.2'
该语句所执行的操作如下:
- 拉取 MegaWise Docker 镜像。
- 下载配置文件和示例数据。
- 启动 MegaWise。
- 准备示例数据并导入 MegaWise。
- 修改相关配置参数,重启 MegaWise 服务。
若出现 Successfully installed MegaWise and imported test data
则表示 MegaWise 成功安装且示例数据已导入。
-
在 docker hub 查询最新的 MegaWise 版本号。
-
执行以下命令获得最新版本的 MegaWise 的 docker 镜像。
$ sudo docker pull zilliz/megawise:$LATEST_VERSION
-
安装 PostgreSQL 客户端。
$ sudo apt-get install curl ca-certificates $ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - $ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' $ sudo apt-get update $ sudo apt-get install postgresql-client-11
PostgreSQL 客户端默认安装路径是/usr/lib/postgresql/11/bin/,安装完成后执行
which psql
命令,如果没有输出 PostgreSQL 客户端程序的正确路径,需要手动将安装路径加到环境变量中。$ export PATH=/usr/lib/postgresql/11/bin:$PATH
-
新建一个目录作为工作目录。
$ cd $WORK_DIR $ mkdir conf $ mkdir logs
-
获取 MegaWise 配置文件。
$ cd $WORK_DIR/conf $ wget https://raw.githubusercontent.com/Infini-Analytics/infini/master/config/db/chewie_main.yaml \ https://raw.githubusercontent.com/Infini-Analytics/infini/master/config/db/etcd.yaml \ https://raw.githubusercontent.com/Infini-Analytics/infini/master/config/db/megawise_config_template.yaml \ https://raw.githubusercontent.com/Infini-Analytics/infini/master/config/db/render_engine.yaml
-
根据 MegaWise 所在的服务器环境修改配置文件。
-
打开
conf
目录下面的chewie_main.yaml
配置文件。- 定位到如下片段:
cache: # size in GB cpu: physical_memory: 16 partition_memory: 16 gpu: gpu_num: 2 physical_memory: 2 partition_memory: 2
根据服务器的硬件配置,对上述的配置项进行设置(数值单位为 GB )。
cpu
部分,physical_memory
和partition_memory
分别表示 MegaWise 可用的内存总容量和数据缓存分区的内存容量。建议将partition_memory
和physical_memory
均设置为服务器物理内存总量的70%以上;gpu
部分,gpu_num
表示当前 MegaWise 使用的 GPU 数量,physical_memory
和partition_memory
分别表示 MegaWise 可用的显存总容量和数据缓存分区的显存容量。建议预留 2GB 显存用于存储计算过程中的中间结果,即将partition_memory
和physical_memory
均设置为单张显卡显存容量的值减2。 -
打开
conf
目录下面的megawise_config_template.yaml
配置文件。-
定位到如下片段并设置相关参数。
worker_config: bitcode_lib: @bitcode_lib@ precompile: true stage: build_task_context_parallelism: 1 fetch_meta_parallelism: 1 compile_parallelism: 1 fetch_data_parallelism: 1 compute_parallelism: 1 output_parallelism: 1 worker_num : 2 gpu: physical_memory: 2 # unit: GB partition_memory: 2 # unit: GB cuda_profile_query_cnt: -1 #-1 means don't profile, positive integer means the number of queries to profile, other value invalid
依据下表设置以下参数的值:
参数 值 worker_num
chewie_main.yaml
中的gpu_num
值physical_memory
chewie_main.yaml
中的physical_memory
值partition_memory
chewie_main.yaml
中的partition_memory
值 -
定位到如下片段并设置相关参数。
string_config: dict_config: cache_size: 21474836480 # 20G split_threshold: 1000000 split_each: 100000 small_scale_num: 4000 # try not to use the temporary id hash_config: cache_size: 21474836480 # 20G bucket_num: 1999993 # prime number is a good choice bucket_size: 500 # make sure that each string is shorter than bucket_size-5 file_size: 104857600 # 100M
dict_config
中的cache_size
表示用于字符串字典编码的内存总量,单位为字节。hash_config
中的cache_size
表示用于字符串哈希编码的内存总量,单位为字节。
-
-
-
启动 MegaWise。
sudo docker run --gpus all --shm-size 17179869184 \ -v $WORK_DIR/conf:/megawise/conf \ -v $WORK_DIR/data:/megawise/data \ -v $WORK_DIR/logs:/megawise/logs \ -v $WORK_DIR/server_data:/megawise/server_data \ -v /home/$USER/.nv:/home/megawise/.nv \ -p 5433:5432 \ $IMAGE_ID
参数说明
--shm-size
Docker image 运行时系统分配的内存大小,改值取
chewie_main.yaml
配置文件中cache
配置项下的cpu
配置项的physical_memory
的值,单位为字节-v
宿主机和 image 之间的目录映射,用
:
隔开,前面是宿主机的目录,后面是 Docker image 的目录。在启动容器时可以通过
-v
将本地存储的数据文件映射到容器内,以实现本地文件导入 MegaWise 数据库。-p
宿主机和 image 之间的端口映射,用
:
隔开,前面是宿主机的端口,后面是 Docker image 的端口,宿主机的端口可以随意设置未被占用的端口,本教程设置为5433。容器启动后,将会启动日志,如果能找到如下日志内容,则说明 MegaWise server 已经启动成功。
MegaWise server is running...
-
操作 MegaWise。
$ psql -U zilliz -p 5433 -h $IP_ADDR -d postgres
MegaWise 的 docker 启动后会内置一个默认数据库
postgres
,在该数据库上会创建一个默认用户zilliz
,接下来会提示输入密码,默认zilliz
。 如果出现以下信息:psql (11.1) Type "help" for help. postgres=>
就说明成功连接上 MegaWise 了。
注意:如果连接超时,建议检查防火墙设置是否正确。