openpi 入門教程

系列文章目錄

目錄

系列文章目錄

前言

一、運行要求

二、安裝

三、模型檢查點

3.1 基礎模型

3.2 微調模型

四、運行預訓練模型的推理

五、在自己的數據上微調基礎模型

5.1. 將數據轉換為 LeRobot 數據集

5.3. 啟動策略服務器并運行推理

5.4 更多示例

六、故障排除

七、遠程運行 openpi 模型

7.1 啟動遠程策略服務器

7.2 從機器人代碼中查詢遠程策略服務器

八、推理教程

8.1 策略推斷

8.2 使用實時模型

九、策略記錄代碼


前言

????????openpi 包含物理智能團隊發布的機器人開源模型和軟件包。

????????目前,該 repo 包含兩種模型:

  • π? 模型,一種基于流的擴散視覺-語言-動作模型 (VLA)
  • π?-FAST 模型,一種基于 FAST 動作標記器的自回歸 VLA。

????????對于這兩種模型,我們都提供了在 10K+ 小時的機器人數據上預先訓練過的基本模型檢查點,以及用于開箱即用或根據您自己的數據集進行微調的示例。

????????這是一次實驗:π0 是為我們自己的機器人開發的,與 ALOHA 和 DROID 等廣泛使用的平臺不同,盡管我們樂觀地認為,研究人員和從業人員將能夠進行創造性的新實驗,將π0 適應到他們自己的平臺上,但我們并不指望每一次這樣的嘗試都能成功。綜上所述:π0 可能對你有用,也可能對你沒用,但我們歡迎你去試試看!


一、運行要求

????????要運行本資源庫中的模型,您需要至少具備以下規格的英偉達?(NVIDIA?)圖形處理器。這些估算假設使用的是單 GPU,但您也可以通過在訓練配置中配置 fsdp_devices,使用多 GPU 并行模型來減少每個 GPU 的內存需求。還請注意,當前的訓練腳本還不支持多節點訓練。

ModeMemory RequiredExample GPU
Inference> 8 GBRTX 4090
Fine-Tuning (LoRA)> 22.5 GBRTX 4090
Fine-Tuning (Full)> 70 GBA100 (80GB) / H100

????????該軟件包已在 Ubuntu 22.04 上進行了測試,目前不支持其他操作系統。

二、安裝

????????克隆此 repo 時,確保更新子模塊:

git clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git# Or if you already cloned the repo:
git submodule update --init --recursive

????????我們使用 uv 來管理 Python 的依賴關系。請參閱 uv 安裝說明進行設置。安裝好 uv 后,運行以下命令來設置環境:

GIT_LFS_SKIP_SMUDGE=1 uv sync
GIT_LFS_SKIP_SMUDGE=1 uv pip install -e .

????????注意:需要 GIT_LFS_SKIP_SMUDGE=1 才能將 LeRobot 作為依賴項。

????????Docker 作為 uv 安裝的替代方案,我們提供了使用 Docker 安裝 openpi 的說明。如果遇到系統設置問題,可以考慮使用 Docker 簡化安裝。更多詳情,請參閱 Docker 安裝。

三、模型檢查點

3.1 基礎模型

????????我們提供多個基礎 VLA 模型檢查點。這些檢查點已在 10k+ 小時的機器人數據上進行了預訓練,可用于微調。

ModelUse CaseDescriptionCheckpoint Path
π0Fine-TuningBase diffusion?π? model?for fine-tunings3://openpi-assets/checkpoints/pi0_base
π0-FASTFine-TuningBase autoregressive?π?-FAST model?for fine-tunings3://openpi-assets/checkpoints/pi0_fast_base

3.2 微調模型

????????我們還為各種機器人平臺和任務提供 “專家 ”檢查點。這些模型在上述基礎模型的基礎上進行了微調,旨在直接在目標機器人上運行。這些模型不一定適用于您的特定機器人。由于這些檢查點是在使用 ALOHA 和 DROID Franka 等更廣泛使用的機器人收集的相對較小的數據集上進行微調的,因此它們可能無法適用于您的特定設置,不過我們發現其中一些檢查點,尤其是 DROID 檢查點,在實踐中具有相當廣泛的適用性。

