当前位置: 首页 > news >正文

在ESPnet使用Makefile安装PyTorch和相关依赖的详细教程

在ESPnet使用Makefile安装PyTorch和相关依赖的详细教程

介绍

在数据科学和机器学习项目中,经常需要安装和配置多个软件包和库。手动安装这些依赖项可能会非常繁琐和耗时。为了简化这个过程,我们可以使用Makefile来自动化安装过程。本教程将详细介绍如何使用Makefile来安装PyTorch和其他相关依赖项。

环境要求

  • 操作系统:Linux 或 macOS
  • Python 版本:3.7 及以上
  • Conda 或 pip(如果你使用的是Anaconda)

项目结构

假设你的espnet项目结构如下:

espnet/
│
tools/
│
├── installers/
│   ├── install_ffmpeg.sh
│   ├── install_sctk.sh
│   ├── install_sph2pipe.sh
│   ├── install_torch.sh
│   ├── install_warp-transducer.sh
│   ├── install_chainer.sh
│   ├── install_kenlm.sh
│   └── ...
├── activate_python.sh
├── Makefile
└── ...

Makefile 详解

Makefile 是一个自动化构建工具,通过定义目标(targets)和依赖关系,可以方便地管理构建任务。

基本语法

在Makefile中,每个目标都有一组依赖项和一组命令。例如:

target: dependenciescommand
主要目标

在我们的Makefile中,主要目标包括:

  • 安装基本工具和库(如 cmakeffmpegsox 等)
  • 安装 Python 依赖项(如 numpytorchespnet 等)
  • 安装特定工具(如 sctksph2pipe 等)

示例Makefile

以下是一个示例Makefile,包含所有主要目标和命令:

