笔者也是第一次参加比赛,docker不熟练,这次顺利提交了,给大家分享下提交经验!
1. docker 环境下载安装构建上传
参考天池大赛的步骤:天池大赛从0开始docker提交_天池技术圈-阿里云天池
第一、二步跟着天池教程操作。
第三步我们参考官方给的镜像打包程序。
1.1 修改Dockerfile
# 原始加载镜像
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.12-py3.9.12-cuda11.3.1-u20.04
# 新的加载镜像
FROM sais-public-registry.cn-shanghai.cr.aliyuncs.com/sais-public/pytorch:2.0.0-py3.9.12-cuda11.8.0-u22.04
1.2 构建镜像并上传
# 构建镜像
bash build.sh
# 以下命令为示例,实际使用时请修改为自己的镜像地址
# push镜像
docker push registry.cn-shanghai.aliyuncs.com/xxxx/test:0.1
注:我首次提交时`bash build.sh` 出错了,具体错误忘了记录,大概意思是docker构建方法太旧,使用如下方法解决,供参考。
docker buildx install
sudo apt-get install docker-buildx
2. 数据加载
因容器系统特殊,直接用xr读取nc数据可能存在文件锁定问题导致报错NetCDF: HDF error
官方没有给出完整代码,可能也是在考察选手的代码处理能力,下面的代码供参考。
# 原数据加载方式
from netCDF4 import Dataset
with Dataset(file_path, mode='r') as ds:
data = ds.variables["data"][:].astype(np.float32)[0]
# 新数据加载方式
import xarray as xr
import os
os.environ["HDF5_USE_FILE_LOCKING"] = "FALSE"
ds = xr.open_mfdataset(
paths=file_path,
engine='h5netcdf',
parallel=True
)
data = ds.variables["data"][:].astype(np.float32)[0]
# 附 路径地址
# 训练集特征
/saisdata/train/POWER_TRAIN_ENV/1/NWP_1/20240101.nc
# 训练集标签
/saisdata/train/power_train/1_normalization_train.csv
# 测试集特征
/saisdata/test/POWER_TEST_ENV/1/NWP_1/20250101.nc
3. torch 、 CUDA、dask、h5netcdf问题
问题1:使用GPU报如下错误,缺少了一些文件
Could not load library libcudnn_cnn_infer.so.8. Error: libnvrtc.so: cannot open shared object file: No such file or directory
run.sh: line 5: 19 Aborted
参考解决方法:docker中下载下面的文件,可直接参考最后的完整Dockerfile
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
dpkg -i cuda-keyring_1.1-1_all.deb
apt-get update && \
apt-get install -y --no-install-recommends \
cuda-toolkit-12-4 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
问题2:缺少dask、h5netcdf包
ImportError: chunk manager 'dask' is not available. Please make sure 'dask' is installed and importable.
ValueError: unrecognized engine 'h5netcdf' must be one of your download engines: ['scipy', 'store'].
参考解决方法:安装缺少的dask包,可直接参考最后的完整Dockerfile
pip3 install dask h5netcdf --index-url=http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com
以下完整Dockerfile供参考
FROM sais-public-registry.cn-shanghai.cr.aliyuncs.com/sais-public/pytorch:2.0.0-py3.9.12-cuda11.8.0-u22.04
# 如有安装其他软件的需求
#RUN apt-get update && apt-get install curl
RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
RUN dpkg -i cuda-keyring_1.1-1_all.deb
RUN apt-get update && \
apt-get install -y --no-install-recommends \
cuda-toolkit-12-4 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 如果安装其他python包的情况
RUN pip3 install numpy pandas scikit-learn xarray dask h5netcdf --index-url=http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com
# 复制代码到镜像仓库
COPY app /app
# 指定工作目录
WORKDIR /app
# 容器启动运行命令
CMD ["bash", "run.sh"]