ModelUse CaseDescriptionCheckpoint Path
π0-FAST-DROIDInferenceπ0-FAST model fine-tuned on the?DROID dataset, can perform a wide range of simple table-top manipulation tasks 0-shot in new scenes on the DROID robot platforms3://openpi-assets/checkpoints/pi0_fast_droid
π0-DROIDFine-Tuningπ0?model fine-tuned on the?DROID dataset, faster inference than?π0-FAST-DROID, but may not follow language commands as wells3://openpi-assets/checkpoints/pi0_droid
π0-ALOHA-towelInferenceπ0?model fine-tuned on internal ALOHA data, can fold diverse towels 0-shot on?ALOHA?robot platformss3://openpi-assets/checkpoints/pi0_aloha_towel
π0-ALOHA-tupperwareInferenceπ0?model fine-tuned on internal ALOHA data, can unpack food from a tupperware containers3://openpi-assets/checkpoints/pi0_aloha_tupperware
π0-ALOHA-pen-uncapInferenceπ0?model fine-tuned on?public ALOHA data, can uncap a pens3://openpi-assets/checkpoints/pi0_aloha_pen_uncap

????????默認情況下,檢查點會自動從 s3://openpi-assets 下載,并在需要時緩存到 ~/.cache/openpi 中。你可以通過設置 OPENPI_DATA_HOME 環境變量來覆蓋下載路徑。

四、運行預訓練模型的推理

????????我們的預訓練模型檢查點只需幾行代碼即可運行(此處為我們的 π0-FAST-DROID 模型):

from openpi.training import config
from openpi.policies import policy_config
from openpi.shared import downloadconfig = config.get_config("pi0_fast_droid")
checkpoint_dir = download.maybe_download("s3://openpi-assets/checkpoints/pi0_fast_droid")# Create a trained policy.
policy = policy_config.create_trained_policy(config, checkpoint_dir)# Run inference on a dummy example.
example = {"observation/exterior_image_1_left": ...,"observation/wrist_image_left": ...,..."prompt": "pick up the fork"
}
action_chunk = policy.infer(example)["actions"]

????????您也可以在示例筆記本中進行測試。

????????我們提供了在 DROID 和 ALOHA 機器人上運行預訓練檢查點推理的詳細分步示例。

  • 遠程推理: 我們提供了遠程運行模型推理的示例和代碼:模型可以在不同的服務器上運行,并通過 websocket 連接向機器人發送動作流。這樣就可以輕松地在機器人外使用更強大的 GPU,并將機器人和策略環境分開。
  • 在沒有機器人的情況下測試推理: 我們提供了一個腳本,用于在沒有機器人的情況下測試推理。該腳本將生成隨機觀測數據,并使用模型運行推理。更多詳情,請參閱此處。

五、在自己的數據上微調基礎模型

????????我們將在 Libero 數據集上微調 π0-FAST 模型,作為如何在自己的數據上微調基礎模型的運行示例。我們將解釋三個步驟:

  1. 將您的數據轉換為 LeRobot 數據集(我們使用該數據集進行訓練)
  2. 定義訓練配置并運行訓練
  3. 啟動策略服務器并運行推理

5.1. 將數據轉換為 LeRobot 數據集

????????我們在 examples/libero/convert_libero_data_to_lerobot.py 中提供了將 Libero 數據轉換為 LeRobot 數據集的最小示例腳本。您可以輕松修改它,轉換自己的數據!您可以從這里下載原始的 Libero 數據集,并使用以下命令運行腳本:

uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/libero/data

5.2. 定義訓練配置和運行訓練

????????要在自己的數據上對基礎模型進行微調,您需要定義用于數據處理和訓練的配置。下面我們提供了帶有詳細注釋的 Libero 配置示例,您可以根據自己的數據集進行修改:

  • LiberoInputs 和 LiberoOutputs: 定義從 Libero 環境到模型的數據映射,反之亦然。將用于訓練和推理。
  • LeRobotLiberoDataConfig: 定義如何處理 LeRobot 數據集中用于訓練的 Libero 原始數據。
  • TrainConfig:訓練配置: 定義微調超參數、數據配置和權重加載器。

????????我們提供了π?和π?-FAST 在 Libero 數據上的微調配置示例。

????????在運行訓練之前,我們需要計算訓練數據的歸一化統計量。使用訓練配置的名稱運行下面的腳本:

uv run scripts/compute_norm_stats.py --config-name pi0_fast_libero

????????現在,我們可以使用以下命令啟動訓練(如果使用相同配置重新運行微調,則 --overwrite 標志用于覆蓋現有檢查點):

XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi0_fast_libero --exp-name=my_experiment --overwrite

