회사 보안 정책 속에서 살아남은 Cerebras와 Gemini 사용기

소개

  • 회사 정책상 외부 AI 서비스가 대부분 차단된 상황 (찾는 자와 막는 자의 싸움 중..)

  • 아직 막히지 않아 사용할 수 있는 Cerebras Inference와 VSCode Gemini Extension을 활용해 업무 효율을 높이고자 시도

진행 방법

  • 사용 도구

    • Cerebras Inference (DeepSeek-R1-Distill-Llama-70B, Llama 3.1 8B/70B, Llama 4 Scout)

    • VSCode Gemini Extension

  • Cerebras Inference에는 크게 4가지 모델이 있습니다.

    • DeepSeek-R1-Distill-Llama-70B:

      • 중국어와 한글, 영어를 섞어서 답변하는 경우가 있어서 초기에 쓰다가 안썼음

      • 사례글 쓰며 테스트해보니 한글로만 잘 답변하는 것으로 보아 재학습한 것 같음

    • Llama 3.1 8B, Llama 3.1 70B:

      • 그대로 쓸 수는 없고 의심하면서 써야함

    • Llama 4 Scout:

      • VSCode Gemini Extension을 찾은 뒤 나와서 쓰지 않았습니다.

      • 비교를 위해 이번에 써봤는데 별로인듯 합니다.

Llama 4 스카우트 앱의 스크린 샷
  • VSCode Gemini Extension:

    • 요새 해당 Extension을 쓰면서 Gemini에 대한 호감도가 올라가고 있습니다.

    • 답변의 품질도 괜찮고, 하기와 같은 기능들이 있습니다.

    • 단점은 초기 프롬프트에 한글로 답변하라고 하지 않으면 영어로 답변하는 경우가 많습니다.

