用GitHub Codespaces生成AI藝術

用GitHub Codespaces生成AI藝術

從程式碼到藝術到論文,生成性人工智慧在開發者社羣風靡一時。我個人試圖趕上每一個新的技術趨勢。這個行業發展很快,有時會讓人不知所措,所以我更喜歡對趨勢有一個大致的瞭解,這樣我就能理解它是如何運作的,但我不必每隔幾個月就換掉我所有的工具。然而,GitHub Copilot和AI生成的藝術讓我很感興趣。我可以花一整天的時間來實驗像DALL-E和Hey, GitHub這樣的工具,一個聲控的人工智慧配對程式設計師。我認為生成性人工智慧撼動了我們社會的核心。它可能會改變我們創造藝術的方式。它可能會改變藝術家如何對待他們的創作過程。同樣,GitHub Copilot和其他AI對程式設計師也進化了我的開發過程。它幫助我作為一個開發者跳出盒子思考問題。

在GitHub Universe,Codespaces的員工工程經理April Leonard在GitHub Universe上介紹了關於GitHub Codspaces的一些更新:

  • Codespaces適用於所有GitHub免費和專業計劃使用者。GitHub免費使用者每月最多可免費使用60小時的Codespaces。GitHub專業版使用者每月最多可以免費使用90小時的Codespaces。
  • Codespaces有模板。模板包括模板程式碼、轉發的埠和配置的開發容器,用於一些最常見的應用框架,如Next.js、React.js、Django和Jupyter Notebook。模板為開發者提供了一個構建、測試和除錯應用程式的沙盒。
  • 雖然Codespaces最初支援Visual Studio Code、Vim和Emacs,但它現在提供對其他IDE的支援,如IntelliJ、PyCharm和JupyterLab。
  • Codespaces的GPU現在處於私人預覽階段,這意味著你可以在GitHub Codespaces的雲端執行由個人GPU驅動的機器學習重任。四月通過使用Stable Diffusion技術在太空中生成一個柯基犬來展示這一點是多麼酷。

這個演示非常棒! 現在,我有一個任務:學習如何在Codespaces中生成AI藝術。不幸的是,這是在私人預覽中,所以人們必須請求訪問才能做到這一點。幸運的是,我在GitHub工作(嘿嘿,😅🤪)。我使用GitHub Codespaces生成了以下圖片:

AI生成喵星人

AI生成北極熊

AI生成女孩

在這篇博文中,我分享了在GitHub Codespaces中生成AI藝術的步驟,以便你也能做到這一點。

什麼是GitHub Codespaces?

讓我們從基礎知識開始。如果你以前沒有使用過GitHub Codespaces,或者你不確定它是什麼,我可以為你分析一下。GitHub 程式碼空間允許你在瀏覽器中使用類似於 Visual Studio Code(或你最喜歡的 IDE)的編輯器進行編碼。當你在程式碼空間工作時,你所處的環境是通過一個虛擬機器上的開發容器來建立的。GitHub程式碼空間允許你在一個託管在雲端的容器中編碼,或者一個不在你的電腦上而是在網際網路上的環境。有了GitHub Codespaces,開發者可以更快地加入專案,從任何地方進行編碼,並使他們的開發環境標準化。請看過去的一篇博文,瞭解更多關於GitHub Codespaces和容器的資訊。

什麼是GPU,什麼時候需要GPU驅動的Codespaces?

GPU是一個縮寫,代表圖形處理單元。CPU(中央處理器)是計算機的大腦,而GPU則處理圖形。所有計算裝置,如iPad和膝上型電腦,都需要CPU。GPU最初被設計為以更快的速度顯示3D圖形。今天,GPU已經發展起來,其同時快速處理資料的能力使其有利於遊戲、視訊編輯、比特幣挖掘和機器學習。

有時,CPU對於機器學習來說並不高效。如果任務是資料密集型的,訓練你的神經網路可能需要更長時間。為了解決這個問題,工程師可能會購買具有大量記憶體的GPU。我們釋出了由GPU驅動的Codespaces,使機器學習工程師在深度學習環境中的訓練和和開發變得無縫。

什麼是Stable Diffusion?

