메인 콘텐츠로 건너뛰기
PyTorch Geometric (PyG)는 지오메트릭 딥러닝을 위한 가장 인기 있는 라이브러리 중 하나이며, W&B는 그래프 시각화 및 실험 트래킹을 위해 PyG와 매우 유기적으로 작동합니다. Pytorch Geometric을 설치한 후, 다음 단계에 따라 시작하세요.

가입 및 API 키 생성

API 키는 사용자의 머신을 W&B에 인증합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.
For a more streamlined approach, create an API key by going directly to User Settings. Copy the newly created API key immediately and save it in a secure location such as a password manager.
  1. 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
  2. User Settings를 선택한 다음, API Keys 섹션으로 스크롤합니다.

wandb 라이브러리 설치 및 로그인

로컬에 wandb 라이브러리를 설치하고 로그인하려면:
  1. WANDB_API_KEY 환경 변수를 사용자의 API 키로 설정합니다.
    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.
    pip install wandb
    
    wandb login
    

그래프 시각화

엣지(edge) 수, 노드(node) 수 등 입력 그래프에 대한 세부 정보를 저장할 수 있습니다. W&B는 Plotly 차트와 HTML 패널 로그를 지원하므로, 그래프를 위해 생성한 모든 시각화를 W&B에 로그로 남길 수 있습니다.

PyVis 사용하기

다음 스니펫은 PyVis와 HTML을 사용하여 이를 수행하는 방법을 보여줍니다.
from pyvis.network import Network
import wandb

# 'graph_vis' 프로젝트로 run 초기화
with wandb.init(project='graph_vis') as run:
    net = Network(height="750px", width="100%", bgcolor="#222222", font_color="white")

    # PyG 그래프의 엣지를 PyVis 네트워크에 추가
    for e in tqdm(g.edge_index.T):
        src = e[0].item()
        dst = e[1].item()

        net.add_node(dst)
        net.add_node(src)
        
        net.add_edge(src, dst, value=0.1)

    # PyVis 시각화를 HTML 파일로 저장
    net.show("graph.html")
    # HTML 파일을 W&B에 로그
    run.log({"eda/graph": wandb.Html("graph.html")})
대화형 그래프 시각화

Plotly 사용하기

Plotly를 사용하여 그래프 시각화를 만들려면 먼저 PyG 그래프를 networkx 오브젝트로 변환해야 합니다. 그 다음 노드와 엣지 모두에 대해 Plotly 산점도(scatter plot)를 생성해야 합니다. 아래 스니펫을 이 작업에 사용할 수 있습니다.
def create_vis(graph):
    G = to_networkx(graph)
    pos = nx.spring_layout(G)

    edge_x = []
    edge_y = []
    for edge in G.edges():
        x0, y0 = pos[edge[0]]
        x1, y1 = pos[edge[1]]
        edge_x.append(x0)
        edge_x.append(x1)
        edge_x.append(None)
        edge_y.append(y0)
        edge_y.append(y1)
        edge_y.append(None)

    # 엣지 트레이스 생성
    edge_trace = go.Scatter(
        x=edge_x, y=edge_y,
        line=dict(width=0.5, color='#888'),
        hoverinfo='none',
        mode='lines'
    )

    node_x = []
    node_y = []
    for node in G.nodes():
        x, y = pos[node]
        node_x.append(x)
        node_y.append(y)

    # 노드 트레이스 생성
    node_trace = go.Scatter(
        x=node_x, y=node_y,
        mode='markers',
        hoverinfo='text',
        line_width=2
    )

    fig = go.Figure(data=[edge_trace, node_trace], layout=go.Layout())

    return fig


with wandb.init(project='visualize_graph') as run:
    # Plotly 차트를 W&B에 로그
    run.log({'graph': wandb.Plotly(create_vis(graph))})
예제 함수를 사용하여 생성되고 W&B 테이블 내에 기록된 시각화.

메트릭 로그 기록

W&B를 사용하여 실험과 손실 함수(loss functions), 정확도(accuracy) 등 관련 메트릭을 추적할 수 있습니다. 트레이닝 루프에 다음 줄을 추가하세요:
with wandb.init(project="my_project", entity="my_entity") as run:
    run.log({
        'train/loss': training_loss,
        'train/acc': training_acc,
        'val/loss': validation_loss,
        'val/acc': validation_acc
        })
에포크에 따른 hits@K 메트릭

추가 리소스