Git을 시작하기위한 팁

  • GPT에게 위 서비스들 기반 각각 출력한 코드에 대한 코드 품질 검토 요청

    # 요청사항
    - 여러 AI 서비스들로부터의 결과 코드 품질 분석해줘.
    
    # 질문했던 것
    - plotly express로 주축과 보조축을 가지는 꺾은선 그래프와 막대그래프를 한 Chart에 같이 그리고 싶고, 두 그래프는 Scale이 달라서 꺾은선 그래프는 Chart의 중앙에 위치하고 막대그래프는 작게 아래에 위치하게 할거다.
    
    # 결과1
    ```
    
    import plotly.express as px
    import pandas as pd
    import numpy as np
    
    # 데이터 생성
    np.random.seed(0)
    data = {
        'Category': ['A', 'B', 'C', 'D', 'E'],
        'Value1': np.random.randint(1, 100, 5),
        'Value2': np.random.randint(1, 100, 5)
    }
    df = pd.DataFrame(data)
    
    # 꺾은선 그래프
    fig1 = px.line(df, x='Category', y='Value1', title='Value1')
    
    # 막대그래프
    fig2 = px.bar(df, x='Category', y='Value2', title='Value2', height=200)
    
    # 두 그래프를 하나의 Chart에 합치기
    fig = px.make_subplots(rows=2, cols=1, subplot_titles=['Value1', 'Value2'], 
                            shared_xaxes=False, vertical_spacing=0.05, row_heights=[0.6, 0.4])
    
    # 꺾은선 그래프 추가
    fig.add_trace(fig1.data[0], row=1, col=1)
    
    # 막대그래프 추가
    fig.add_trace(fig2.data[0], row=2, col=1)
    
    # Chart 설정
    fig.update_layout(
        height=600,
        width=800,
        margin=dict(l=20, r=20, t=60, b=20),
        showlegend=False
    )
    
    # Chart 표시
    fig.show()
    ```
    
    # 결과2
    ```
    
    import plotly.express as px
    import plotly.graph_objects as go
    from plotly.subplots import make_subplots
    import pandas as pd
    
    # 샘플 데이터 생성
    df = pd.DataFrame({
        'x': [1, 2, 3, 4, 5],
        'y1': [10, 20, 30, 40, 50],
        'y2': [100, 200, 300, 400, 500]
    })
    
    # subplot 생성
    fig = make_subplots(rows=2, cols=1, row_heights=[0.8, 0.2], shared_xaxes=True)
    
    # 주축 꺾은선 그래프 추가
    fig.add_trace(go.Scatter(x=df['x'], y=df['y1']), row=1, col=1)
    
    # 보조축 막대그래프 추가
    fig.add_trace(go.Bar(x=df['x'], y=df['y2']), row=2, col=1)
    
    # 레이아웃 설정
    fig.update_layout(height=600, width=800, title='주축과 보조축 그래프')
    
    # x축 공유 설정
    fig.update_xaxes(row=2, col=1, visible=False)
    
    # 그래프 표시
    fig.show()
    ```
    
    # 결과3
    ```
    
    import plotly.express as px
    import pandas as pd
    import numpy as np
    
    # 샘플 데이터 생성
    np.random.seed(0)
    df = pd.DataFrame({
        'Category': ['A', 'B', 'C', 'D', 'E'],
        'Value1': np.random.randn(5),  # 주축 데이터 (중앙에 위치할 꺾은선 그래프)
        'Value2': np.random.randn(5)   # 보조축 데이터 (아래에 위치할 막대그래프)
    })
    
    # 주축에 표시할 꺾은선 그래프
    fig1 = px.line(df, x='Category', y='Value1', title='주축과 보조축이 있는 차트')
    fig1.update_yaxes(title_text="주축 (Value1)", rangemode='tozero')
    
    # 보조축에 표시할 막대그래프
    fig2 = px.bar(df, x='Category', y='Value2', title='주축과 보조축이 있는 차트')
    fig2.update_yaxes(title_text="보조축 (Value2)", rangemode='tozero', side='right')
    
    # 두 그래프를 하나의 Figure에 추가
    fig = fig1
    fig.add_trace(fig2.data[0], secondary_y=True)
    
    # 레이아웃 설정
    fig.update_layout(
        height=600,  # 차트의 높이
        margin=dict(l=20, r=20, t=40, b=40),  # 여백 설정
        yaxis=dict(
            titlefont=dict(size=12),
            tickfont=dict(size=10)
        ),
        yaxis2=dict(
            titlefont=dict(size=12),
            tickfont=dict(size=10),
            overlaying='y',
            side='right',
            range=[-2, 2]  # 보조축의 범위 설정 (필요에 맞춰 조정)
        )
    )
    
    # 차트 표시
    fig.show()
    ```
    
    # 결과4
    ```
    
    import plotly.express as px
    import plotly.graph_objects as go
    from plotly.subplots import make_subplots
    
    # 샘플 데이터 생성
    import pandas as pd
    import numpy as np
    
    np.random.seed(0)
    date = pd.date_range('2022-01-01', periods=12, freq='M')
    main_data = np.random.randint(10, 50, size=(12,))
    sub_data = np.random.randint(100, 500, size=(12,))
    
    df_main = pd.DataFrame({'date': date, 'main': main_data})
    df_sub = pd.DataFrame({'date': date, 'sub': sub_data})
    
    # subplot 생성
    fig = make_subplots(rows=2, cols=1, row_heights=[0.7, 0.3], shared_xaxes=True)
    
    # 주축(꺾은선 그래프) 추가
    fig.add_trace(go.Scatter(x=df_main['date'], y=df_main['main'], name='Main'), row=1, col=1)
    
    # 보조축(막대그래프) 추가
    fig.add_trace(go.Bar(x=df_sub['date'], y=df_sub['sub'], name='Sub', yaxis='y2'), row=2, col=1)
    
    # 보조축 설정
    fig.update_layout(
        yaxis2=dict(
            overlaying='y',
            side='right',
            range=[0, max(df_sub['sub'])*1.1]
        )
    )
    
    # 레이아웃 설정
    fig.update_layout(height=600, title_text='Main and Sub Data', xaxis_title='Date')
    
    # Show
    fig.show()
    ```
    
    # 결과5
    ```
    import plotly.graph_objects as go
    import pandas as pd
    
    # 1. 샘플 데이터 생성
    # 실제 데이터를 사용하시면 이 부분을 대체해주세요.
    data = {
        'Category': ['A', 'B', 'C', 'D', 'E'],
        'LineValue': [150, 180, 130, 200, 160], # 꺾은선 그래프 데이터 (큰 스케일)
        'BarValue': [25, 15, 35, 10, 30]      # 막대 그래프 데이터 (작은 스케일)
    }
    df = pd.DataFrame(data)
    
    # 2. Figure 객체 생성
    fig = go.Figure()
    
    # 3. 꺾은선 그래프 추가 (주축 Yaxis 'y1' 사용)
    # yaxis='y1'은 기본값이지만 명시적으로 지정하여 가독성을 높일 수 있습니다.
    fig.add_trace(go.Scatter(
        x=df['Category'],
        y=df['LineValue'],
        name='꺾은선 데이터 (주축)',
        mode='lines+markers', # 선과 마커 함께 표시
        yaxis='y1'
    ))
    
    # 4. 막대 그래프 추가 (보조축 Yaxis 'y2' 사용)
    fig.add_trace(go.Bar(
        x=df['Category'],
        y=df['BarValue'],
        name='막대 데이터 (보조축)',
        yaxis='y2' # 보조 Y축(y2)을 사용하도록 지정
    ))
    
    # 5. 레이아웃 설정
    fig.update_layout(
        title_text='꺾은선(주축)과 막대(보조축) 그래프 조합',
        xaxis=dict(
            domain=[0.05, 0.95] # X축이 전체 너비 사용 (약간의 여백)
        ),
        yaxis=dict(
            title='꺾은선 축 값 (주축)',
            domain=[0.25, 1.0]  # Y축 공간의 위쪽 75% 사용 (꺾은선 그래프 영역)
        ),
        yaxis2=dict(
            title='막대 축 값 (보조축)',
            overlaying='y',     # y1 축 위에 겹치도록 설정 (x축 공유)
            side='right',       # 보조축 눈금/레이블을 오른쪽에 표시
            domain=[0, 0.2],    # Y축 공간의 아래쪽 20% 사용 (막대 그래프 영역)
            showgrid=False,     # 보조축의 그리드 라인 숨기기 (선택 사항)
            anchor='x'          # x축에 고정
        ),
        legend=dict(
            orientation="h", # 범례 가로 방향
            yanchor="bottom",
            y=1.02,          # 범례 위치 조정 (차트 위쪽)
            xanchor="right",
            x=1
        ),
        margin=dict(l=50, r=50, t=80, b=50) # 차트 여백 조정
    )
    
    # 6. 차트 표시
    fig.show()
    ```

  • Llama 3.1 8B : 코드가 아예 틀렸음

  • Llama 3.1 70B : 제 의도와 다름

  • DeepSeek-R1-Distill-Llama-70B : 중국산은 쓰지 맙시다.

  • Llama 4 Scout : Main 그래프는..?

  • VSCode Gemini Extension : plotly express를 쓰지는 않았지만 결과만 좋다면야 ㅎ

    국가의 사람들의 수를 보여주는 막대 그래프
한국 전화 화면의 스크린 샷

결과와 배운 점

  • 쓸모는 없지만 Cerebras 에서 답변에 걸린 시간 등을 확인할 수 있습니다.

    • 굳이 저처럼 제약된 환경이 아니라면 쓸 서비스는 아닌 것 같습니다.

  • 개인 프로젝트를 진행하며 Gemini와 GPT를 같이 코딩에 써본 결과, Gemini 의 코드가 더 맘에 드는 경우도 종종 있습니다.

    • 다만, Gemini Extension에서는 이전 대화 내역을 수정할 수 없기 때문에

      • GPT를 기반으로 전체적인 코드를 짜고

      • GPT가 짜준 코드가 맘에 들지 않거나 의심이 가면 Gemini Extension을 써서 확인하고는 합니다.

1

👉 이 게시글도 읽어보세요