⛏️ Unit 5 — Jalankan Miner Lokal
Di akhir unit ini kamu akan:
- Clone dan install template miner yang sudah kompatibel dengan Bittensor SDK 10.x
- Menjalankan miner di lokal untuk pertama kali dan lihat log koneksi ke testnet
- Menggunakan screen atau tmux supaya miner tetap jalan saat terminal ditutup
- Memverifikasi miner aktif di metagraph (field
Active: True)
- ✅ Unit 4 selesai — punya UID di subnet testnet
- ✅ venv aktif:
source ~/bittensor-env-v10/bin/activate - ✅ Git terinstall:
git --version
⚠️ Kenapa Bukan Template Resmi opentensor?
Template resmi opentensor/bittensor-subnet-template ditulis untuk SDK 9.x dan error di SDK 10.x (yang sekarang jadi versi default pip install bittensor). SDK 10 menghapus semua alias huruf kecil (bt.subtensor, bt.metagraph, bt.wallet, bt.axon, ...) dan menggantinya dengan PascalCase (bt.Subtensor, bt.Metagraph, ...). Template lama masih memakai nama lama di ~18 tempat, jadi langsung error saat dijalankan:
AttributeError: module 'bittensor' has no attribute 'metagraph'
Karena itu kita memakai fork yang sudah di-port ke SDK 10.x:
👉 https://github.com/Ethereum-Jakarta/bittensor-subnet-template-v10
Daftar lengkap perubahannya ada di file PORTING.md di repo tersebut. Fork ini sudah diverifikasi jalan di testnet untuk miner maupun validator.
📦 Step 1 — Clone Subnet Template (versi SDK 10.x)
# Masuk ke home directory
cd ~
# Clone fork yang sudah kompatibel SDK 10.x
git clone https://github.com/Ethereum-Jakarta/bittensor-subnet-template-v10.git
# Masuk ke folder
cd bittensor-subnet-template-v10
Lihat struktur repo:
ls -la
# Kamu akan melihat: neurons/, template/, requirements.txt, PORTING.md, README.md, dst.
🔧 Step 2 — Install Dependencies Subnet Template
Pastikan venv masih aktif (ada (bittensor-env-v10) di prompt).
Install PyTorch versi CPU-only dulu (jauh lebih kecil ~200 MB vs ~2 GB versi CUDA):
pip install torch --index-url https://download.pytorch.org/whl/cpu
Lalu install template. Perintah ini otomatis menarik bittensor 10.x (sudah di-pin di requirements.txt fork):
pip install -e .
Flag -e (editable mode) = package terinstall tapi source tetap di folder aslinya, jadi kalau kamu edit file di template/, perubahan langsung berlaku tanpa reinstall.
pip install -e . — dan jalankan SETELAH torchDua jebakan paling umum di step ini:
- Lewati
pip install -e .→ nantipython neurons/miner.pygagal denganModuleNotFoundError: No module named 'template'. Tanpa-e, foldertemplate/cuma "kebetulan kelihatan" saat kamu di root repo, tapiminer.pydijalankan darineurons/sehingga tidak menemukannya. - Install torch SETELAH
pip install -e .→ torch butuhsetuptools<82dan akan menurunkannya ke 70.2.0, padahal bittensor butuhsetuptools>=78.1.1(muncul warning konflik). Urutan benar: torch dulu, barupip install -e .—-eakan menaikkan setuptools kembali ke 81.x (cocok untuk torch & bittensor).
Kalau kamu terlanjur lihat warning bittensor ... requires setuptools>=78.1.1, but you have setuptools 70.2.0, cukup jalankan ulang pip install -e . (atau pip install 'setuptools>=78.1.1,<82').
setup.py lagiVersi lama panduan ini menyuruh menjalankan sed untuk menghapus baris pkg_resources di setup.py. Fork ini sudah memperbaikinya, jadi langkah itu tidak diperlukan lagi.
Verifikasi — jalankan dari folder lain (/tmp) supaya benar-benar menguji editable install, bukan ketipu folder kerja:
(cd /tmp && python -c "import template; print('Template OK')")
# Output: Template OK
/tmp?Kalau kamu cek python -c "import template" dari dalam folder repo, ia bisa lulus walau pip install -e . belum jalan (Python menemukan folder template/ di cwd). Mengetes dari /tmp memastikan template benar-benar terinstall — sama seperti cara neurons/miner.py mengimpornya. Cek juga: pip show bittensor_subnet_template harus menampilkan path repo kamu.
🚀 Step 3 — Jalankan Miner (Foreground Dulu)
Pertama, jalankan di foreground untuk verifikasi log normal. Jangan langsung ke background.
Ganti --netuid 1 dengan netuid subnet tempat kamu register di Unit 4. Kalau kamu register di subnet lain (karena netuid 1 penuh), pakai netuid itu.
- 🐧 Linux / WSL2
- 🍎 macOS
cd ~/bittensor-subnet-template-v10
python neurons/miner.py \
--netuid 1 \
--wallet.name mywallet \
--wallet.hotkey miner1 \
--subtensor.network test \
--logging.debug
Gunakan caffeinate untuk mencegah Mac tidur dan membunuh miner:
cd ~/bittensor-subnet-template-v10
caffeinate -i python3 neurons/miner.py \
--netuid 1 \
--wallet.name mywallet \
--wallet.hotkey miner1 \
--subtensor.network test \
--logging.debug
macOS agresif mematikan proses saat layar mati atau mode tidur. caffeinate -i mencegah Mac tidur selama miner berjalan.
Log yang Sehat
Kalau hotkey kamu belum teregister di subnet, miner akan langsung berhenti dengan pesan yang jelas (ini benar, bukan bug):
... | ERROR | Wallet (Name: 'mywallet', Hotkey: 'miner1', ...) is not registered on netuid 1.
Please register the hotkey using `btcli subnets register` before trying again
Kalau sudah teregister, log sehat terlihat seperti ini:
... | INFO | Wallet: Wallet (Name: 'mywallet', Hotkey: 'miner1', ...)
... | INFO | Subtensor: <Subtensor ... network: test>
... | INFO | Metagraph: metagraph(netuid:1, ...)
... | INFO | Running neuron on subnet: 1 with uid 42 using network: ...
... | INFO | Serving axon on 0.0.0.0:8091
... | INFO | Miner starting at block: ...
Kamu mungkin melihat pesan seperti No validators found atau Connection refused to validator X — ini normal di awal. Validator testnet tidak selalu aktif. Yang penting tidak ada ImportError atau AttributeError saat startup.
Tekan Ctrl+C untuk stop setelah verifikasi log startup bersih.
🔄 Step 4 — Jalankan Miner di Background
Agar miner tetap jalan saat kamu tutup terminal, gunakan screen atau tmux.
- 📺 Screen (Mudah)
- 🖥️ Tmux (Advanced)
Install screen
# Ubuntu/WSL2/Debian
sudo apt install -y screen
# macOS (via Homebrew)
brew install screen
Buat session baru
screen -S bittensor-miner
Terminal baru terbuka. Di dalam screen, jalankan miner:
- Linux/WSL2
- macOS
source ~/bittensor-env-v10/bin/activate
cd ~/bittensor-subnet-template-v10
python neurons/miner.py \
--netuid 1 \
--wallet.name mywallet \
--wallet.hotkey miner1 \
--subtensor.network test \
--logging.debug
source ~/bittensor-env-v10/bin/activate
cd ~/bittensor-subnet-template-v10
caffeinate -i python3 neurons/miner.py \
--netuid 1 \
--wallet.name mywallet \
--wallet.hotkey miner1 \
--subtensor.network test \
--logging.debug
Detach dari screen (miner tetap jalan)
Tekan Ctrl+A, lalu tekan D (detach).
Terminal normal kembali, tapi miner masih jalan di background.
Kembali ke session miner
screen -r bittensor-miner
Perintah screen penting
screen -ls # list semua session aktif
screen -r bittensor-miner # re-attach ke session
screen -X -S bittensor-miner quit # kill session (stop miner)
Install tmux
# Ubuntu/WSL2
sudo apt install -y tmux
# macOS
brew install tmux
Buat session baru
tmux new -s bittensor-miner
Jalankan miner di dalam tmux:
source ~/bittensor-env-v10/bin/activate
cd ~/bittensor-subnet-template-v10
# Linux/WSL2
python neurons/miner.py --netuid 1 --wallet.name mywallet --wallet.hotkey miner1 --subtensor.network test --logging.debug
# macOS
caffeinate -i python3 neurons/miner.py --netuid 1 --wallet.name mywallet --wallet.hotkey miner1 --subtensor.network test --logging.debug
Detach (miner tetap jalan)
Tekan Ctrl+B, lalu tekan D.
Re-attach
tmux attach -t bittensor-miner
Perintah tmux penting
tmux ls # list sessions
tmux attach -t bittensor-miner # re-attach
tmux kill-session -t bittensor-miner # kill/stop
✅ Step 5 — Verifikasi Miner Aktif
Setelah miner berjalan beberapa menit, buka terminal baru dan verifikasi:
metagraph btcli juga kena — pakai script SDKPer Juni 2026 btcli subnets metagraph --network test gagal (Swap.AlphaSqrtPrice not found). Untuk cek status miner di testnet, pakai metagraph.py dari repo ini — ia menampilkan kolom AXON (ip:port kalau miner kamu sudah serving) dan ACT, persis yang kamu butuhkan di step ini:
# Aktifkan venv di terminal baru, lalu masuk ke folder repo
source ~/bittensor-env-v10/bin/activate
cd ~/bittensor-subnet-template-v10
# Tabel metagraph, baris kamu ditandai '<-- you'
python scripts/metagraph.py --netuid 1 --wallet.name mywallet --wallet.hotkey miner1
Untuk mainnet btcli subnets metagraph --netuid 1 tetap berlaku.
Cari baris kamu (ditandai <-- you). Kolom AXON harus berisi ip:port kamu (bukan —):
UID STAKE TRUST INCENT DIVID EMISSION VP ACT UPD AXON HOTKEY
------------------------------------------------------------------------------------------------
87 0.0000 0.000 0.0000 0.0000 0.000000 · Y 3 174.61.251.162:8091 5GNaMz7WkB… <-- you
—AXON = ip:port = miner kamu sudah serving axon dan validator bisa menemukannya.
AXON = — = miner belum serving / port tidak accessible (firewall, CGNAT). Lihat Unit 6.
🗂️ Struktur Direktori Miner
Setelah setup, direktori lokal kamu:
~/
├── bittensor-env-v10/ # Python venv (btcli + SDK 10.x)
│ └── bin/
│ ├── activate
│ ├── btcli
│ └── python
├── bittensor-subnet-template-v10/ # Repo miner (fork SDK 10.x)
│ ├── neurons/
│ │ └── miner.py # Entry point
│ ├── template/ # Logic subnet
│ ├── PORTING.md # Catatan port ke SDK 10.x
│ └── requirements.txt
└── .bittensor/
└── wallets/
└── mywallet/
├── coldkey
├── coldkeypub.txt
└── hotkeys/
└── miner1
🐛 Troubleshooting Menjalankan Miner
| Error | Penyebab | Solusi |
|---|---|---|
AttributeError: module 'bittensor' has no attribute 'metagraph' | Kamu memakai template resmi (SDK 9.x) di atas SDK 10.x | Pakai fork ini: git clone https://github.com/Ethereum-Jakarta/bittensor-subnet-template-v10.git |
ModuleNotFoundError: No module named 'template' | pip install -e . belum dilakukan | cd ~/bittensor-subnet-template-v10 && pip install -e . |
... is not registered on netuid N | Hotkey belum teregister di subnet itu | Register dulu (Unit 4): btcli subnet register --netuid N --wallet-name mywallet --hotkey miner1 --network test |
Wallet not found | Nama wallet/hotkey salah | Cek: btcli wallet list |
Connection refused saat startup | Testnet subtensor offline sementara | Tunggu 5–10 menit, coba lagi |
Port 8091 already in use | Ada proses lain pakai port 8091 | lsof -i :8091 → kill PID tersebut; atau ganti port: --axon.port 8092 |
| macOS: miner mati saat layar mati | caffeinate tidak dipakai | Tambah caffeinate -i sebelum python3 |
| WSL2: koneksi ke subtensor gagal | WSL2 network bridging issue | Coba: wsl --shutdown di PowerShell, restart WSL2 |
🎯 Rangkuman
- Template resmi
opentensorerror di SDK 10.x → kita pakai forkEthereum-Jakarta/bittensor-subnet-template-v10 - Install: CPU torch dulu, lalu
pip install -e .(otomatis menarikbittensor10.x) — tanpa patchsed - Jalankan foreground dulu untuk verifikasi log startup bersih
- screen atau tmux = cara miner tetap jalan saat terminal ditutup
- macOS: wajib pakai
caffeinate -iuntuk mencegah sleep - Verifikasi (testnet):
python scripts/metagraph.py --netuid 1 --wallet.name mywallet --wallet.hotkey miner1→ kolom AXON baris kamu berisiip:port
✅ Quick Check
- Kenapa kita pakai fork
bittensor-subnet-template-v10, bukan template resmiopentensor? - Kenapa kita install subnet template dengan
pip install -e .bukanpip install .? - Apa yang terjadi pada miner kalau terminal ditutup tanpa screen/tmux?
- Bedanya
Active: TruevsActive: Falsedi metagraph?
💡 Jawaban
- Template resmi memakai API SDK 9.x (alias huruf kecil seperti
bt.metagraph) yang dihapus di SDK 10.x, jadi langsungAttributeError. Fork sudah di-port ke API PascalCase SDK 10.x. -e(editable mode) = package terinstall tapi source masih di folder aslinya. Kalau kamu edit file ditemplate/, perubahan langsung berlaku tanpa reinstall. Cocok untuk development.- Miner akan mati ketika terminal ditutup karena prosesnya adalah child process dari shell session tersebut. Screen/tmux memisahkan proses dari sesi terminal.
Active: True= validator bisa reach axon endpoint miner.Active: False= endpoint tidak accessible (biasanya firewall atau CGNAT).
Next: Unit 6 — Koneksi, Port & Ngrok untuk CGNAT →
Miner kamu hidup! Sekarang pastikan validator bisa menemukannya. 🌐