與DALL-E和MidJourney類似,Stable Diffusion是一個開源的機器學習模型,可以將文字轉換為影象。它通過一個潛在的擴散模型過程來學習影象和文字之間的聯絡。以下是潛伏擴散模型過程的工作原理:

  • 人工智慧收到一張圖片
  • 人工智慧向影象新增噪音,直到影象變得完全無法辨認。噪聲只是畫素化點的另一種說法。
  • 人工智慧去除噪音,直到產生一個清晰、高質量的影象。
  • AI從一個名為LAION-Aesthetics的資料庫中學習。該資料庫有影象-文字對,因此它可以學習將文字轉換為影象。

Stable Diffusion生成小狗

Credit: DagsHub

如何在Codespaces中生成AI藝術

你將需要什麼

  • GitHub賬戶(免費)
  • Hugging Face 帳戶(免費)
  • GPU驅動的Codespaces(雖然Codespaces對每個人都是免費的,但GPU驅動的Codespaces目前處於有限的測試階段。要申請訪問GPU機器型別或任何其他機器型別,請填寫此表。這個選項是執行資料量大和複雜的機器學習工作負載的人的理想選擇。你可以在這裡瞭解更多關於GitHub Codespaces的新產品)。

Step 1: 在github.com/codespaces/templates開啟一個Jupyter Notebook模板。

這將開啟一個帶有一些筆記本檔案的Codespace。我們將使用這個環境來生成我們的AI藝術。

Jupyter Notebook模板

Step 2: 將檔案提交到新的版本庫中

我做這一步是因為我需要對這個環境在倉庫層面上做一些配置。例如,我需要新增一個 GitHub Codespace 祕密,並且需要在 GPU 中開啟這個 Codespace。我開始使用這個模板是因為我不是一個資料科學家或機器學習工程師,而且我不經常使用Jupyter Notebook。使用這個模板可以讓我不用擔心如何設定Jupyter筆記本。

題外話:我已經開始使用Codespaces中的原始碼控制GUI,而不是命令列。起初,我是反對的,因為我熟悉通過命令進行的版本控制,但GUI真的很方便。如果你對使用該路徑感興趣,請檢視下面的圖片:

將檔案提交到新的版本庫

在上圖中,我點選源控制按鈕,輸入提交資訊,然後按 ‘Publish Branch’。

Step 3: 在生成一個Hugging Face的API令牌

你可能需要註冊一個Hugging Face賬戶,這是完全免費的。Hugging Face是一個社羣,為那些對人工智慧、開源和開放科學感興趣的人服務。一旦你註冊並驗證了你的賬戶,你應該可以在https://huggingface.co/settings/tokens,生成一個API令牌。

Step 4: 將你的API令牌新增到你的資源庫的Codespace私鑰儲存中

我導航到我的資源庫,標題是 “codespaces-jupyter”。這是Codespace模板給出的通用名稱。在版本庫中,我導航到我的Settings標籤 > Secrets and variables > Codespaces。

  • 你的瀏覽器地址應該是這樣的: https://github.com/{OWNER}/{REPO_NAME}/settings/secrets/codespaces
  • 在我的例子中,它看起來像: https://github.com/galaxy-bytes/codespaces-jupyter/settings/secrets/codespaces

在Codespaces私鑰儲存中,我將我的私鑰命名為 HUGGING_FACE_TOKEN ,並將Hugging Face的API令牌新增為我的私鑰。

儲存後,它應該看起來像下面的圖片:

Codespace私鑰儲存

Step 5: 在GPU驅動的Codespace中開啟你的資源庫

在你的版本庫中點選程式碼按鈕。你應該看到兩個選項 – 一個是 ‘Local’,另一個是 ‘Codespaces’。按程式碼空間下的三個點,可以看到 ‘New with Options’ 的標籤。這允許你選擇機器型別。

選擇機器型別6核,1GPU。如果你想更新分支、區域和開發容器配置,你可以,但我建議使用預設值。

在GPU驅動的Codespace中開啟你的資源庫

選擇機器型別

Step 6: 在notebooks資料夾中,建立一個名為ai-generator.ipynb的檔案。

你可以給這個檔案起任何名字,但它必須以副檔名 “.ipynb” 結尾。為了我自己的理智,我還刪除了其他檔案。然而,如果你想用這些檔案做實驗,你可以留下這些檔案。

建立一個名為ai-generator.ipynb的檔案

Step 7: 按 “+程式碼 “按鈕,在你的notebook中新增一個單元格。