????????該命令會將訓練進度記錄到控制臺,并將檢查點保存到檢查點目錄。您還可以在權重與偏差儀表板上監控訓練進度。為了最大限度地使用 GPU 內存,請在運行訓練之前設置 XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 -- 這將使 JAX 能夠使用高達 90% 的 GPU 內存(默認值為 75%)。

注:我們提供了從預訓練開始重新加載狀態/動作歸一化統計數據的功能。如果您要對預訓練混合物中的機器人新任務進行微調,這將非常有用。有關如何重新加載歸一化統計數據的詳細信息,請參閱 norm_stats.md 文件。

5.3. 啟動策略服務器并運行推理

????????訓練完成后,我們就可以啟動策略服務器,然后通過 Libero 評估腳本進行查詢,從而運行推理。啟動模型服務器非常簡單(本例使用迭代 20,000 的檢查點,可根據需要修改):

uv run scripts/serve_policy.py policy:checkpoint --policy.config=pi0_fast_libero --policy.dir=checkpoints/pi0_fast_libero/my_experiment/20000

????????這將啟動一個服務器,該服務器監聽 8000 端口,并等待向其發送觀察結果。然后,我們就可以運行 Libero 評估腳本來查詢服務器。有關如何安裝 Libero 和運行評估腳本的說明,請參閱 Libero README。

????????如果你想在自己的機器人運行時中嵌入策略服務器調用,我們在遠程推理文檔中提供了一個最簡單的示例。

5.4 更多示例

????????我們在以下 READMEs 中提供了更多示例,說明如何在 ALOHA 平臺上使用我們的模型進行微調和推理:

  • ALOHA 模擬器
  • ALOHA 真實
  • UR5

六、故障排除

????????我們將在此收集常見問題及其解決方案。如果遇到問題,請先查看此處。如果找不到解決方案,請在軟件倉庫中提交問題(參見此處的指導原則)。

IssueResolution
uv 同步因依賴關系沖突而失敗嘗試刪除虛擬環境目錄(rm -rf .venv)并重新運行 uv 同步。如果問題仍然存在,請檢查是否安裝了最新版本的 uv(uv self update)。
訓練耗盡 GPU 內存確保在運行訓練之前設置 XLA_PYTHON_CLIENT_MEM_FRACTION=0.9,以允許 JAX 使用更多 GPU 內存。您也可以嘗試在訓練配置中減少批量大小。
策略服務器連接錯誤檢查服務器是否正在運行,是否在預期端口上監聽。驗證客戶端和服務器之間的網絡連接和防火墻設置。
訓練時缺失常模統計錯誤在開始訓練前使用配置名稱運行 scripts/compute_norm_stats.py。
數據集下載失敗檢查網絡連接。如果使用 local_files_only=True,請確認數據集是否存在于本地。對于 HuggingFace 數據集,請確保已登錄(huggingface-cli 登錄)。
CUDA/GPU 錯誤驗證英偉達驅動程序和 CUDA 工具包是否安裝正確。對于 Docker,確保已安裝 nvidia-container-toolkit。檢查 GPU 兼容性。
運行示例時出現導入錯誤確保使用 uv sync 安裝了所有依賴項并激活了虛擬環境。某些示例的 READMEs 中可能列出了其他要求。
動作尺寸不匹配驗證您的數據處理轉換是否與機器人的預期輸入/輸出尺寸相匹配。檢查策略類中的動作空間定義。

七、遠程運行 openpi 模型

????????我們提供了遠程運行 openpi 模型的實用程序。這對于在機器人外更強大的 GPU 上運行推理非常有用,還有助于將機器人環境和策略環境分開(例如,避免機器人軟件的依賴性地獄)。

7.1 啟動遠程策略服務器

????????要啟動遠程策略服務器,只需運行以下命令即可:

uv run scripts/serve_policy.py --env=[DROID | ALOHA | LIBERO]

????????env 參數指定應加載哪個 π0 檢查點。在腳本引擎蓋下,該腳本將執行類似下面的命令,你可以用它來啟動策略服務器,例如為你自己訓練的檢查點啟動策略服務器(這里以 DROID 環境為例):

uv run scripts/serve_policy.py policy:checkpoint --policy.config=pi0_fast_droid --policy.dir=s3://openpi-assets/checkpoints/pi0_fast_droid

????????這將啟動一個策略服務器,為 config 和 dir 參數指定的策略提供服務。策略將通過指定端口(默認:8000)提供。

