- 硬體環境
- CPU: 9800x3d
- RAM: 64GB
- GPU: Nvidia 3080-ti 12G
- OS: Windows 11
- 準備
- Ubuntu 24.04 on WSL2
- sudo apt update
- sudo apt upgrade
- sudo apt install build-essential cmake git wget python3-pip
- 參考資料
- Getting Started with LLaMA.cpp (A Complete Guide)
- 由此可知需要 cmake
- https://github.com/ggml-org/llama.cpp
- 主要以此 repo 為主
- Hugging Face – The AI community building the future.
- 下載 model 的地方
- llama.cpp 有"-hf"可以直接指定 model 的方式
- https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
- Nvida CUDA Toolkit
- 開始
- 註: 我都是在"~"家目錄下
- git clone https://github.com/ggerganov/llama.cpp
- 把 llama.cpp 抓下來
- cd llama.cpp(依需求選擇)
- 分支 - llama.cpp build no GPU
- cmake -B build
- 這裡會跑一陣子
- cmake --build build --config Release -j $(nproc)
- -j $(nproc): 啟用多執行緒來進行 build
- 這裡會跑百分比進度
- llama.cpp 裡會多不少東西,但主要是要"bin"裡的東西
- 註: 建議把"~/llama.cpp/bin"加到 PATH 中
- 分支 - llama.cpp build with Nvidia GPU
- mkdir build
- cd build
- build 資料匣只是為了要放 cuda toolkit 的東西
- wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
- 下載 cuda toolkit(network)
- sudo dpkg -i cuda-keyring_1.1-1_all.deb
- 安裝 cuda toolkit(network)
- 這裡是讓 apt repo 有 cuda toolkit 的站台,以方便之後透過 apt 安裝
- sudo apt update
- sudo apt install cuda-toolkit-13-3
- 有一說 4000/5000 系列的 n 卡安裝 13.3, 其他的安裝 12.6(cuda-toolkit-12-6),雖然我的顯卡是 3080ti,但我想用 13.3
- ls -liah /usr/local/cuda/bin
- 如果 toolkit 安裝都正常的話,在這個路徑下就會有東西
- export PATH=/usr/local/cuda/bin:$PATH
- 因為之後 build llama.cpp 時會用到 nvcc,所以要把 cuda/bin 加到 PATH 中,但我個人建議加到".bashrc"
- export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
- 也是在 build llama.cpp 會用到,也建議加到".bashrc"
- cmake .. -DGGML_CUDA=ON
- 這裡會跑一陣子
- 註: 目前的路徑是在"~/llama.cpp/build"
- cmake --build . --config Release -j $(nproc)
- 這裡會跑百分比進度
- llama.cpp/build 裡會多不少東西,但主要是要"bin"裡的東西
- 註1: 目前的路徑是在"~/llama.cpp/build"
- 註2: 建議把"~/llama.cpp/build/bin"也加到 PATH 中
- 測試
- nvcc -V
- 如果是走有要用 N 卡的話,可以測試 nvcc
- llama-cli --version
- 要記得相關的 bin 要加到 PATH 中
- CLI 啟動
- llama-cli -hf unsloth/Qwen3.5-0.8B-GGUF:UD-Q4_K_XL
- 顯卡有 6G 的可以使用千問這個極簡的小模型
- 顯卡有 8G 的可以使用 unsloth/gemma-4-E4B-it-GGUF:UD-Q4_K_XL
- 顯卡有 12G 的可以使用 unsloth/gemma-4-12b-it-GGUF:UD-Q4_K_XL
- 這個其實會把只剛好有 12G Vram 的給吃的滿滿的,要避免一些問題的話,建議還是上 16G
- webUI 啟動
- llama-server -hf unsloth/gemma-4-E4B-it-GGUF:UD-Q4_K_XL --port 8088
死狐狸的單行本
狐狸的腳是滑的…
但死狐狸呢?哈哈…腦袋中想的東西是滑溜溜的…
2026-06-06
在 Ubuntu on WSL2 裡打造 localLLM 的環境
2024-12-28
在用 Docker 架設 MSSQL 時,容器的啟用會警告 [Error response from daemon: Ports are not available...]
在網路上查到的文章大至上得到的說明是,這是因為 windows 可能在某個版本的升級開始會把某些 port 或某個範圍的 port 給「保留」,其中就有包含 mssql 一般慣用的 1433/tcp,而 windows 的一個 HNS 的服務有把一些 port 給「保留」
但也有一說是因為 windows 本身使用了 Hyper-V 把 1433/tcp 給保留了起來
我比較認為是 hyper-v 的問的,因為我目前的 docker 並不是運行在 WSL2 的,還是在比較早期要用 hyper-v 的虛擬機上,所以我比較認為是 hyper-v 引起的
故,如果有跟我遇到一樣問是的,可以先用
netsh interface ipv4 show excludedportrange protocol=tcp
的指定來列出被「保留」下來的 tcp port (注: 上述的指令要用「管理員身份」去執行)
如果上述的指令沒有列出你用到的 port ,那你的問題就比較偏向是你要用的 port 已被你電腦中其他的程序佔用,又或者是其他的程序先加到他自己的「保留」了,那有以下方式你可以試試
- netstat -ano|findstr "port"
- 此是先找目前電腦 listen 的 port 是不是有你要用的,如果有出現,此指令也會列出用這個 port 的 process id(PID),你如果確定這個程序你沒有要用或可以改 port 那你就中止這個程序或去改 port
- 如果沒列出來,那再走以下的建議方式
- net stop winnat && net start winnat
- 把 winnat 這服務重啟,這個服務重啟後再去看上述「excludedportrange」的指令,理論上應該就會列出來的項目變少了
- 此方式理論上應該是可以直接解決問題,但只是麻煩點,有可能要你在啟動 docker 容器時發現「Ports are not available...」時就要把 winnat 服務重啟,但我覺得此方式相對保險
- 因為認為是 hyper-v 搞的,那來對 hyper-v 處理
- dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
- 先把 hyper-v 這功能停用(注意: 如果你跟我一樣 docker 目前是跑在 hyper-v 上面的,這指令下去你 docker 就會異常,直到重新把 hyper-v 啟用)
- netsh interface ipv4 add excludedportrange protocol=tcp startport={port} numberofports=1
- 把你的 {port} 增加到你自己要保留的設定中,這設定會讓有其他程序要用 {port} 時反而系統會告知該程序這個 {port} 已被保留不能用
- dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /ALL
- 重新啟用 Hyper-v(注意: 如果重新啟用 hyper-v 後 docker 啟動有問題,那建議把 docker 重新安裝)
- reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f
- 此項…我認為是上述的方式都不行時再用,因為畢竟要動到regedit,多少有點風險
2024-08-17
[Python] pip install 套件時,最後出現`error: Microsoft Visual C++ 14.0 or greater is required`的解決方式
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
然後,在下載`Build Tools`後,卻往往不知道到底是要選擇安裝什麼…
這裡提供一個以下載的檔案`vs_buildtools.exe`為主的安裝指令
vs_buildtools.exe --norestart --passive --downloadThenInstall --includeRecommended --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Workload.MSBuildTools
以此指令就可以完成需求
2024-06-01
[救援記事] EC2 Ubuntu 20.04 - systemd-journald[xxx]: File /run/log/journal/[...]/system.journal corrupted or uncleanly shut down, renaming and replacing.
- 啟動 DB instance
- 雖然已經知道無法正常啟動,但我主要是要看截圖畫面看卡在哪,跟系統日誌
- 系統日誌大至上和測試機異常時的日誌一樣,但截圖畫面不一樣,測試機卡住的畫面就只有一個游標,但 DB instance 是卡在 `systemd-journald[xxx]: File /run/log/journal/[...]/system.journal corrupted or uncleanly shut down, renaming and replacing.`
- 停止 DB instance
- detach DB EBS
- create Rescue instance
- mini 的規格就行
- 要記得可用區域要和 DB instance 同一個
- DB EBS attach to Rescue instance
- ssh 進入 Rescue instance
- sudo mount /dev/xvdf1 /mnt/recovery
- xvdf1 是我自己編的,請以實際情況下的代號為主
- sudo chroot /mnt/recovery
- cd /var/log/journal
- 因為這次的問題,系統並沒有啟動到 syslog 的服務,所以從 syslog 中看不到紀錄
- 會找 journal 主要是因為 `systemd-journald[xxx]: File /run/log/journal/[...]/system.journal corrupted or uncleanly shut down, renaming and replacing.`
- journalctl -p5
- 直接 cat system.journal 會看不懂,這個檔本身的資料編碼應該是特殊的,所以要透過 journalctl 來看 systemd 的紀錄
- -p: priority, 列出指定等級的紀錄
- 0: emerg
- 1: alert
- 2: crit
- 3: err
- 4: warning
- 5: notice
- 6: info
- 7: debug
- 看到紅字的異常 `systemd[xxx]: multipathd.service: Failed to adjust resource limit RLIMIT_NOFILE: Operation not permitted`
- 我主要是先看紀錄的時間,因為我還記得重新啟動的時間大概是什麼時候,所以以這個時間來看啟動紀錄中有沒有異常的,而紅字比較明顯
- 又是熟悉的 RIMIT_NOFILE…
- /etc/sysctl.conf: 沒發現有設定 `fs.file-max` 和 `fs.nr_open`
- /etc/sysctl.d/100-custom.conf: 這是新增出來的檔案,有加上 `fs.nr_open = 102400`
- 我其實本來就有預期應該是和測試機是同一個問題,只是我沒想到的是我在 DB instance 並沒有在 /etc/sysctl.conf 設定 `fs.file-max = 102400`,所以可知這兩次的主因都是 `fs.nr_open`
- 將 `fs.nr_open` 先註解掉
- 退出 chroot(直接 exit)
- umount /mnt/recovery
- 退出 Rescue instance
- 停止 Rescue instance
- (確定已停止) detach DB EBS
- attach DB EBS 到 DB instance
- 啟動 DB instance
- 啟動正常
[救援記事] EC2 buntu 20.04 - systemd-udev-trigger.service: Failed to adjust resource limit RLIMIT_NOFILE: Operation not permitted
- ssh 進入 Rescue instance
- sudo mount /dev/xvdf1 /mnt/recovery
- xvdf1 是我自己編的,這個請以實際情況下的代號為主
- sudo chroot /mnt/recovery
- cat /var/log/syslog | more
- 翻到發生問題的時間,看看當時開機的記錄
- 找到第一個出現 Failed 或類似錯誤、啟動失敗的訊息,在我的狀況中,我第一個出現的是 `systemd-udev-trigger.service: Failed to adjust resource limit RLIMIT_NOFILE: Operation not permitted`
- 看到 RLIMIT_NOFILE 時,我就想到在這次更新之前,我因為在優化 mysql 的關係,有在以下兩個檔案處加了東西
- /etc/sysctl.conf: `我在最後加上了 `fs.file-max = 102400`
- /etc/sysctl.d/100-custom.conf: 這是新增出來的檔案,裡面只有加上 `fs.nr_open = 102400`
- 將 `fs.file-max` 和 `fs.nr_open` 先註解掉
- 退出 chroot(直接 exit)
- umount /mnt/recovery
- 退出 Rescue instance
- 停止 Rescue instance
- (確定已停止) 將本來 attach 給 Rescue instance 的要救援的 EBS 給 detach,然後再 attach 回原本的 測試機 instance
- 啟動 測試機 instance
- 啟動正常