習(xí)框架選型:TensorFlow與PyTorch對比與學(xué)習(xí)路線)
2026 年還在糾結(jié) TensorFlow 和 PyTorch 選哪個這個問題放到今年問答案其實已經(jīng)比較清楚了。如果你正在準(zhǔn)備入門深度學(xué)習(xí)或者要開始做畢業(yè)設(shè)計、落地項目這篇文章直接給你結(jié)論、環(huán)境配置命令、代碼對比和判斷方法。不繞彎先看結(jié)論新手入門優(yōu)先選 PyTorch求職方向要看崗位要求工業(yè)部署場景再考慮 TensorFlow 的成熟鏈路。為什么現(xiàn)在可以給出這樣一個偏向性明顯的結(jié)論過去幾年的學(xué)術(shù)論文、開源模型、招聘崗位和技術(shù)社區(qū)都已經(jīng)給出了足夠多的數(shù)據(jù)。下面我會從框架定位、安裝部署、模型訓(xùn)練、工程落地、社區(qū)生態(tài)這幾個維度展開同時給出可以直接運行的代碼和排查方案。1. 核心能力速覽先給一張對比表把兩個框架的關(guān)鍵差異放在一起看對比項TensorFlowPyTorch開發(fā)團隊GoogleMeta AI當(dāng)前主版本TensorFlow 2.xPyTorch 2.x默認(rèn)執(zhí)行模式靜態(tài)圖 動態(tài)圖Keras 高層 API動態(tài)圖優(yōu)先支持 torch.compile 靜態(tài)優(yōu)化學(xué)習(xí)曲線略陡峭概念多更平緩風(fēng)格接近 NumPy學(xué)術(shù)論文使用率明顯下降目前主流研究項目占絕對多數(shù)熱門模型支持Huge 模型部分適配HuggingFace 全家桶原生適配部署方案TF Serving、TF Lite、TensorRT、TFLite MicroTorchScript、ONNX、TorchServe、vLLM移動端/嵌入式成熟覆蓋面廣支持一般需借助 ONNX 轉(zhuǎn)換就業(yè)市場需求偏傳統(tǒng)工業(yè)、端側(cè)部署、部分大廠老項目互聯(lián)網(wǎng)公司算法崗、AI 公司主流適合人群傳統(tǒng) AI 產(chǎn)品團隊、部署工程師、部分工業(yè)方向高校研究、算法工程師、數(shù)據(jù)科學(xué)家、入門新手關(guān)鍵風(fēng)險近兩年生態(tài)活躍度下滑動態(tài)圖部署鏈路需額外學(xué)習(xí)這張表的結(jié)論沒有絕對的“更好”只有“當(dāng)前階段哪個更適合你”。如果你還在上學(xué)或者準(zhǔn)備轉(zhuǎn)型做算法崗PyTorch 是更省時間的選擇。如果你所在公司有一套 TensorFlow 存量系統(tǒng)那就需要認(rèn)真學(xué) TensorFlow 的部署棧。2. 適用場景與使用邊界2.1 TensorFlow 適合什么場景TensorFlow 最有競爭力的場景集中在生產(chǎn)部署鏈路。TF Serving 支持熱加載模型版本、自動批處理、gRPC 和 RESTful API在微服務(wù)架構(gòu)里非常成熟。TF Lite 和 TFLite Micro 可以跑到 Android、iOS 甚至 MCU 上很多端側(cè)圖像分類、喚醒詞檢測項目用的就是這套工具鏈。如果你做的是工業(yè)視覺檢測、嵌入式 AI、服務(wù)端高并發(fā)推理TensorFlow 的工程化積累是實打?qū)嵉摹A硗釺ensorFlow.js 可以在瀏覽器里跑模型加上 MediaPipe 組件很多 Web 端互動應(yīng)用也是首選 TensorFlow 系。2.2 PyTorch 適合什么場景PyTorch 的核心場景是研究和快速實驗。它的動態(tài)計算圖讓調(diào)試變得直觀打印輸出、斷點調(diào)試、中間張量修改都不需要重新構(gòu)圖。Transformer、Diffusion、LLM 相關(guān)的論文幾乎第一版代碼都是 PyTorch。HuggingFace Transformers、Diffusers、PEFT、TRL 這些庫默認(rèn)基于 PyTorch你想復(fù)現(xiàn)最新模型PyTorch 路徑最短。現(xiàn)在企業(yè)里做推薦系統(tǒng)、多模態(tài)模型、CV/NLP 算法大部分團隊也直接用 PyTorch 訓(xùn)練再轉(zhuǎn) ONNX 部署。2.3 使用邊界和合規(guī)提醒不管選哪個框架本地訓(xùn)練和部署都涉及數(shù)據(jù)安全、鏡像源訪問和模型許可證問題。企業(yè)項目要注意訓(xùn)練數(shù)據(jù)的授權(quán)邊界不要拿未授權(quán)的數(shù)據(jù)做商用開源模型要確認(rèn) License 是否允許商用和二次分發(fā)。涉及人臉、聲音、個人信息的數(shù)據(jù)務(wù)必遵守隱私保護相關(guān)法律法規(guī)。模型部署到公網(wǎng)時需要做好接口鑒權(quán)和流量限制避免被刷。3. 環(huán)境準(zhǔn)備與前置條件在正式安裝框架之前先確認(rèn)幾個基礎(chǔ)環(huán)境項操作系統(tǒng)Windows 10/11、Ubuntu 20.04/22.04/24.04、macOS 都可以但 GPU 服務(wù)器強烈建議用 Ubuntu。Python 版本TensorFlow 2.18 和 PyTorch 2.x 都支持 Python 3.9 到 3.12建議使用 3.10 或 3.11。GPU 驅(qū)動和 CUDANVIDIA 顯卡需要安裝顯卡驅(qū)動。要確認(rèn)驅(qū)動版本和 CUDA 版本匹配。包管理工具建議先安裝 Anaconda 或 Miniconda后面用它建虛擬環(huán)境最省心。磁盤空間每個框架的 CUDA 相關(guān)包約 2.5GB 到 3GB加上模型緩存建議預(yù)留 20GB 以上。網(wǎng)絡(luò)環(huán)境pip 和 conda 都建議配置國內(nèi)鏡像源下載速度會差很多。下面給出一份適合大多數(shù)人的環(huán)境檢查流程。3.1 先檢查 NVIDIA 驅(qū)動與 CUDA打開終端執(zhí)行nvidia-smi正常輸出里會看到顯卡型號、驅(qū)動版本和 CUDA 版本。如果返回“NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver”說明驅(qū)動沒裝好或者內(nèi)核版本對不上需要先解決驅(qū)動問題。在 Ubuntu 上可以檢查ubuntu-drivers devices然后根據(jù)推薦版本安裝驅(qū)動安裝后重啟再執(zhí)行nvidia-smi驗證。3.2 創(chuàng)建虛擬環(huán)境不管是 TensorFlow 還是 PyTorch都建議用虛擬環(huán)境隔離避免依賴沖突。conda create -n dl_env python3.10 -y conda activate dl_env后續(xù)所有安裝、運行操作都在這套環(huán)境里進行。3.3 配置 pip 國內(nèi)鏡像這一步能明顯加快下載速度。pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple或者臨時使用pip install torch -i https://mirrors.aliyun.com/pypi/simple3.4 檢查 Python 和 pip 版本python --version pip --version確認(rèn) Python 是 3.10 或 3.11pip 是 20.3 以上版本。4. TensorFlow 安裝部署與啟動方式推薦直接安裝 TensorFlow 2.18 或更新版本。安裝命令pip install tensorflow如果你有 NVIDIA GPU需要安裝帶 GPU 支持的版本pip install tensorflow[and-cuda]這個安裝包會拉取編譯好的 CUDA 相關(guān)依賴省去手動配置 CUDA/cuDNN 的麻煩。4.1 驗證 TensorFlow 是否可用安裝完成后運行一段簡短代碼import tensorflow as tf print(TensorFlow version:, tf.__version__) print(GPU 設(shè)備列表:, tf.config.list_physical_devices(GPU))如果能看到類似PhysicalDevice(name/physical_device:GPU:0, device_typeGPU)的輸出說明 GPU 可用。如果只顯示 CPU需要排查 CUDA 兼容性問題。再跑一個最小訓(xùn)練示例import tensorflow as tf model tf.keras.Sequential([ tf.keras.layers.Dense(16, activationrelu), tf.keras.layers.Dense(1) ]) model.compile(optimizeradam, lossmse) import numpy as np x np.random.rand(1000, 8).astype(float32) y np.random.rand(1000, 1).astype(float32) model.fit(x, y, epochs5, verbose1)如果能看到 loss 下降說明安裝鏈路是通的。這里重點看的是Keras 高層 API 對新手非常友好幾行代碼就能完成一個簡單的回歸任務(wù)。4.2 TensorFlow 學(xué)習(xí)前的關(guān)鍵概念安裝好之后學(xué) TensorFlow 時有幾個概念很容易卡住新手KerasTensorFlow 2.x 的高層 API適合快速構(gòu)建模型。Data API推薦用tf.data.Dataset做數(shù)據(jù)管道性能遠高于model.fit直接傳 NumPy 數(shù)組。SavedModel模型保存格式部署到 TF Serving 時用。Eager ExecutionTensorFlow 2.x 默認(rèn)開啟寫起來接近普通 Python調(diào)試比 1.x 版本友好。5. PyTorch 安裝部署與啟動方式PyTorch 的安裝地址是官方提供的一條命令關(guān)鍵是選擇正確的 CUDA 版本。先到 PyTorch 官網(wǎng)獲取安裝命令或者使用下面的通用寫法pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121cu121表示 CUDA 12.1 版本。如果你的 CUDA 是 11.8則將cu121換成cu118。建議先跑nvidia-smi查看最高支持版本再向下選一個穩(wěn)定版本。通常 CUDA 12.1 是當(dāng)前兼容性不錯的中間版本。5.1 驗證 PyTorch 是否可用import torch print(PyTorch 版本:, torch.__version__) print(CUDA 是否可用:, torch.cuda.is_available()) if torch.cuda.is_available(): print(GPU 名稱:, torch.cuda.get_device_name(0))預(yù)期輸出示例PyTorch 版本: 2.3.0cu121 CUDA 是否可用: True GPU 名稱: NVIDIA GeForce RTX 4060 Laptop GPU如果torch.cuda.is_available()返回 False重點檢查PyTorch 安裝的是 CPU 版本還是 CUDA 版本。CUDA 驅(qū)動版本是否低于 PyTorch 要求的版本。顯卡驅(qū)動是否正常。5.2 運行一個最小深度學(xué)習(xí)訓(xùn)練import torch import torch.nn as nn import torch.optim as optim class Net(nn.Module): def __init__(self): super().__init__() self.fc nn.Linear(8, 1) def forward(self, x): return self.fc(x) model Net() optimizer optim.Adam(model.parameters(), lr0.01) loss_fn nn.MSELoss() x torch.randn(1000, 8) y torch.randn(1000, 1) for epoch in range(5): optimizer.zero_grad() output model(x) loss loss_fn(output, y) loss.backward() optimizer.step() print(fepoch {epoch 1}, loss: {loss.item():.4f})這段代碼展示了 PyTorch 的核心流程定義模型、定義損失和優(yōu)化器、前向傳播、反向傳播、更新參數(shù)。動態(tài)圖的優(yōu)勢在于你可以在forward函數(shù)里隨意寫if、for甚至打印中間變量調(diào)試體驗和普通 Python 完全一致。6. 功能測試與效果驗證訓(xùn)練一個圖像分類模型對比為了真正感受兩個框架的差異建議分別用 TensorFlow 和 PyTorch 訓(xùn)練同一個圖像分類任務(wù)。這里用 MNIST 作為示例幾分鐘內(nèi)就能看到效果。6.1 TensorFlow 版 MNIST 分類import tensorflow as tf (x_train, y_train), (x_test, y_test) tf.keras.datasets.mnist.load_data() x_train x_train[..., None].astype(float32) / 255.0 x_test x_test[..., None].astype(float32) / 255.0 model tf.keras.Sequential([ tf.keras.layers.Conv2D(32, kernel_size(3, 3), activationrelu), tf.keras.layers.MaxPooling2D(pool_size(2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(64, activationrelu), tf.keras.layers.Dense(10, activationsoftmax) ]) model.compile( optimizeradam, losssparse_categorical_crossentropy, metrics[accuracy] ) model.fit(x_train, y_train, batch_size64, epochs3, validation_split0.1) model.evaluate(x_test, y_test)TensorFlow 在這里的體驗非常流暢數(shù)據(jù)集內(nèi)置、數(shù)據(jù)預(yù)處理簡潔、編譯和訓(xùn)練高層封裝完善。如果你是第一次接觸深度學(xué)習(xí)用這種寫法建立對模型訓(xùn)練的整體印象是很有價值的。6.2 PyTorch 版 MNIST 分類PyTorch 通常要自己寫完整訓(xùn)練循環(huán)代碼會長一些但靈活性也更高import torch import torch.nn as nn from torch.utils.data import DataLoader, TensorDataset from torchvision import datasets, transforms transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) train_dataset datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) test_dataset datasets.MNIST(root./data, trainFalse, downloadTrue, transformtransform) train_loader DataLoader(train_dataset, batch_size64, shuffleTrue) test_loader DataLoader(test_dataset, batch_size64, shuffleFalse) class CNN(nn.Module): def __init__(self): super().__init__() self.conv1 nn.Conv2d(1, 32, kernel_size3) self.pool nn.MaxPool2d(2, 2) self.fc1 nn.Linear(32 * 13 * 13, 64) self.fc2 nn.Linear(64, 10) def forward(self, x): x self.pool(torch.relu(self.conv1(x))) x x.view(x.size(0), -1) x torch.relu(self.fc1(x)) x self.fc2(x) return x model CNN() optimizer torch.optim.Adam(model.parameters(), lr0.001) loss_fn nn.CrossEntropyLoss() device torch.device(cuda if torch.cuda.is_available() else cpu) model.to(device) for epoch in range(3): model.train() for batch_x, batch_y in train_loader: batch_x, batch_y batch_x.to(device), batch_y.to(device) optimizer.zero_grad() output model(batch_x) loss loss_fn(output, batch_y) loss.backward() optimizer.step() print(fEpoch {epoch 1}, Loss: {loss.item():.4f})對比兩個版本的代碼能明顯感受到差異TensorFlow Keras 在數(shù)據(jù)加載和訓(xùn)練過程上封裝更多代碼量少。PyTorch 把訓(xùn)練循環(huán)拆開每一步都可見方便插入自定義邏輯。同樣一個網(wǎng)絡(luò)PyTorch 里的數(shù)據(jù)變換和模型結(jié)構(gòu)更接近“普通 Python 代碼”的觀感。7. 接口 API 與模型部署深度學(xué)習(xí)框架不只是用來訓(xùn)練的最終還要把模型跑起來。這里單獨對比兩個框架的模型導(dǎo)出和部署方式。7.1 TensorFlow 部署鏈路TensorFlow 部署推薦使用 SavedModel 格式。只保存模型model.save(mnist_saved_model)加載服務(wù)tensorflow_model_server \ --rest_api_port8501 \ --model_namemnist_model \ --model_base_path/absolute/path/to/mnist_saved_model然后通過 REST API 調(diào)用curl -X POST http://localhost:8501/v1/models/mnist_model:predict \ -H Content-Type: application/json \ -d { instances: [[[0.0, 0.0, 0.0, ...]]] }TensorFlow Serving 的優(yōu)勢在于多版本管理、自動批處理和 gRPC 高性能接口適合微服務(wù)直接接入。7.2 PyTorch 部署鏈路PyTorch 常用方案是導(dǎo)出 ONNX再借助推理框架部署。導(dǎo)出示例dummy_input torch.randn(1, 1, 28, 28, devicedevice) torch.onnx.export( model.cpu(), dummy_input.cpu(), mnist_model.onnx, input_names[input], output_names[output], dynamic_axes{input: {0: batch_size}, output: {0: batch_size}} )拿到 ONNX 文件之后可以用 ONNX Runtime 調(diào)用import onnxruntime as ort import numpy as np session ort.InferenceSession(mnist_model.onnx) input_name session.get_inputs()[0].name output session.run(None, {input_name: np.random.randn(1, 1, 28, 28).astype(float32)}) print(output)也可以在 PyTorch 原生環(huán)境直接做 TorchServe 部署torch-model-archiver \ --model-name cnn_mnist \ --version 1.0 \ --model-file model.py \ --serialized-file mnist_model.pt \ --handler image_classifierTorchServe 提供 RESTful API使用方式和 TF Serving 類似但生態(tài)成熟度和運維工具鏈相對弱一些。從部署角度總結(jié)TensorFlow的部署鏈路更統(tǒng)一一套 SavedModel 走天下。PyTorch研究方便但部署鏈路上你要額外學(xué)習(xí) ONNX、TensorRT、TorchServe 或 vLLM。7.3 通用 API 調(diào)用模板如果兩個框架都已經(jīng)啟動了服務(wù)下面的 Python 模板可以用來做最基本的 HTTP 請求測試import requests # TF Serving 示例 payload_tf {instances: data.tolist()} resp_tf requests.post( http://localhost:8501/v1/models/mnist_model:predict, jsonpayload_tf, timeout30 ) print(resp_tf.json())# TorchServe 示例 payload_ts data.tolist() resp_ts requests.post( http://localhost:8080/predictions/cnn_mnist, jsonpayload_ts, timeout30 ) print(resp_ts.json())實際接口路徑和參數(shù)格式需要按照你的服務(wù)版本與模型配置調(diào)整測試時先檢查返回狀態(tài)碼再處理模型輸出。8. 資源占用與性能觀察方法不管選哪個框架訓(xùn)練性能都要學(xué)會觀察和調(diào)優(yōu)。8.1 實時查看 GPU 占用訓(xùn)練命令執(zhí)行后單獨開一個終端watch -n 1 nvidia-smi重點關(guān)注兩個指標(biāo)Memory Usage顯存占用。Volatile GPU-UtilGPU 利用率。注意顯存占用不等于利用率。有些模型因為數(shù)據(jù)加載瓶頸顯存占用很高但利用率只有個位數(shù)這說明代碼瓶頸在 CPU 端數(shù)據(jù)讀取需要調(diào)整 DataLoader 的num_workers、pin_memory參數(shù)。8.2 降低顯存占用的通用手段TensorFlow 中可以在超參層面做調(diào)整減小batch_size、降低圖像分辨率、使用混合精度mixed_float16。PyTorch 中除了減小 batch還可以使用with torch.cuda.amp.autocast(): output model(batch_x) loss loss_fn(output, batch_y)混合精度對顯存有明顯改善尤其在訓(xùn)練大模型時比較重要。還可以使用梯度累積accumulation_steps 4 loss loss / accumulation_steps loss.backward() if (step 1) % accumulation_steps 0: optimizer.step() optimizer.zero_grad()8.3 推理延遲與批處理實際部署時單條請求延遲和批量吞吐是兩組指標(biāo)。單條請求適合測試 0.1 秒多次請求的延遲批處理適合測試服務(wù)器在高并發(fā)下的吞吐能力。兩條路線的調(diào)優(yōu)手段不同不要只盯著顯存判斷性能。9. 常見問題與排查方法下面對照兩個框架的常見坑問題現(xiàn)象可能原因排查方式解決方案TensorFlow 安裝后提示找不到 cudart64_*.dllCUDA/cuDNN 版本不匹配查看驅(qū)動和包依賴卸載重裝tensorflow[and-cuda]PyTorch 提示 Torch not compiled with CUDA enabled安裝了 CPU 版本pip list查看 torch 版本重新安裝 cu121/cu118 版本兩個框架都在訓(xùn)練時報顯存不足batch_size 過大或分辨率過高nvidia-smi查看占用降低 batch、開啟混合精度、使用梯度累積TensorFlow 啟動模型服務(wù)時端口被占用8501 端口沖突netstat -anogrep 8501PyTorch DataLoader 加載慢數(shù)據(jù)讀取線程數(shù)太少查看 CPU 利用率增加num_workers和pin_memoryTrue代碼在 CPU 上正常GPU 上反而更慢小模型調(diào)度開銷大于計算量實際打印單步耗時小模型不必強上 GPU模型保存后重新加載報結(jié)構(gòu)不匹配自定義類結(jié)構(gòu)變化對比類屬性和構(gòu)造函數(shù)重新保存模型或者僅保存和加載 state_dict安裝慢或超時網(wǎng)絡(luò)連接問題查看 pip 下載進度配置國內(nèi)鏡像源10. 最佳實踐與使用建議10.1 新手學(xué)習(xí)選型建議如果你是純新手第一周不要把時間花在糾結(jié)框架上。直接用 PyTorch 入門配合 HuggingFace 的教程學(xué)習(xí) Transformer、CNN、RNN 的基本實現(xiàn)。等理解了前向傳播、反向傳播、優(yōu)化器這些核心概念后再花兩三天過一遍 TensorFlow 的 Keras 高層 API 工作流知道怎么快速搭一個模型即可。為什么這樣安排因為當(dāng)前學(xué)術(shù)界和開源社區(qū)的代碼示例標(biāo)準(zhǔn)已經(jīng)基本確定PyTorch 的入門成本更低。深度學(xué)習(xí)的關(guān)鍵概念并不會因為框架不同而改變先在 PyTorch 下把概念學(xué)扎實后續(xù)轉(zhuǎn)到 TensorFlow 不會太痛苦。如果你已經(jīng)確定畢業(yè)后要進特定行業(yè)先看目標(biāo)崗位 JD。崗位要求寫 TensorFlow 就學(xué) TensorFlow崗位寫 PyTorch 就學(xué) PyTorch不需要兩頭同時發(fā)力。10.2 項目開發(fā)建議實際項目里不沖突比哪個好更重要訓(xùn)練階段用 PyTorch 節(jié)省時間。導(dǎo)出 ONNX 后交給部署團隊用 TensorRT 或 ONNX Runtime 加速。移動端部署再用 TFLite 轉(zhuǎn)換工具。存量服務(wù)是 TensorFlow 的新的算法模塊也先用 Keras 寫保證部署鏈路一致。10.3 工程化注意事項訓(xùn)練代碼和部署代碼分開管理。每次實驗固定隨機種子保證可復(fù)現(xiàn)。模型文件、數(shù)據(jù)集、日志輸出分目錄管理不打亂原始目錄。寫訓(xùn)練腳本時加入模型評估和 checkpoint 邏輯防止任務(wù)中斷后重新來過。部署到公網(wǎng)的服務(wù)必須加鑒權(quán)和配額限制。11. 2026 年的生態(tài)判斷與學(xué)習(xí)路線建議從目前的社區(qū)趨勢看TensorFlow 和 PyTorch 的差距主要體現(xiàn)在三個方面11.1 論文和開源模型支持大部分最新模型的第一版實現(xiàn)都是 PyTorchHuggingFace 生態(tài)更是直接把 PyTorch 作為默認(rèn)后端。雖然 TensorFlow 也能通過 Transformers 庫加載很多模型但遇到新論文、新數(shù)據(jù)集時PyTorch 的復(fù)現(xiàn)路徑最短。11.2 就業(yè)市場互聯(lián)網(wǎng)和大模型公司算法崗基本是 PyTorch 的天下傳統(tǒng)制造業(yè)、嵌入式視覺、汽電子等領(lǐng)域還存在 TensorFlow 存量項目。如果崗位 JD 同時寫了兩個框架優(yōu)先深入 PyTorch 后補 TensorFlow 基礎(chǔ)。11.3 新入局者的學(xué)習(xí)路徑一個務(wù)實的建議是用 PyTorch 完成一個完整的 CV 項目。用 PyTorch 加載 HuggingFace 的預(yù)訓(xùn)練模型做微調(diào)。把模型導(dǎo)出為 ONNX用 ONNX Runtime 做推理。去 TensorFlow 官網(wǎng)跑通 Keras 的遷移學(xué)習(xí)教程。用 TF Serving 部署一個最簡單模型親身感受 TensorFlow 部署的優(yōu)點。走完這條路徑你對兩個框架的定位會有自己的判斷面試時也能講清楚不同場景下框架選型的依據(jù)。12. 總結(jié)與下一步行動現(xiàn)在不用再去爭論“哪個框架更好”了真正應(yīng)該做的是按自己的方向快速動起來。TensorFlow 的核心價值在工程和部署適合傳統(tǒng)工業(yè)場景和存量系統(tǒng)的同學(xué)PyTorch 的核心價值在研究和迭代適合算法崗和新人入門。如果目標(biāo)明確要做 AI 算法今天就從 PyTorch 的環(huán)境配置開始創(chuàng)建一個虛擬環(huán)境裝好 torch跑通 MNIST然后進入模型微調(diào)的下一個階段。下一步可以做的事情把 MNIST 換成 CIFAR-10 或自己的業(yè)務(wù)數(shù)據(jù)。試用 HuggingFace 的預(yù)訓(xùn)練模型做遷移學(xué)習(xí)。用 ONNX 導(dǎo)出一個模型部署到本地服務(wù)。對比兩個框架在同一個模型上的顯存占用和吞吐。第一次跑通環(huán)境是最關(guān)鍵的一步。建議把上面的命令保存成腳本遇到問題就對照排查表逐項排除。等你跑通了第一個訓(xùn)練任務(wù)深度學(xué)習(xí)的大門就已經(jīng)打開了。