這些單元格就是你要新增新的程式碼行的地方!

在你的notebook中新增一個單元格

Step 8: 安裝依賴項

你可以通過按新增以下幾行程式碼到你的notebook中的單元格來完成:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install --upgrade git+https://github.com/huggingface/diffusers.git transformers accelerate scipy
pip install --upgrade git+https://github.com/huggingface/diffusers.git transformers accelerate scipy
pip install --upgrade git+https://github.com/huggingface/diffusers.git transformers accelerate scipy

按下播放按鈕來執行這行程式碼。一旦成功,它應該呈現一個複選標記。

這一步的最終結果應該類似於下面的圖片:

安裝依賴項

Step 9: 匯入依賴項並引用你的HUGGING_FACE_TOKEN

在下一個單元格中新增這幾行程式碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from huggingface_hub import HfFolder
from os import environ
token = environ.get("HUGGING_FACE_TOKEN")
HfFolder.save_token(token)
from huggingface_hub import HfFolder from os import environ token = environ.get("HUGGING_FACE_TOKEN") HfFolder.save_token(token)
from huggingface_hub import HfFolder
from os import environ
token = environ.get("HUGGING_FACE_TOKEN")
HfFolder.save_token(token)

按下 “播放” 按鈕來執行這行程式碼。如果成功,你會看到一個複選標記。看一下下面的圖片,以驗證你的結果:

匯入依賴項並引用你的HUGGING_FACE_TOKEN

Step 10: 規定你要使用半精度的模型

半精度(fp16)將提供足夠的效能和精度。Hugging face建議使用這種選擇,因為它能提供 “與全精度相同的結果,同時速度大約是全精度的兩倍,需要一半的GPU RAM“。

在你的新單元中加入以下幾行程式碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import torch
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
model_id = "stabilityai/stable-diffusion-2"
# Use the Euler scheduler here instead
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, revision="fp16", torch_dtype=torch.float16)
device = "cuda"
pipe = pipe.to(device)
import torch from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler model_id = "stabilityai/stable-diffusion-2" # Use the Euler scheduler here instead scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler") pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, revision="fp16", torch_dtype=torch.float16) device = "cuda" pipe = pipe.to(device)
import torch
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
model_id = "stabilityai/stable-diffusion-2"
# Use the Euler scheduler here instead
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, revision="fp16", torch_dtype=torch.float16)
device = "cuda"
pipe = pipe.to(device)

一旦你按下播放按鈕,你的結果應該類似於下面的圖片:

規定你要使用半精度的模型

Step 11: 生成你的藝術

下面的程式碼應該為你生成藝術! 更新提示以生成你所選擇的影象。

當然,別忘了按 “播放” 按鈕來執行程式碼。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from torch import autocast
# Change prompt for image here!
prompt = "a cartoon black girl with cotton candy hair and a pink dress standing in front of a pink sky with cotton candy clouds"
with autocast(device):
image = pipe(prompt, height=768, width=768).images[0]
image
from torch import autocast # Change prompt for image here! prompt = "a cartoon black girl with cotton candy hair and a pink dress standing in front of a pink sky with cotton candy clouds" with autocast(device): image = pipe(prompt, height=768, width=768).images[0] image
from torch import autocast
# Change prompt for image here!
prompt = "a cartoon black girl with cotton candy hair and a pink dress standing in front of a pink sky with cotton candy clouds"
with autocast(device):
image = pipe(prompt, height=768, width=768).images[0]
image

請看下面它為我生成的圖片!太可愛了!

最終生成AI圖片

附註:切換輸出

要切換每個單元格的輸出,按鍵盤上的字母 “o”。我遇到一個問題,我不小心折疊了輸出,我不知道如何重新開啟它。

Step 12: 將你的修改提交到版本庫,並在下面分享你的成果

我很想知道你創造了什麼,所以請隨時與社羣分享。

作為我的版本庫分支!

你可以在這裡找到我的版本庫:https://github.com/galaxy-bytes/codespaces-jupyter

你可以在這裡找到我的GitHub賬戶:https://github.com/blackgirlbytes,但我用上面的另一個賬戶做Codespaces演示。

請自由地基於我的repo進行分支開發並在Codespace中開啟它,生成你自己的AI藝術。(via Rizèl Scarlett

評論留言