7.2 從機器人代碼中查詢遠程策略服務器

????????我們提供的客戶端實用程序依賴性極低,您可以輕松將其嵌入到任何機器人代碼庫中。

????????首先,在機器人環境中安裝 openpi-client 軟件包:

cd $OPENPI_ROOT/packages/openpi-client
pip install -e .

????????然后,您就可以使用客戶端從機器人代碼中查詢遠程策略服務器。下面舉例說明如何做到這一點:

from openpi_client import image_tools
from openpi_client import websocket_client_policy# Outside of episode loop, initialize the policy client.
# Point to the host and port of the policy server (localhost and 8000 are the defaults).
client = websocket_client_policy.WebsocketClientPolicy(host="localhost", port=8000)for step in range(num_steps):# Inside the episode loop, construct the observation.# Resize images on the client side to minimize bandwidth / latency. Always return images in uint8 format.# We provide utilities for resizing images + uint8 conversion so you match the training routines.# The typical resize_size for pre-trained pi0 models is 224.# Note that the proprioceptive `state` can be passed unnormalized, normalization will be handled on the server side.observation = {"observation/image": image_tools.convert_to_uint8(image_tools.resize_with_pad(img, 224, 224)),"observation/wrist_image": image_tools.convert_to_uint8(image_tools.resize_with_pad(wrist_img, 224, 224)),"observation/state": state,"prompt": task_instruction,}# Call the policy server with the current observation.# This returns an action chunk of shape (action_horizon, action_dim).# Note that you typically only need to call the policy every N steps and execute steps# from the predicted action chunk open-loop in the remaining steps.action_chunk = client.infer(observation)["actions"]# Execute the actions in the environment....

????????這里,主機和端口參數指定了遠程策略服務器的 IP 地址和端口。您也可以將這些參數指定為機器人代碼的命令行參數,或在機器人代碼庫中硬編碼。觀察結果是觀察結果和提示的字典,與您所服務的策略的策略輸入相一致。在簡單的客戶端示例中,我們提供了如何在不同環境下構建該字典的具體示例。

八、推理教程

import dataclassesimport jaxfrom openpi.models import model as _model
from openpi.policies import droid_policy
from openpi.policies import policy_config as _policy_config
from openpi.shared import download
from openpi.training import config as _config
from openpi.training import data_loader as _data_loader

8.1 策略推斷

????????下面的示例展示了如何從檢查點創建策略,并在虛擬示例上運行推理。

config = _config.get_config("pi0_fast_droid")
checkpoint_dir = download.maybe_download("s3://openpi-assets/checkpoints/pi0_fast_droid")# Create a trained policy.
policy = _policy_config.create_trained_policy(config, checkpoint_dir)# Run inference on a dummy example. This example corresponds to observations produced by the DROID runtime.
example = droid_policy.make_droid_example()
result = policy.infer(example)# Delete the policy to free up memory.
del policyprint("Actions shape:", result["actions"].shape)

8.2 使用實時模型

????????下面的示例展示了如何從檢查點創建實時模型并計算訓練損失。首先,我們將演示如何使用假數據。

config = _config.get_config("pi0_aloha_sim")checkpoint_dir = download.maybe_download("s3://openpi-assets/checkpoints/pi0_aloha_sim")
key = jax.random.key(0)# Create a model from the checkpoint.
model = config.model.load(_model.restore_params(checkpoint_dir / "params"))# We can create fake observations and actions to test the model.
obs, act = config.model.fake_obs(), config.model.fake_act()# Sample actions from the model.
loss = model.compute_loss(key, obs, act)
print("Loss shape:", loss.shape)

????????現在,我們將創建一個數據加載器,并使用一批真實的訓練數據來計算損失。

# Reduce the batch size to reduce memory usage.
config = dataclasses.replace(config, batch_size=2)# Load a single batch of data. This is the same data that will be used during training.
# NOTE: In order to make this example self-contained, we are skipping the normalization step
# since it requires the normalization statistics to be generated using `compute_norm_stats`.
loader = _data_loader.create_data_loader(config, num_batches=1, skip_norm_stats=True)
obs, act = next(iter(loader))# Sample actions from the model.
loss = model.compute_loss(key, obs, act)# Delete the model to free up memory.
del modelprint("Loss shape:", loss.shape)

九、策略記錄代碼

