以编程方式关闭 jupyterlab 内核

问题描述 投票:0回答:1

我的团队正在尝试通过关闭所有内核、打开 Jupyterlab 内的终端来削减云成本预算。通过导航到打开的内核部分,然后单击内核和终端的

Shut Down All
可以轻松完成此操作。当此方法有效时,其他用户正在工作,他们只需重新启动其内核即可。我们的想法是让一个脚本在每个人都停止工作的某个时刻关闭所有内核和终端。

话虽如此,我在命令行中关闭单个 jupyterlab 内核时遇到了一些困难。 是否可以通过命令行关闭 jupyter 内核?我想要类似以下内容:

jupyter --change_kernel None file.ipynb

尝试

  1. kill -9 {ipynb_pid}
    .
    杀死 jupyterlab pid 不会关闭内核。 Jupyter 认为这是一个错误,随后在另一个 pid 中重新启动它。

  2. 修改元数据以具有

    No kernel

    根据 this post,我尝试通过编辑我想要删除的
    ipynb
    文件的 json 来更改内核。 IE。
    jq '.metadata.kernel="None"' my_file.ipynb > my_file.ipynb
    。这会导致非常棘手的覆盖问题。另外,如果有未保存的更改,则效果不佳。

python-3.x jupyter jupyter-lab google-cloud-vertex-ai
1个回答
0
投票

这是我编写的一个 PowerShell 函数来解决这个问题 -

function DeleteJupyterKernel {
    param (
        [string]$baseUrl = "http://localhost:8888" ,    # Base URL of your Jupyter server
        [string]$token = "mytoken",      # Your Jupyter access token
        [string]$kernelId    # ID of the kernel to delete
    )
    
    # Create a web session
    $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession

    # Initial GET request to set the XSRF token
    $getResponse = Invoke-WebRequest -Uri "$baseUrl/tree?" -WebSession $session -UseBasicParsing

    # Extract the XSRF token
    $xsrfToken = $session.Cookies.GetCookies($baseUrl)['_xsrf'].Value

    # Define headers for DELETE request
    $headers = @{
        "X-XSRFToken" = $xsrfToken
        "Authorization" = "token $token"
    }

    # DELETE request URL
    $deleteUri = "$baseUrl/api/kernels/$kernelId"

    # Perform the DELETE request
    $response = Invoke-RestMethod -Uri $deleteUri -Method Delete -Headers $headers -WebSession $session -SkipCertificateCheck

    return $response
}

然后您可以通过将 kernel_id 传递给该函数来调用该函数,如下所示 -

DeleteJupyterKernel -kernelId "<kernelid>"

您可以获取内核 ID,执行类似的操作,请参见下文 -

function listjupytersessions{

    # Define the URL for GET request
    $getUri = "http://localhost:8888/api/sessions/?token=mytoken"
    
    # Send the GET request
    $response = Invoke-RestMethod -Uri $getUri -Method Get -SkipCertificateCheck
    # Initialize the Counter
    $counter = 1
    # Process each session
    foreach ($session in $response) {
        $name = $session.name
        $kernelId = $session.kernel.id
        $kernelName = $session.kernel.name
        $executionState = $session.kernel.execution_state
    
        # Output the extracted information
        Write-Host ""
        Write-Host "------KernelInfo for Kernel $counter with Id $kernelId Starts------"
        Write-Host "Notebook Name: $name"
        Write-Host "Kernel ID: $kernelId"
        Write-Host "Kernel Name: $kernelName"
        Write-Host "Execution State: $executionState"
        Write-Host "------KernelInfo for Kernel $counter with Id $kernelId Ends------"
        $counter++
    }
    $counter = 1
}

让我知道进展如何。

© www.soinside.com 2019 - 2024. All rights reserved.