메인 콘텐츠로 건너뛰기
PyTorch Geometric 또는 PyG는 지오메트릭 딥러닝을 위한 가장 인기 있는 라이브러리 중 하나이며, W&B와 함께 사용하면 그래프를 시각화하고 Experiments를 추적하는 데 매우 효과적입니다. PyTorch Geometric을 설치한 후, 시작하려면 다음 단계를 따르세요.

가입하고 API 키 생성하기

API 키로 사용 중인 머신을 W&B에 인증합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.
더 간편한 방법을 원한다면 User Settings에서 직접 API 키를 생성하세요. 새로 생성된 API 키를 즉시 복사하여 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
  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
    

그래프 시각화

엣지 수, 노드 수 등 입력 그래프에 대한 세부 정보를 저장할 수 있습니다. W&B는 Plotly 차트와 HTML 패널 로깅을 지원하므로, 그래프를 위해 생성한 시각화 역시 모두 W&B에 기록할 수 있습니다.

PyVis 사용하기

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

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")
    run.log({"eda/graph": wandb.Html("graph.html")})
대화형 그래프 시각화

Plotly 사용하기

Plotly로 그래프를 시각화하려면 먼저 PyG 그래프를 networkx 객체로 변환해야 합니다. 그런 다음 노드와 엣지 각각에 대해 Plotly 산점도를 생성해야 합니다. 아래 코드 스니펫을 이 작업에 사용할 수 있습니다.
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:
    run.log({‘graph’: wandb.Plotly(create_vis(graph))})
예시 함수를 사용해 생성하고 W&B Table에 로깅한 시각화입니다.

메트릭 로깅

W&B를 사용하여 실험과 손실 함수, 정확도 등의 관련 메트릭을 추적할 수 있습니다. 트레이닝 루프에 다음 코드를 한 줄 추가하세요:
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 메트릭 변화

추가 자료