import pathlibimport numpy as nprecord_path = pathlib.Path("../policy_records")
num_steps = len(list(record_path.glob("step_*.npy")))records = []
for i in range(num_steps):record = np.load(record_path / f"step_{i}.npy", allow_pickle=True).item()records.append(record)
print("length of records", len(records))
print("keys in records", records[0].keys())for k in records[0]:print(f"{k} shape: {records[0][k].shape}")
from PIL import Imagedef get_image(step: int, idx: int = 0):img = (255 * records[step]["inputs/image"]).astype(np.uint8)return img[idx].transpose(1, 2, 0)def show_image(step: int, idx_lst: list[int]):imgs = [get_image(step, idx) for idx in idx_lst]return Image.fromarray(np.hstack(imgs))for i in range(2):display(show_image(i, [0])
import pandas as pddef get_axis(name, axis):return np.array([record[name][axis] for record in records])# qpos is [..., 14] of type float:
# 0-5: left arm joint angles
# 6: left arm gripper
# 7-12: right arm joint angles
# 13: right arm gripper
names = [("left_joint", 6), ("left_gripper", 1), ("right_joint", 6), ("right_gripper", 1)]def make_data():cur_dim = 0in_data = {}out_data = {}for name, dim_size in names:for i in range(dim_size):in_data[f"{name}_{i}"] = get_axis("inputs/qpos", cur_dim)out_data[f"{name}_{i}"] = get_axis("outputs/qpos", cur_dim)cur_dim += 1return pd.DataFrame(in_data), pd.DataFrame(out_data)in_data, out_data = make_data()
for name in in_data.columns:data = pd.DataFrame({f"in_{name}": in_data[name], f"out_{name}": out_data[name]})data.plot()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905704.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905704.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905704.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java加強 -Collection集合

集合是一種容器,類似于數組,但集合的大小可變,開發中也非常常用。Collection代表單列集合,每個元素(數據)只包含1個值。Collection集合分為兩類,List集合與set集合。 特點 List系列集合&#…

深入理解ThingsBoard的Actor模型

1、ThingsBoard系統中定義了哪些Actor ? ThingsBoard Actor 創建機制與作用對照表: Actor 類型 何時創建 由誰創建 是否緩存 作用描述 SystemActor 系統啟動時 DefaultActorService / ActorSystem ? 是 ★ ThingsBoard 平臺服務級別管理器:負責創建所有的Actor AppActor

WPS一旦打開,就會修改默認打開方式,怎么解?

目錄 前言 解決方法 結語 前言 電腦上同時存在WPS和微軟的Office全家桶,但是我更喜歡用Office全家桶。前幾天剛在設置改過來,忘記更改pdf文件打開默認應用。結果沒過幾天,不小心用WPS打開pdf文件時候,給我把默認設置全改回去了…

深度學習中--模型調試與可視化

第一部分:損失函數與準確率的監控(Loss / Accuracy Curve) 1. 為什么要監控 Loss 與 Accuracy? Loss 是模型優化的依據,但它可能下降了 Accuracy 反而沒變(過擬合信號) Accuracy 才是評估效果的…

中間件-RocketMQ

RocketMQ 基本架構消息模型消費者消費消息模式順序消息機制延遲消息批量消息事務消息消息重試最佳實踐 基本架構 nameServer: 維護broker列表信息,客戶端連接時只需要連接nameServer。可配置成集群。 broker:broker分為master和slave,master負…

anaconda3如何切換虛擬環境

在 Anaconda3 中切換虛擬環境可以通過 命令行 或 Anaconda Navigator 圖形界面實現。以下是詳細步驟: 方法1:通過命令行切換(推薦) 1. 查看所有虛擬環境 conda env list # 或 conda info --envs 輸出示例: base …

【vue】axios網絡請求介紹

一、基礎使用 1.引入js文件 2.在methods中的函數里寫 axios.get(路徑) .then((res))>{ console.log(res.data);//控制臺打印結果數據 this.listArrres.data//定義數組來接收返回來的數據 }) 二、參數傳遞 參數傳遞一般在路徑后面使用 params:{ num:2,…

機器學習 --- KNN算法

機器學習 — KNN算法 文章目錄 機器學習 --- KNN算法一,sklearn機器學習概述二,KNN算法---分類2.1樣本距離判斷2.2 KNN算法原理2.3 KNN缺點2.4 API2.5 使用sklearn中鳶尾花數據集實現KNN 一,sklearn機器學習概述 獲取數據、數據處理、特征工…

Spring Boot 中的重試機制

Retryable 注解簡介 Retryable 注解是 Spring Retry 模塊提供的,用于自動重試可能會失敗的方法。在微服務架構和分布式系統中,服務之間的調用可能會因為網絡問題、服務繁忙等原因失敗。使用 Retryable 可以提高應用的穩定性和容錯能力 1。 使用步驟 &…

FPGA生成隨機數的方法

FPGA生成隨機數的方法,目前有以下幾種: 1、震蕩采樣法 實現方式一:通過低頻時鐘作為D觸發器的時鐘輸入端,高頻時鐘作為D觸發器的數據輸入端,使用高頻采樣低頻,利用亞穩態輸出隨機數。 實現方式二:使用三個…

(五)毛子整潔架構(分布式日志/Redis緩存/OutBox Pattern)

文章目錄 項目地址一、結構化日志1.1 使用Serilog1. 安裝所需要的包2. 注冊服務和配置3. 安裝Seq服務 1.2 添加分布式id中間件1. 添加中間件2. 注冊服務3. 修改Application的LoggingBehavior 二、Redis緩存2.1 添加緩存1. 創建接口ICaching接口2. 實現ICaching接口3. 注冊Cachi…

Vue.js 全局導航守衛:深度解析與應用

在 Vue.js 開發中,導航守衛是一項極為重要的功能,它為開發者提供了對路由導航過程進行控制的能力。其中,全局導航守衛更是在整個應用的路由切換過程中發揮著關鍵作用。本文將深入探討全局導航守衛的分類、作用以及參數等方面內容。 一、全局…

使用FastAPI和React以及MongoDB構建全棧Web應用05 FastAPI快速入門

一、FastAPI概述 1.1 什么是FastAPI FastAPI is a modern, high-performance Python web framework designed for building APIs. It’s rapidly gaining popularity due to its ease of use, speed, and powerful features. Built on top of Starlette, FastAPI leverages a…

如何查看打開的 git bash 窗口是否是管理員權限打開

在 git bash 中輸入: net session >nul 2>&1 && (echo Ok) || (echo Failed) 顯示 OK 》是管理員權限; 顯示 Failed 》不是管理員權限。 如何刪除此步生成的垃圾文件: 新建一個 .txt 文件,輸入以下代碼…

得物0509面試手撕題目解答

題目 使用兩個棧(一個無序棧和一個空棧)將無序棧中的元素轉移到空棧,使其有序,不允許使用其他數據結構。 示例:輸入:[3, 1, 6, 4, 2, 5],輸出:[6, 5, 4, 3, 2, 1] 思路與代碼 如…

基于 Nexus 在 Dockerfile 配置 yum, conda, pip 倉庫的方法和參考

在 Nexus 配置代理倉庫的方法,可參考 pypi 的配置博客:https://hellogitlab.com/CI/docker/create_your_nexus_2 更多代理格式,參考官方文檔,如 pypi:https://help.sonatype.com/en/pypi-repositories.html 配置 yum…

[6-8] 編碼器接口測速 江協科技學習筆記(7個知識點)

1 2 在STM32微控制器的定時器模塊中,CNT通常指的是定時器的計數器值。以下是CNT是什么以及它的用途: 是什么: ? CNT:代表定時器的當前計數值。在STM32中,定時器從0開始計數,直到達到預設的自動重裝載值&am…

RabbitMQ ③-Spring使用RabbitMQ

Spring使用RabbitMQ 創建 Spring 項目后&#xff0c;引入依賴&#xff1a; <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp --> <dependency><groupId>org.springframework.boot</groupId><artifac…

海外IP被誤封解決方案

這里使用Google Cloud和Cloudflare來實現&#xff0c;解決海外服務器被誤封IP&#xff0c;訪問不到的問題。 這段腳本的核心目的&#xff0c;是自動監測你在 Cloudflare 上管理的 VPS 域名是否可達&#xff0c;一旦發現域名無法 Ping 通&#xff0c;就會幫你更換IP&#xff1a…

一個基于 Spring Boot 的實現,用于代理百度 AI 的 OCR 接口

一個基于 Spring Boot 的實現&#xff0c;用于代理百度 AI 的 OCR 接口 BaiduAIController.javaBaiduAIConfig.java在 application.yml 或 application.properties 中添加配置&#xff1a;application.yml同時&#xff0c;需要在Spring Boot應用中配置RestTemplate&#xff1a;…