W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在 Windows 上構(gòu)建 PyTorch 時,可以包含可選組件如 MKL 和 MAGMA。以下是構(gòu)建步驟:
REM 確保安裝了 7z 和 curl
REM 下載 MKL 文件
curl https://s3.amazonaws.com/ossci-windows/mkl_2018.2.185.7z -k -O
7z x -aoa mkl_2018.2.185.7z -omkl
REM 下載 MAGMA 文件
set CUDA_PREFIX=cuda90
set CONFIG=release
curl -k https://s3.amazonaws.com/ossci-windows/magma_2.5.0_%CUDA_PREFIX%_%CONFIG%.7z -o magma.7z
7z x -aoa magma.7z -omagma
REM 設(shè)置環(huán)境變量
set "CMAKE_INCLUDE_PATH=%cd%\\mkl\\include"
set "LIB=%cd%\\mkl\\lib;%LIB%"
set "MAGMA_HOME=%cd%\\magma"
可以使用 Ninja
來并行化 CUDA 構(gòu)建任務(wù):
REM 安裝 Ninja
pip install ninja
REM 設(shè)置 CMake 生成器為 Ninja
set CMAKE_GENERATOR=Ninja
在 Windows 上啟用 CFFI 擴展需要額外步驟。首先,在 Extension
對象中指定額外的 libraries
:
ffi = create_extension(
'_ext.my_lib',
headers=headers,
sources=sources,
define_macros=defines,
relative_to=__file__,
with_cuda=with_cuda,
extra_compile_args=["-std=c99"],
libraries=['ATen', '_C'] # 根據(jù)需要添加 CUDA 庫
)
#include <THC/THC.h>
#include <ATen/ATen.h>
THCState *state = at::globalContext().thc_state;
extern "C" int my_lib_add_forward_cuda(
THCudaTensor *input1, THCudaTensor *input2, THCudaTensor *output
) {
if (!THCudaTensor_isSameSizeAs(state, input1, input2))
return 0;
THCudaTensor_resizeAs(state, output, input1);
THCudaTensor_cadd(state, output, input1, 1.0, input2);
return 1;
}
extern "C" int my_lib_add_backward_cuda(
THCudaTensor *grad_output, THCudaTensor *grad_input
) {
THCudaTensor_resizeAs(state, grad_input, grad_output);
THCudaTensor_fill(state, grad_input, 1);
return 1;
}
對于 C++ 擴展,建議使用 x86_x64 VS 2017 的交叉工具命令提示符進行編譯。
PyTorch 不支持 32 位系統(tǒng),請使用 Windows 和 Python 的 64 位版本。
該錯誤通常是由于缺少必要的運行庫文件引起的。可以通過以下命令解決:
conda install -c peterjc123 vc vs2017_runtime
conda install mkl_fft intel_openmp numpy mkl
對于 wheel 包,確保安裝了 VS 2017 可再發(fā)行組件和 NumPy:
pip install numpy mkl intel-openmp mkl_fft
該錯誤通常是由于使用了不兼容的 GPU 版本或 Anaconda 問題引起的??梢試L試以下命令修復(fù):
conda install -c defaults intel-openmp -f
在 Windows 上,multiprocessing
使用 spawn
而不是 fork
。需要將代碼包裹在 if __name__ == '__main__':
塊中:
import torch
def main():
# 數(shù)據(jù)加載和訓(xùn)練代碼
pass
if __name__ == '__main__':
main()
該錯誤通常是由于子進程在父進程完成發(fā)送數(shù)據(jù)之前結(jié)束引起的??梢酝ㄟ^將 DataLoader
的 num_workers
設(shè)置為零來調(diào)試:
dataloader = torch.utils.data.DataLoader(dataset, num_workers=0)
請更新您的圖形驅(qū)動程序。如果問題仍然存在,可以嘗試更新 TDR 設(shè)置。
Windows 不支持 CUDA IPC 操作??梢赃x擇不使用 multiprocessing
或共享 CPU 張量:
## 不使用 multiprocessing
dataloader = torch.utils.data.DataLoader(dataset, num_workers=0)
## 共享 CPU 張量
class CustomDataset(torch.utils.data.Dataset):
def __getitem__(self, idx):
# 確保返回 CPU 張量
return self.data[idx].cpu(), self.labels[idx].cpu()
A1:Windows 系統(tǒng)不支持 CUDA IPC 操作,這是由于操作系統(tǒng)的限制??梢赃x擇不使用 multiprocessing
或共享 CPU 張量來解決。
A2:導(dǎo)入錯誤通常是由于缺少必要的運行庫文件或使用了不兼容的包版本??梢酝ㄟ^安裝所需的運行庫和檢查包版本來解決。
A3:在 Windows 上構(gòu)建 PyTorch 需要額外的步驟,包括下載和配置 MKL 和 MAGMA 等可選組件。可以參考官方文檔獲取詳細的構(gòu)建指南。
通過本文的詳細介紹,我們掌握了 PyTorch 在 Windows 平臺上的常見問題及解決方案。這些內(nèi)容涵蓋了從構(gòu)建、安裝到并行處理的各個方面,希望能幫助你在 Windows 環(huán)境下順利開發(fā)和部署 PyTorch 項目。
關(guān)注編程獅(W3Cschool)平臺,獲取更多 PyTorch 開發(fā)相關(guān)的教程和案例。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: