為方便大家判斷是否參加 MLOps Zoomcamp 共學,我把 GitHub 中的 FAQ 以 GAI 翻譯如下。
提醒:未確認翻譯結果,內容有可能不完全正確,原文章 URL 連結有可能遺失(雖然已特別處理)。
LLM Zoomcamp 常見問題
編輯指南:
- 新增 FAQ 條目時,確保問題格式為 " 標題 2"
- 如果發現有錯誤,請隨時改進
- 不要更改文檔格式或添加任何視覺 " 改進 "
- 不要更改頁面格式(應保持 " 無頁碼 ")
一般課程相關問題
我剛發現這門課程。我還可以加入嗎?
是的,但如果您想獲得證書,您需要在我們仍然接受提交的期間提交您的專案。
課程 - 我已經註冊了 LLM Zoomcamp。何時可以收到確認郵件?
您不需要它。您已被接受。您也可以直接開始學習並提交作業(當表單開放時)而無需註冊。這不會與任何註冊列表進行核對。註冊只是為了在開始日期前評估興趣。
" 辦公時間 " 或直播 / 工作坊課程的視頻 /Zoom 連結是什麼?
Zoom 連結僅提供給講師 / 主持人 / 助教。
學生通過 Youtube 直播參與,並通過 Slido 提交問題(當 Alexey 直播時,連結會固定在聊天中)。視頻 URL 應在直播前發佈在 Telegram 和 Slack 的公告頻道 上。此外,您也可以在 DataTalksClub 的 YouTube 頻道 上觀看直播。
如果房間非常活躍,請勿在聊天中發佈問題,因為在講師 / 主持人有機會回答之前,問題可能已經滾動出屏幕。
SaturnCloud - 如何獲得訪問權限?
問題:由於流量原因,我收到通知說我在新註冊的等待列表上。
答案:之前有一個表格可以提交我們的電子郵件,這樣 Alexey 可以批量發送。如果您錯過了那個截止日期,只需手動註冊(或通過請求技術演示鏈接)並使用聊天請求 “llm zoomcamp” 的免費時間。
問題:我是其他 zoomcamp 的預先存在用戶,即使我已經在表格中提交了我的電子郵件,我也沒有獲得免費時間。
答案:只需在使用您現有賬戶登錄後通過他們的聊天請求,引用 “llm zoomcamp”。
SaturnCloud - 我們獲得多少免費時間?
我們每月獲得 15 小時免費時間,可能限制在免費層級的硬件配置。
SaturnCloud - 出現錯誤。每月最多使用 15 小時的資源
此消息意味著您已用完所有分配的時間。確保在設置中設置 " 閒置後關閉 "。此外,不要讓您的筆記本運行。如果您的時間用完了,嘗試使用 Google Colab 和 Kaggle。
帶 GPU 的雲端替代方案
仔細檢查配額和重置週期 - 免費時間是每月還是每週?通常,如果您更改配置,免費時間配額也可能會調整,或者可能會單獨計費。
- Google Colab
- Kaggle
- Databricks (?),還有許多其他選擇。
使用 GPT 查詢更多信息。有些可能對您可以安裝的內容有限制,所以一定要閱讀免費與付費層級中包含的內容。
排行榜 - 我不在排行榜上 / 如何知道我在排行榜上的位置?
當您設置賬戶時,系統會自動為您分配一個隨機名稱,例如 “Lucid Elbakyan”。點擊 跳轉到您在排行榜上的記錄 連結以找到您的條目。
如果您想查看您的顯示名稱是什麼,請點擊 " 編輯課程資料 " 按鈕。
- 第一個欄位是您的暱稱 / 顯示名稱,如果您希望被稱為您的 Slack 用戶名或 Github 用戶名或您選擇的任何暱稱,請更改它,如果您想保持匿名。
- 除非您希望在證書上顯示 “Lucid Elbakyan”,否則 必須 將第二個欄位更改為您的 官方姓名,如同您的身份證明文件 - 護照、國民身份證、駕駛執照等。這是將出現在您證書上的名字!
證書 - 我可以以自學模式完成課程並獲得證書嗎?
不,您只能通過與 " 現場 " 隊伍一起完成課程獲得證書。
我們不為自學模式頒發證書。原因是您需要在提交專案後對 3 個專案進行同行評審。
您只能在課程運行期間對專案進行同行評審;表單關閉後並編制同行評審列表後。
我錯過了第一次作業 - 我還能獲得證書嗎?
是的,您需要通過畢業專案才能獲得證書。作業不是強制性的,儘管建議用於加強概念,而且獲得的分數會計入您在排行榜上的排名。
我正在研究下週的作業 / 內容 - 為什麼它一直在變化?
這門課程是首次提供,在特定模塊準備就緒並宣布之前,內容會持續變化。提前學習材料 / 作業將由您自行承擔風險,因為最終版本可能會有所不同。
課程何時會再次提供?
2025 年夏季(通過 Alexey 確認)。
有講座 / 視頻嗎?它們在哪裡?
請查看書籤和固定鏈接,特別是 DataTalks.Club 的 YouTube 帳戶。
WSL2 - ResponseError: 模型需要更多系統內存(X.X GiB)而不可用(Y.Y GiB)。我的系統有超過 X.X GiB。
您的 WSL2 被設置為使用 Y.Y GiB,而非您電腦的所有內存。在您的 Windows 用戶配置目錄(C:\Users\ 您的用戶名 .wslconfig)下創建 .wslconfig 文件,設置所需的 RAM 分配:
[wsl2]
memory=8GB
重啟 WSL:wsl --shutdown
運行 free 命令以驗證更改。更多詳細信息,請閱讀 這篇文章。
模塊 1:介紹
OpenAI:運行 OpenAI chat.completions.create 命令時出錯
由於 OpenAI 賬戶中的積分不足,在運行 OpenAI chat.completions.create 命令時,您可能會收到以下錯誤:
NotFoundError: Error code: 404 - {'error': {'message': 'The model `gpt-4o` does not exist or you do not have access to it.', 'type': 'invalid_request_error', 'param': None, 'code': 'model_not_found'}}
OpenAI:錯誤:RateLimitError:錯誤代碼:429 -
RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}
上述錯誤與您的 OpenAI API 賬戶配額有關。
OpenAI 的 API 沒有免費使用,因此您需要使用信用卡添加資金(請參閱 platform.openai.com 設置中的按需付費選項)。添加資金後,重新運行您的 python 命令,您應該會收到成功的返回代碼。
解決步驟:
-
在這裡添加積分到您的賬戶(最少 $5)
-
在 chat.completions.create(model=‘gpt-4o’, …) 中指定您可用的模型之一:
-
添加積分到您的賬戶並更新本地 API 密鑰後,您可能需要重新創建 API 密鑰。
OpenAI:錯誤:‘Cannot import name OpenAI from openai’;如何修復?
將 openai 版本從 0.27.0 更新到任何 1.x 版本
OpenAI:使用 Open AI API 需要花費多少?
使用 Openai API 不會花費太多,您可以從 5 美元開始充值。至少對於我在第一單元花費的金額來說,僅僅 5 美分。
OpenAI:我必須訂閱並支付 Open AI API 費用才能完成本課程嗎?
不,您不必支付此服務就能完成課程作業,您可以使用本課程 Github 中發布的此列表中的一些免費替代方案。
llm-zoomcamp/01-intro/open-ai-alternatives.md at main · DataTalksClub/llm-zoomcamp (github.com)
ElasticSearch:錯誤:Elasticsearch 意外退出
如果您遇到此錯誤,很可能是 elasticsearch 沒有足夠的 RAM
我在配置中指定了 RAM 大小(-m 4GB)
docker run -it \
--rm \
--name elasticsearch \
-m 4GB \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
docker.elastic.co/elasticsearch/elasticsearch:8.4.3
(-m 2gb 也應該可行)
另一個可能的解決方案是將 memory_lock 設置為 false:
docker run -it \
--rm \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "bootstrap.memory_lock=false" \
docker.elastic.co/elasticsearch/elasticsearch:8.4.3
ElasticSearch:錯誤:Elasticsearch.index() got an unexpected keyword argument ‘document’
使用 doc 代替課程視頻中使用的 document
Docker:如何在 Elasticsearch 中持久存儲數據?
當您停止容器時,您先前添加到 elastic 的數據將會消失。為避免這種情況,我們可以添加卷映射:
docker volume create elasticsearch_data
docker run -it \
--rm \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-v elasticsearch_data:/usr/share/elasticsearch/data \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
docker.elastic.co/elasticsearch/elasticsearch:8.4.3
認證:安全且簡單的存儲和加載 API 密鑰方法
您可以將不同的 API 密鑰存儲在一個 yaml 文件中,並將其添加到 .gitignore 文件中。請小心,切勿推送或共享此文件。
- 例如,您可以在您的存儲庫中創建一個名為 “api_keys.yml” 的新文件。
- 然後,不要忘記將其添加到您的 .gitignore 文件中:
#api_keys
api_keys.yml
- 現在,您可以填寫您的 api_keys.yml 文件:
OPENAI_API_KEY: "sk[...]"
GROQ_API_KEY: "gqk_[...]"
- 保存您的文件。
- 您將需要 pyyaml 庫來加載您的 yaml 文件,所以在您的終端中運行此命令:
pip install pyyaml
- 現在,打開您的 jupyter notebook。
- 您可以使用此代碼加載您的 yaml 文件和相關的密鑰:
import yaml
# 打開文件
with open('api_keys.yml', 'r') as file:
# 從文件中加載數據
data = yaml.safe_load(file)
# 獲取 API 密鑰(這裡是 Groq 示例)
groq_api_key = data['GROQ_API_KEY']
- 現在,您可以直接使用加載的值替換 “api_key” 值,而無需加載環境變量。
由 Mélanie Fouesnard 添加
認證:為什麼我的 OPENAI_API_KEY 在 jupyter notebook 中找不到?
選項 1:使用 direnv
創建 .envrc 文件並添加了我的 API 密鑰,在終端中運行 direnv allow
出現錯誤:“OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY environment variable”
解決方案:安裝 dotenv 並在 notebook 的單元格中添加以下內容。您可以通過運行以下命令安裝 dotenv:pip install python-dotenv。
from dotenv import load_dotenv
load_dotenv('.envrc')
選項 2:使用 Codespaces Secrets
- 登錄您的 GitHub 帳戶並導航至設置 > Codespaces
- 這裡有一個名為 secrets 的部分,您可以創建像 OPENAI_API_KEY 這樣的秘密,並選擇該密鑰應該用於哪些存儲庫。
- 一旦設置好,密鑰將在您的 codespaces 會話中可用
開源:如何在沒有使用任何 API 的情況下在我的 PC 上本地使用 Ollama 開源模型?
在 llm-zoomcamp 任務中使用 Ollama 模型之前,您需要在 PC 上安裝 ollama 並從 https://www.ollama.com 下載相關的 LLM 模型
對於 Ubuntu 下載 ollama:
curl -fsSL https://ollama.com/install.sh | sh
對於 Mac 和 Windows,請按照此鏈接上的指南:
Ollama 有許多開源 LLM,如:
- Llama3
- Phi3
- Mistral 及 Mixtral
- Gemma
- Qwen
- 您可以在 library 上探索更多模型
要在 Ollama 中下載模型,只需打開命令提示符並輸入:
ollama run model_name
例如:
ollama run phi3
它將自動下載模型,您可以像上面一樣在以後使用它。
要在 Ollama 模型上進行推理並用於 llm-zoomcamp 任務,請使用以下函數:
import ollama
def llm(prompt):
response = ollama.chat(
model="llama3",
messages=[{"role": "user", "content": prompt}]
)
return response['message']['content']
例如,我們可以這樣使用它:
prompt = "When does the llm-zoomcamp course start?"
answer = llm(prompt)
print(answer)
開源:我正在使用 Groq,根據我的研究,它不提供 tokenizer 庫。我們如何估計作業問題 6 中要求的 OpenAI tokens 數量?
該問題要求 gpt-4o 模型中的 tokens 數量。tiktoken 是可以用來獲取 tokens 數量的 python 庫。您不需要 openai api 密鑰就可以獲取 tokens 數量。您可以使用問題中提供的代碼來獲取 tokens 數量。
開源:我可以使用 Groq 代替 OpenAI 嗎?
您可以使用任何 LLM 平台進行實驗和項目。此外,作業設計為不需要訪問任何付費服務,可以在本地完成。但是,您需要調整該平台的代碼。查看他們的文檔頁面。
開源:我可以使用 OpenAI API 的開源替代品嗎?
是的。請參閱模塊 2 和模塊 1 文件夾中的 open-ai-alternatives.md。
在過濾我的查詢後返回空列表(HW Q3)
這可能是索引數據時出錯。首先,您需要在將數據添加到索引之前添加索引設置,然後您就可以應用過濾器和查詢了。
問題
答案
模塊 2:開源 LLMs
Saturn Cloud 問題
請查看常規部分或使用 CTRL+F 搜索此文檔。
SaturnCloud:如何管理從 SaturnCloud 到您的 Github 存儲庫的更改?
當然,您應該首先在 SaturnCloud 中添加您的 Github 存儲庫並在您的 Github 帳戶設置中添加 SSH 密鑰。
進入 SaturnCloud 的 jupyter notebook 後,打開終端並寫入以下行:
1- 導航到您的項目目錄:
cd /home/jovyan/my_project
2- 配置 GitHub 遠程使用 SSH:
git remote set-url origin git@github.com:username/repository.git
3- 暫存、提交和推送您的更改:
git add .
git commit -m "Your commit message"
git push
SaturnCloud:如何清理 saturn cloud notebook 上的 hugging face 模型緩存?
使用以下代碼清理您的緩存:
from transformers import TRANSFORMERS_CACHE
print(TRANSFORMERS_CACHE)
import shutil
shutil.rmtree(TRANSFORMERS_CACHE)
注意:確保關閉筆記本並重新啟動內核
ElasticSearch:我可以從一個 docker 容器備份和恢復我的 elasticsearch 索引到另一個嗎?
是的,可以。以下是要遵循的步驟:
- 在 elasticsearch 容器中打開一個 bash 會話
docker exec -it elasticsearch bash
- 添加 path.repo 配置:
echo path.repo: ["/usr/share/elasticsearch/backup"] >>
/usr/share/elasticsearch/config/elasticsearch.yml
- 重新啟動容器並驗證是否創建正確:
docker restart elasticsearch
curl -X GET "localhost:9200/_snapshot/my_backup?pretty"
- 創建快照(這是備份;) )
curl -X PUT
"localhost:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true" -H
'Content-Type: application/json' -d'
{
"indices": "your_index_name",
"ignore_unavailable": true,
"include_global_state": false
}
'
- 將備份複製到我的機器:
docker cp elasticsearch:/usr/share/elasticsearch/backup /path/to/local
- 現在創建新容器或使用 docker-compose(以防您正在跟隨模塊 2):
docker compose up -d
- 在新容器中添加 path.repo 配置,與之前相同:
docker exec -it new_elasticsearch bash
echo path.repo: ["/usr/share/elasticsearch/backup"] >>
/usr/share/elasticsearch/config/elasticsearch.yml
- 重新啟動 docker 容器並將快照複製到其中:
docker restart new_elasticsearch
docker cp /path/to/local/backup new_elasticsearch:/usr/share/elasticsearch
- 在新容器中註冊快照儲存庫:
curl -X PUT "localhost:9200/_snapshot/my_backup" -H 'Content-Type: application/json'
-d'
{
"type": "fs",
"settings": {
"location": "/usr/share/elasticsearch/backup"
}
}
'
- 驗證是否存在:
curl -X GET "localhost:9200/_snapshot/my_backup/snapshot_1?pretty"
- 恢復快照:
curl -X POST "localhost:9200/_snapshot/my_backup/snapshot_1/_restore" -H
'Content-Type: application/json' -d'
{
"indices": "your_index_name",
"ignore_unavailable": true,
"include_global_state": false
}
'
- 顯示您的索引:
curl -X GET "localhost:9200/_cat/indices?v"
- 額外功能:如果您想在恢復快照時更改原始索引名稱:
curl -X POST "localhost:9200/_snapshot/my_backup/snapshot_1/_restore?pretty" -H
'Content-Type: application/json' -d'
{
"indices": "old_index",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "old_index",
"rename_replacement": "new_index"
}
'
SecretNotFoundError: Secret SOURCES__REST_API__NOTION__API_KEY does not
exist.
ElasticSearch:如何限制 ElasticSearch 容器使用的內存?
您可以通過將以下行添加到 docker-compose 的環境部分來限制 ElasticSearch 容器使用的內存量。選擇您喜歡的數量,例如:
-
“ES_JAVA_OPTS=-Xms1g -Xmx1g” # 將 Java 堆大小設置為 1GB
-
您可以在 docker-compose.yaml 文件中利用 Docker Compose 中可用的資源配置選項來限制 Elasticsearch 服務的 CPU 使用量。這包括 cpus 來限制容器可以利用的 CPU 數量。您可以配置 docker-compose.yaml 中的 Elasticsearch 部分以限制 CPU 使用量:
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ports:
- "9200:9200"
- "9300:9300"
deploy:
resources:
limits:
cpus: '1.0' # 限制為 1 個 CPU
reservations:
cpus: '0.5' # 預留 0.5 個 CPU
Docker:如何檢查 Docker 容器內文件的內容?
在 Docker 容器內檢查文件內容有幾種方法。
- 首先,確保您使用 bash 以交互方式運行了 docker 容器:
docker exec -it <container> bash
- 然後,您可以使用 bash 命令。對於這種情況,我提出兩個解決方案:
- 使用 “cat” 和您想查看內容的文件:
cat your_file。這將直接在您的終端中打印內容。 - 使用 apt get 安裝 vim 或 nano 並使用 vim 或 nano 打開文件(這對於較大的文件可能更合適):
apt-get install vimvim your_file- 然後,您可以通過按 ESC 然後輸入 “:q”,最後按 ENTER 退出 vim 中的文件。
由 Mélanie Fouesnard 添加
Docker:錯誤:Docker 掛載卷在 windows 路徑末尾添加 ;C
對於 Q4,使用以下行代替將當前卷掛載到 docker:
-v "/${PWD}/ollama_files:/root/.ollama"
Docker:為什麼在 Macbook Air M1 上使用 Phi 3 本地推理需要這麼長時間?
在 Docker Desktop 中,嘗試增加資源。
轉到儀表板 > 設置 > 資源。將內存限制提高到 15GB,交換空間提高到 4GB - 要慷慨。應用並重新啟動更改。
由 Dandy Arif Rahman 添加
Docker:如何清理 docker 緩存?
docker system prune -a
Ollama:" 錯誤:pull model manifest: 503: no healthy upstream" 在使用 Ollama 拉取模型時
這個錯誤通常是由網絡連接故障導致的,如果您立即嘗試重複操作,它仍然會失敗。這是一個臨時錯誤,您應該等待 2 或 3 分鐘後再嘗試拉取模型。然後,幾分鐘後,操作將成功。
由 Eduardo
Muñoz 添加
Ollama:錯誤:NotFoundError:錯誤代碼:404 - {‘error’: {‘message’: " 模型 XXX 未找到,請先嘗試拉取 " …
要解決這個問題,您需要先拉取這些模型之一: library 。同時檢查模塊的正確名稱。
由 Taras Goriachko 添加
Ollama:在 Colab 上本地運行 Ollama 在 llm() 行之後出錯
APIConnectionError: Connection error.
它似乎在 localhost:11434 運行,但是 localhost:11434/v1/ 給出 404
在 Medium 文章和這個鏈接中找到了解決方案:
https://medium.com/@mauryaanoop3/running-ollama-on-google-colab-free-tier-a-step-by-step-guide-9ef74b1f8f7a
Ollama:如何移除 Ollama 模型?
ollama list
ollama rm [model_name]
Ollama:錯誤代碼 500 InternalServerError
InternalServerError: Error code: 500 - {'error': {'message': 'model requires more system memory (5.6 GiB) than is available (1.5 GiB)', 'type': 'api_error', 'param': None, 'code': None}}.
使用 docker-compose 運行 elastic search 是 RAM 內存問題的原因。要解決這個問題,您需要更改 docker-compose.yaml 文件以限制 elastic search 的 RAM 使用量。
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- ES_JAVA_OPTS=-Xms1g -Xmx1g # 更改 1
ports:
- "9200:9200"
- "9300:9300"
deploy:
resources:
limits:
memory: 2G # 更改 2
ollama:
image: ollama/ollama
container_name: ollama
volumes:
- ollama:/root/.ollama
ports:
- "11434:11434"
volumes:
ollama:
由 Zoe Zelkha 添加
Ollama:如何運行不在列表中的模型
您可以使用 Ollama 運行任何 GGUF、PyTorch 或 Safetensors 模型。在大多數情況下,足以下載模型,用以下內容創建 Modelfile:
FROM path/to/the/model
然後運行
ollama create my-model
Mistral AI:儘管在 HF 上接受條款,但無法訪問 Mistral-7B-v0.1
手動設置 token 如下:
access_token = <your_token>
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.1",
token=access_token)
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1", token=access_token)
Python:錯誤:ModuleNotFoundError:No module named ‘transformers.cache_utils’
要解決問題,直接從 github 安裝 transformers
!pip install git+ https://github.com/huggingface/transformers
Python:例外:data did not match any variant of untagged enum PyPreTokenizerTypeWrapper at line 40 column 3
要解決問題,直接從 github 安裝 transformers
!pip install git+ https://github.com/huggingface/transformers
Python:from google.protobuf.pyext import _message / TypeError: bases must be types
pip install protobuf==3.20.1
由 Ibai Irastorza 添加
HuggingFace:如何獲取與 hugging face 上特定模型相關的特定字符串中的 token 數?
- 在 hugging face 上搜索模型名稱。
- 獲取該模型使用的 transformer。
- 使用該 transformer,編碼您想要的字符串。
- 計算輸出張量的長度。
前面的代碼片段使用了 google/gemma-2b LLM 的 tokenizer。
不要忘記將您的 token 設為保密。
由 kamal 添加
如何使用 CUDA 進行 GPU 使用來運行模型?
我檢查的 CUDA 最新版本是 12.5,使用如 Saturn Cloud 這樣的雲環境。然後 python 的 torch 包應該支持該版本的 CUDA,後跟 cu121,這意味著該版本的 torch 支持 cuda 12.1。
檢查這個頁面找到可用於 CUDA 的包和版本(記得搜索關鍵字 “cu”)
在我的情況下,我專注於使用 torch==2.3.1,支持的最新 cuda 版本是 12.1(在 Saturn Cloud 上可用)
要安裝所有需要的包,使用此命令:
!pip install transformers accelerate torch==2.3.1+cu121
torchvision==0.18.1+cu121 torchaudio==2.3.1+cu121 --trusted-host
download.pytorch.org --index-url
https://download.pytorch.org/whl/cu121
之後執行此命令:
!pip install --upgrade transformers
模塊 3:X
ElasticSearch:錯誤:Elasticsearch.index() got an unexpected keyword argument ‘document’
將 elasticsearch 7.13.3 升級到 8.14.0 或任何 7.x 安裝升級到 8.x。較早的模塊使用了 elasticsearch 8.4.3 的 docker 映像,因此 python 安裝的 elasticsearch 也必須至少是 8.x。
或者使用關鍵字 ‘body’ 代替 ‘document’
對於 conda 用戶,如果您嘗試使用 conda install elasticsearch==8.4.3 更新到 elasticsearch 8.x 但得到 “PackagesNotFoundError”,請嘗試:
$ conda config --add channels conda-forge
$ conda config --set channel_priority strict
$ conda install -c conda-forge elasticsearch==8.4.3
ElasticSearch:TypeError:Elasticsearch.search() got an unexpected keyword argument ‘knn’
這對我有用:
ElasticSearch:ConnectionError:Connection error caused by:ConnectionError(Connection error caused by:NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7c455bb94ac0>:Failed to establish a new connection:[Errno 111] Connection refused)) in elastic search
嘗試根據第一個課程模塊運行 docker 容器,如:
docker run -it \
--rm \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
docker.elastic.co/elasticsearch/elasticsearch:8.4.3
如果您使用的是 github codespace 或在 vscode 本地運行,不要忘記轉發您的 9200 端口。
為什麼在查詢我的 ElasticSearch 數據庫後得到的命中結果中有大於 1 的分數?
如在 這個視頻 中所示,儘管在索引設置中有 " 餘弦 " 相似度測量,我們的命中結果可能有大於 1 的分數。因此,我們預期分數在 -1 和 1 之間。
然而,在最終查詢的情況下,我們有幾個分數加在一起提供最終分數:
- KNN 相關分數,在 -1 和 1 之間(餘弦相似度)
- 文本相關性分數:BM25 算法分數可以是任何正數,包括超過 1。這是一個 " 排名函數,計算分數以表示文檔相對於查詢的相關性 "(來源:
https://stackoverflow.com/questions/43794749/what-is-bm25-and-why-elasticsearch-chose-this-algorithm-for-scoring-in-version-5 )。
由於我們的查詢中有一個 “match” 過濾器,這觸發了 BM25 排名算法的使用,最終分數包含這個信息。
要獲取關於最終分數的更多詳細信息,您可以修改搜索查詢並添加一個 “explain” 參數:
response = es_client.search(
index=index_name,
query={
"match": {"section": "General course-related
questions"},
},
knn=knn_query,
size=5,
explain=True
)
由 Mélanie Fouesnard 添加
不存在模塊 “sentence_transformers”
對於此模塊作業,確保您安裝了 sentence-transformers 包,它可以像這樣簡單安裝:
pip install sentence-transformers
即使在安裝 sentence transformers 庫後,如果您遇到與 torch 庫 fbgemm.dll 相關的錯誤,
將此 dll 文件保存在 fbgemm-dll 的同一目錄中
https://www.dllme.com/dll/files/libomp140_x86_64/00637fe34a6043031c9ae4c6cf0a891d/download
要知道庫的路徑,使用
pip show torch
- 由 Akshay Nimbalkar 添加
無法創建索引:Connection timeout.
我在這一步遇到了這個錯誤:es_client.indices.create(index=index_name, body=index_settings)
我檢查了 elasticsearch 服務器的日誌,並運行了這個命令,狀態為紅色:curl -X GET " http://localhost:9200/_cluster/health?pretty"
我的問題是我的電腦沒有足夠的磁盤空間用於 docker 映像。我最終刪除了未使用的映像,手動和清理:
docker image prune
docker volume prune
docker container prune
由 Ibai Irastorza 添加
TypeError:unsupported operand type(s) for *:‘float’ and ‘dict’ 在 evaluate 函數內運行向量搜索函數時
確保您的搜索函數接收查詢向量,而不是字典。要解決這個問題,確保在 evaluate 內傳遞給 search_function 的 q 正確轉換為嵌入向量。以下代碼可以幫助:
v_query = embedding_model.encode(query_text)
results = search_function(v_query)
查找 numpy 數組(任何維度)的最大值:
max_value = numpy_array.max()
什麼是餘弦相似度?
餘弦相似度是一種用於計算兩個非零向量之間相似度的度量,常用於文本分析以確定兩個文檔基於其內容的相似程度。
此度量計算兩個向量之間角度的餘弦,這些向量通常是文檔的詞計數或 TF-IDF 值。
餘弦相似度值範圍從 -1 到 1,其中 1 表示向量完全相同,0 表示向量正交(無相似度),-1 表示完全相反的向量。
什麼是 ElasticSearch 中的文檔?
" 文檔 " 是已被序列化為 JSON 對象的欄位集合,欄位是包含您數據的鍵值對。
運行 docker docker:Error response from daemon:Conflict. The container name “/elasticsearch” is already in use by container “20467e6723d78ff2e4e9e0c9a8b9580c07f070e4c852d12c585b1d71aefd6665”. You have to remove (or rename) that container to be able to reuse that name. See ‘docker run --help’.
docker stop elasticsearch
docker rm elasticsearch
我在第 2 模塊工作。有人遇到過關於 elasticsearch 映像的 ConnectionTimeout 異常問題嗎?它卡在創建索引處。每次我停止容器並重新運行時都會出現。要解決它,我必須刪除本地映像(當然還有容器)並重新下載它。另外,當使用 docker-compose 創建映像時,它也卡在創建索引處。
添加持久卷解決了問題:
volumes:
- ./elasticsearch_data:/usr/share/elasticsearch/data
您也可以嘗試刪除舊的 Docker 容器 / 映像以釋放空間(我的 ConnectionTimeout 異常的原因實際上是 Docker 空間不足):
docker system prune --all --force --volumes
如何將 Elastic search 分數從 [0, 1] 縮放到 [-1, 1] 以比較其結果與您自己的結果,例如使用 dot_product 度量計算排名?
score = (es_score - 0.5) * 2
我可以使用另一個向量數據庫來運行 RAGs 向量搜索嗎?
是的,還有其他向量數據庫,例如 Milvus,它是開源的,您可以在這裡查看文檔: https://milvus.io/docs/overview.md
模塊 4:監控
警告:‘model “multi-qa-mpnet-base-dot-v1” was made on sentence transformers v3.0.0 bet’ 如何抑制?
更新 sentence-transformers 到 v3.0.0>=,例如 pip install sentence-transformers>=3.0.0 以避免警告
在 Windows OS 中:OSError: [WinError 126] 無法找到指定的模塊。錯誤加載 “C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\site-packages\torch\lib\fbgemm.dll” 或其依賴項之一。
解決方案 1:安裝 Visual C++ 可再發行組件
解決方案 2:安裝 Visual Studio,而不是 Visual Studio Code。如下所示,重新啟動系統。更多詳情,請參考此鏈接:
在運行 python prep.pypsycopg2 時出現 OperationalError。OperationalError:無法將主機名 “postgres” 翻譯為地址:沒有已知的這樣的主機。我該如何解決這個問題?
在 .env 文件中更改 POSTGRES_HOST=localhost
如何設置 Pandas 顯示列中的整個文本內容。在 offline-rag-evaluation 筆記本的 LLM-as-judge 部分查看整個 Explanation 列內容很有用。
默認情況下,在數據框可視化中,Pandas 將列中的文本內容截斷為 50 個字符。為了查看法官 llm 對 NON RELEVANT 答案給出的完整解釋,如圖所示:
顯示結果的指令必須先以以下內容開頭:
pd.set_option('display.max_colwidth', None)
以下是 display_max_colwidth 選項的規格,如官方文檔所述:
display.max_colwidth:int 或 None
pandas 數據結構中列的最大寬度(以字符為單位)。當列溢出時,輸出中會嵌入 "..." 佔位符。'None' 值表示無限制。
[默認:50] [當前:50]
在運行 python prep.pypsycopg2 時出現 OperationalError。OperationalError:無法將主機名 “postgres” 翻譯為地址:沒有已知的這樣的主機。我該如何解決這個問題?
在 .env 文件中更改 POSTGRES_HOST=localhost
如何設置 Pandas 顯示列中的整個文本內容。在 offline-rag-evaluation 筆記本的 LLM-as-judge 部分查看整個 Explanation 列內容很有用。
默認情況下,在數據框可視化中,Pandas 將列中的文本內容截斷為 50 個字符。為了查看法官 llm 對 NON RELEVANT 答案給出的完整解釋,如圖所示:
顯示結果的指令必須先以以下內容開頭:
pd.set_option('display.max_colwidth', None)
這是 display_max_colwidth 選項的規格,如 官方文檔 所述:
display.max_colwidth:int 或 None
pandas 數據結構中列的最大寬度(以字符為單位)。當列溢出時,輸出中會嵌入 "..." 佔位符。'None' 值表示無限制。
[默認:50] [當前:50]
如何在 Pandas DataFrame 列(或 Pandas Series)中標準化向量?
import numpy as np
normalize_vec = lambda v: v / np.linalg.norm(v)
df["new_col"] = df["org_col"].apply(normalize_vec)
如何計算 Pandas DataFrame 列(或 Pandas Series)的分位數或百分位數?
要計算 75% 分位數或 0.75 分位數:
quantile: int = df["col"].quantile(q=0.75)
如何從終端刪除所有 Docker 容器、映像和卷以及構建?
- 刪除所有容器(包括運行中的):
docker rm -f $(docker ps -aq)
- 刪除所有映像:
docker rmi -f $(docker images -q)
- 刪除所有卷:
docker volume rm $(docker volume ls -q)
我想讓用戶每次提交只能給一次反饋(+1 或 -1)。為此,我使用 st.session 屬性:submitted 來啟用或禁用反饋按鈕。當我使用 ask 按鈕提交文本時。如果我按了 +1,我可以再按一次 +1(按鈕未禁用)。如果我按了 -1,我可以再按一次 +1 或 -1(按鈕未禁用)。如果 st.session.submitted 為 False,則按鈕應該被禁用。問題主要在於 st.session.submitted,它會在某處重新分配為 True,儘管一個反饋按鈕被按下。
已解決:
當嘗試使用 docker-compose 運行 streamlit 應用時,我得到:Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: “streamlit”: executable file not found in $PATH: unknown。該應用在 docker-compose 外運行良好
確保創建 Dockerfile 並運行 ‘docker-compose up –build’ 當添加 streamlit 到 docker-compose 時
模塊 5:X
編排管道的導出和我在導出到向量數據庫階段遇到連接錯誤。有人能幫助解決連接字符串問題嗎?
使用 docker-compose.yaml 文件中提供的 elasticsearch 的服務名稱和端口,例如 < http://elasticsearch:9200>
在導出塊中,連接到 elasticsearch 不斷超時
在 docker-compose 中,從網絡中刪除 ‘driver: bridge’ 行。如果那不能解決問題,嘗試為 elasticsearch 創建一個持久卷。以下是更新後的 elasticsearch 和網絡部分:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ports:
- "9200:9200"
- "9300:9300"
restart: always
volumes:
- ./elasticsearch_data:/usr/share/elasticsearch/data
networks:
- app-network
networks:
App-network:
Elasticsearch 容器不斷重啟
在 docker-compose 中,添加以下行 “ES_JAVA_OPTS=-Xmx3g” 到環境部分,以給 Elasticsearch 進程更多內存:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- ES_JAVA_OPTS=-Xmx3g
ports:
- "9200:9200"
- "9300:9300"
restart: always
networks:
- app-network
ConnectionError:我正在處理模塊 LLM Orchestration 5.5 Export 並嘗試在 Codespace 中將數據導出到 Elasticsearch。但是,我遇到了以下錯誤:Connection error caused by: ConnectionError(Connection error caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x71c4c248c0a0>: Failed to establish a new connection: [Errno -2] Name or service not known))。我嘗試添加 -ES_JAVA_OPTS=-Xms2g -Xmx2g 到 docker-compose.yml 文件,但錯誤仍然存在。我該怎麼辦?
如果您使用的是 GitHub Codespaces,您需要在 Docker Compose 文件中為 Elasticsearch 添加內存配置 -Xms512m。以下是您可以更新的方式:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- ES_JAVA_OPTS=-Xms512m -Xmx512m
magic-database-1 | chmod: changing permissions of ‘/var/lib/postgresql/data’: Operation not permitted
使用命名卷。不要掛載主機目錄,您可以使用 Docker 管理的命名卷。這避免了權限問題,因為 Docker 將處理卷的創建和管理:
magic-database:
image: pgvector/pgvector:0.6.0-pg16
env_file:
- .env.dev
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
- ./scripts/database:/docker-entrypoint-initdb.d
restart: always
networks:
- app-network
volumes:
pgdata:
如何通過 Python 腳本觸發 Mage 中的管道?
- 創建類型為 “API” 的觸發器
- 在觸發器設置中獲取端點 url
- 運行 Python 代碼:
url = TRIGGER_ENDPOINT_URL_FROM_MAGE
headers = {"Content-Type": "application/json"}
try:
response = requests.post(url, headers=headers)
response.raise_for_status()
except Exception as err:
print(f"An unexpected error occurred magic: {err}", flush=True)
print("Error details magic:", sys.exc_info(), flush=True)
finally:
print("!----> Script execution completed magic.", flush=True)
由 Maksym Bilozorov 添加
模塊 6:X
問題
答案
問題
答案
畢業專案
這是一個小組專案嗎?
不,畢業專案是個人專案。
我們提交 2 個專案,嘗試 1 和 2 是什麼意思?
● 您只需要提交 1 個專案。
如果第一次嘗試提交失敗,您可以改進它並在嘗試 #2 提交窗口期間重新提交。
● 如果您想提交 2 個專案以獲得經驗和曝光,您必須使用不同的數據集和問題陳述。
● 如果您無法在嘗試 #1 提交窗口期間提交,您仍然有時間趕上嘗試 #2 提交窗口
● 請記住,如果您不參與您的隊列中 3 個同行的同行評審,則提交不計入認證
比賽算作畢業專案嗎?
不,它不算(在 2024 年 7 月 1 日的辦公時間中回答)。您可以作為一個小組參與 math-kaggle-llm-competition,如果您想組建團隊;但畢業專案是一個個人嘗試。
我的畢業專案將如何評估?
● 每個提交的專案將由 3(三)名也提交了專案的隨機分配學生評估。
● 您也將負責自己評分 3 位同學的專案。請注意:不遵守此規定也意味著您將無法獲得
● 課程結束時的證書。
● 您獲得的最終成績將是您從同行評審者那裡獲得的成績的中位數。當然,評估或被評估的同行評審標準必須遵循此處定義的指南(待定鏈接)。
我們什麼時候以及如何被分配專案進行評審 / 評分?
在提交截止日期過後,將分享一個 Excel 表格,每位參與者被分配 3 個專案。
我已經提交了我的專案。為什麼我不能評審任何專案?
一旦專案提交截止日期過後,我們將被分配專案進行評估。您不能選擇要評估哪些專案,在名單發布前您也不能評審。
如何為專案找到一些好的想法或數據集?
答案:請查看 https://github.com/DataTalksClub/llm-zoomcamp/blob/main/project.md ,獲取可用於專案的幾個想法和數據集,以及提示和指南。
我必須使用 ElasticSearch 或 X 庫嗎?
答案:不,您不必使用 ElasticSearch。您可以使用任何您想要的庫。只需確保記錄良好,以便您的同行評審者可以重現您的專案。
還有哪些 ElasticSearch 的替代品?
您可以使用一些免費的 elastic search 替代品
- Milvus:一個具有與 elastic 相同功能的開源庫
- OpenSearch:也是一個具有與 elastic 相同功能的免費開源庫
假設,今天我開始使用 multi-qa-distilbert-cos-v1( sentence-transformers/multi-qa-distilbert-cos-v1 · Hugging Face )。
我創建嵌入並索引它們。
明天,由於某種原因,模型的作者決定更新它。
所有索引嵌入會發生什麼?它們會變得不兼容,我需要重新索引所有內容嗎?
有一個選項可以在本地保存模型。這樣,即使雲端模型發生變化,您的代碼仍然可以工作。
證書
[!] 查看 證書上的名字
問題
答案
工作坊:dlthub
我可以將工作坊材料用於自己的項目或與他人分享嗎?
由於 dlt 是開源的,我們可以將此工作坊的內容用於畢業專案。由於 dlt 的主要目標是輕鬆加載和存儲數據,我們甚至可以將其用於其他 zoomcamps(例如 mlops zoomcamp 項目)。請不要猶豫提問或直接在您的項目中使用它。
由 Mélanie Fouesnard 添加
Google Colab 對 T4 GPU 資源類型提供多少免費時間?
Google colab 每 24 小時僅提供 1 小時使用 T4 GPU 資源類型的時間。但您仍然可以使用 CPU,雖然比 T4 慢一些,特別是在運行 RAG 時。
使用 dbtable = db.open_table(“notion_pages___homework”) 打開表時出錯:FileNotFoundError:Table notion_pages___homework does not exist.Please first call db.create_table(notion_pages___homework, data)
該錯誤表明您尚未在管道設置中將所有 “employee_handbook” 實例更改為 “homework”
運行 main() 時出錯:FileNotFoundError:Table notion_pages___homework does not exist.Please first call db.create_table(notion_pages___homework, data)
確保在第 3 行打開正確的表:dbtable = db.open_table(“notion_pages___homework”)T
如何知道數據庫中有哪些表?
您可以使用 db.table_names() 列出數據庫中的所有表
DLT 是否有 ClickHouse 或 StarRocks 的連接器?
目前,DLT 沒有 ClickHouse 或 StarRocks 的連接器,但歡迎社區貢獻添加這些連接器。
筆記本沒有 secret 訪問權限或 401 Client Error:Unauthorized for url: https://api.notion.com/v1/search
如果您得到這個錯誤
或 401 Client Error,那麼您要麼需要授予密鑰訪問權限,要麼密鑰錯誤。
錯誤:如何修復 requests 庫只安裝 v2.28 而不是 lancedb 所需的 v2.32?
直接從源代碼安裝,例如 pip install "requests @ https://github.com/psf/requests/archive/refs/tags/v2.32.3.zip"
工作坊:X
在提示 ollam RAG 時連接被拒絕錯誤?
如果在做作業時遇到此錯誤,只需通過運行筆記本中的這一行重新啟動 ollama 服務器:!nohup ollama serve > nohup.out 2>&1 &
如果您停止並重新啟動單元格,您將需要首先重新運行包含 ollama serve 的單元格。
錯誤:連接到 http://elasticsearch:9200 的 Elasticsearch
嘗試從那裡移除 driver bridge?
由 Abiodun Gbadamosi 添加
問題
評估了多種檢索方法,並使用了最佳的一種(2 分)我正在評估一個項目。這個人只使用 minsearch 進行評估,但進行了提升並發布了提升參數。他們得到一分嗎?
答案
以下是內容:
評估標準規定,要獲得 2 分,必須評估多種 RAG 方法,並使用最佳的一種。由於該人只使用 minsearch 進行評估,儘管應用了提升,這不符合評估多種 RAG 方法的條件。
因此,他們只會因為在評估中使用單一 RAG 方法(minsearch)而獲得 1 分,儘管他們加入了提升參數。提升本身不構成一種單獨的方法;它只是對所使用的單一方法的增強。
由 Wali Mohamed 添加