TH_VERSION := 2.3.0# Use pip for pytorch installation even if you have anaconda
ifneq ($(shell test -f ./activate_python.sh && grep 'conda activate' ./activate_python.sh),)
USE_CONDA := 1
else
USE_CONDA :=
endif# Set if install binaries on CPU mode e.g. make CPU_ONLY=0
# If you don't have nvcc, this value will be set automatically
ifneq ($(shell which nvcc 2>/dev/null),)
CPU_ONLY :=
# Derive CUDA version from nvcc
CUDA_VERSION := $(shell nvcc --version | grep "Cuda compilation tools" | cut -d" " -f5 | sed s/,//)
CUDA_VERSION_WITHOUT_DOT := $(strip $(subst .,,$(CUDA_VERSION)))
else
CPU_ONLY := 0
CUDA_VERSION :=
CUDA_VERSION_WITHOUT_DOT :=
endif
WITH_OMP=ON.PHONY: all cleanall: showenv conda_packages.done python ffmpeg.done sctk check_installpython: activate_python.sh setuptools.done packaging.done espnet.done pytorch.done chainer.done fairscale.done torch_optimizer.done flash_attn.doneactivate_python.sh:test -f activate_python.sh || { echo "Error: Run ./setup_python.sh or ./setup_anaconda.sh"; exit 1; }################ Logging ################
showenv: activate_python.sh
ifeq ($(strip $(CPU_ONLY)),)@echo CUDA_VERSION=$(CUDA_VERSION)
else@echo Perform on CPU mode: CPU_ONLY=$(CPU_ONLY)
endif@echo PYTHON=$(shell . ./activate_python.sh && command -v python3)@echo PYTHON_VERSION=$(shell . ./activate_python.sh && python3 --version)@echo USE_CONDA=$(USE_CONDA)@echo TH_VERSION=$(TH_VERSION)@echo WITH_OMP=$(WITH_OMP)#########################################bc.done: activate_python.sh. ./activate_python.sh && { command -v bc || conda install -y bc -c conda-forge; }touch bc.donecmake.done: activate_python.sh. ./activate_python.sh && { command -v cmake || conda install -y cmake; }touch cmake.doneflac.done: activate_python.sh. ./activate_python.sh && { command -v flac || conda install -y libflac -c conda-forge; }touch flac.donesox.done: activate_python.sh. ./activate_python.sh && { command -v sox || conda install -y sox -c conda-forge; }touch sox.donesndfile.done: activate_python.sh. ./activate_python.sh && { conda install -y libsndfile -c conda-forge; }touch sndfile.doneifneq ($(strip $(USE_CONDA)),)
conda_packages.done: bc.done cmake.done flac.done sox.done sndfile.done
else
conda_packages.done:
endiftouch conda_packages.doneffmpeg.done: activate_python.sh
ifneq ($(strip $(USE_CONDA)),). ./activate_python.sh && { command -v ffmpeg || conda install -y ffmpeg -c conda-forge; }
else. ./activate_python.sh && { command -v ffmpeg || ./installers/install_ffmpeg.sh; }
endiftouch ffmpeg.donesctk: sctk/bin/sclite
sctk/bin/sclite:./installers/install_sctk.shsph2pipe: sph2pipe/sph2pipe
sph2pipe/sph2pipe:./installers/install_sph2pipe.shsetuptools.done: activate_python.sh. ./activate_python.sh && { python -m ensurepip --upgrade; pip install setuptools; }touch setuptools.donepackaging.done: setuptools.done. ./activate_python.sh && python3 -m pip install packagingtouch packaging.donenumpy.done: activate_python.sh
ifeq ($(strip $(USE_CONDA)),). ./activate_python.sh && python3 -m pip install numpy
else. ./activate_python.sh && conda install -y numpy
endiftouch numpy.donenumba.done: numpy.done. ./activate_python.sh && python3 -m pip install -U numbatouch numba.donepytorch.done: packaging.done numba.done
ifeq ($(strip $(USE_CONDA)),). ./activate_python.sh && ./installers/install_torch.sh "false" "${TH_VERSION}" "${CUDA_VERSION}"
else. ./activate_python.sh && ./installers/install_torch.sh "true" "${TH_VERSION}" "${CUDA_VERSION}"
endiftouch pytorch.doneespnet.done: pytorch.done conda_packages.done. ./activate_python.sh && python3 -m pip install -e "..[train, recipe]". ./activate_python.sh && python -m nltk.downloader averaged_perceptron_tagger_engtouch espnet.donesounfile_test: espnet.done. ./activate_python.sh && python3 ./test_soundfile.pychainer.done: espnet.done. ./activate_python.sh && ./installers/install_chainer.sh "${CUDA_VERSION}"touch chainer.donewarp-transducer.done: pytorch.done conda_packages.done
ifeq ($(strip $(CPU_ONLY)),)[ -n "${CUDA_HOME}" ] || { echo "Error: CUDA_HOME is not set."; exit 1; }
endif. ./activate_python.sh && ./installers/install_warp-transducer.sh ${WITH_OMP}touch warp-transducer.donechainer_ctc.done: chainer.done
ifeq ($(strip $(CPU_ONLY)),)[ -n "${CUDA_HOME}" ] || { echo "Error: CUDA_HOME is not set."; exit 1; }
endif. ./activate_python.sh && ./installers/install_chainer_ctc.sh ${WITH_OMP}touch chainer_ctc.donenkf.done:./installers/install_nkf.shtouch nkf.donepyopenjtalk.done: espnet.done conda_packages.done. ./activate_python.sh && ./installers/install_pyopenjtalk.shtouch pyopenjtalk.donephonemizer.done: espnet.done conda_packages.done
ifeq ($(WITH_OMP),ON). ./activate_python.sh && ./installers/install_phonemizer.shtouch phonemizer.done
elseecho "Warning: ./installers/install_phonemizer.sh requires WITH_OMP=ON"
endifmoses.done:git clone --depth 1 https://github.com/moses-smt/mosesdecoder.git mosestouch moses.donemwerSegmenter.done:./installers/install_mwerSegmenter.shtouch mwerSegmenter.donekenlm.done: espnet.done conda_packages.done. ./activate_python.sh && ./installers/install_kenlm.shtouch kenlm.donepesq: PESQ/P862_annex_A_2005_CD/source/PESQ
PESQ/P862_annex_A_2005_CD/source/PESQ:./installers/install_pesq.shpy3mmseg.done: espnet.done. ./activate_python.sh && ./installers/install_py3mmseg.shtouch py3mmseg.donebeamformit.done:./installers/install_beamformit.shtouch beamformit.donetorch_optimizer.done: espnet.done. ./activate_python.sh && ./installers/install_torch_optimizer.shtouch torch_optimizer.donefairscale.done: espnet.done. ./activate_python.sh && ./installers/install_fairscale.shtouch fairscale.donefairseq.done: espnet.done. ./activate_python.sh && ./installers/install_fairseq.shtouch fairseq.dones3prl.done: espnet.done. ./activate_python.sh && ./installers/install_s3prl.shtouch s3prl.donewhisper.done: espnet.done. ./activate_python.sh && ./installers/install_whisper.shtouch whisper.donelora.done: espnet.done. ./activate_python.sh && ./installers/install_lora.shtouch lora.donek2.done: espnet.done. ./activate_python.sh && ./installers/install_k2.shtouch k2.donetransformers.done: espnet.done. ./activate_python.sh && ./installers/install_transformers.shtouch transformers.doneparallel-wavegan.done: espnet.done. ./activate_python.sh && ./installers/install_parallel-wavegan.shtouch parallel-wavegan.donelongformer.done: espnet.done. ./activate_python.sh && ./installers/install_longformer.shtouch longformer.doneflash_attn.done: espnet.done. ./activate_python.sh && ./installers/install_flash_attn.shtouch flash_attn.donemuskits.done: espnet.done. ./activate_python.sh && ./installers/install_muskits.shtouch muskits.donecheck_install: python. ./activate_python.sh; . ./extra_path.sh; python3 check_install.pyclean: clean_extrarm -rf warp-transducer chainer_ctcrm -rf *.donefind . -iname "*.pyc" -deleteclean_python:rm -rf warp-transducer chainer_ctcrm -f chainer_ctc.done espnet.done chainer.done pytorch.done warp-transducer.donefind . -iname "*.pyc" -deleteclean_extra:rm -rf nkf.done swig.done moses.done mwerSegmenter.donerm -rf hts_engine_API.done open_jtalk.done pyopenjtalk.donerm -rf muskits.donerm -rf rvad_fast.donerm -rf chainer espeak-ng festival MBROLA ParallelWaveGAN versarm -rf py3mmseg sctk* speech_tools sph2pipe* ._mwerSegmenterrm -rf nkf mecab swig moses mwerSegmenterrm -rf PESQ PESQ.zip

安装和使用步骤

  1. 准备环境

    • 安装 conda 或者确保有 pip
    • 克隆或下载你的项目。
  2. 激活Python环境

    • 创建并激活Python环境:
      ./setup_anaconda.sh  # 或者 ./setup_python.sh
      
  3. 运行Makefile

    • 安装所有依赖项:
      make all
      
    • 你可以使用特定目标来安装某些依赖项,例如:
      make pytorch.done
      
  4. 检查安装

    • 确保所有依赖项都已正确安装:
      make check_install
      

常见问题

  • 问题:安装过程中遇到权限问题。

    • 解决方案:确保你有足够的权限,或者在命令前添加 sudo
  • 问题:某些依赖项未能安装。

    • 解决方案:查看具体的错误信息,并根据提示手动安装依赖项。

清理

  • 可以使用以下命令来清理安装的文件和依赖项:
    make clean
    

结论

通过使用Makefile,可以大大简化复杂项目的安装过程。希望本教程能帮助你更好地理解和使用Makefile来管理项目依赖。如果有任何问题或建议,请随时留言。

相关文章:

  • 嵌入式学习--LinuxDay04
  • Cadence23中的一些设置
  • MAC-Win11虚拟机双VPN环境内网穿透解决思路
  • 【分布式微服务云原生】Dockerfile命令详解
  • OJ在线评测系统 后端判题机架构搭建 使用原生实现Java安全管理器环境隔离
  • 付费计量系统标准化未来展望
  • 【源码】询比价管理系统,招投标采购管理系统
  • 【滑动窗口算法】——定长滑动窗口——Python(附题)
  • vue2 将页面生成pdf下载
  • MYSQL-查看函数创建语句语法(五)
  • Ubuntu/Debian网络配置(补充篇)
  • 解决方案:如何区分python里面绝对路径跟相对路径的不同
  • SIP 会议信令
  • Android studio安装问题及解决方案
  • TypeScript高级内容
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • CentOS7 安装JDK
  • ComponentOne 2017 V2版本正式发布
  • gops —— Go 程序诊断分析工具
  • webpack4 一点通
  • 彻底搞懂浏览器Event-loop
  • 前端存储 - localStorage
  • 收藏好这篇,别再只说“数据劫持”了
  • 赢得Docker挑战最佳实践
  • 【云吞铺子】性能抖动剖析(二)
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #NOIP 2014# day.2 T2 寻找道路
  • #Ubuntu(修改root信息)
  • #微信小程序:微信小程序常见的配置传值
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (笔记自用)LeetCode:快乐数
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (循环依赖问题)学习spring的第九天
  • (一)Neo4j下载安装以及初次使用
  • (转)http协议
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)平衡树
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net Application的目录
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net 代码性能 - (1)
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET开源项目介绍及资源推荐:数据持久层
  • /boot 内存空间不够
  • @Autowired自动装配
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [Android]How to use FFmpeg to decode Android f...