Git Product home page Git Product logo

sdcore-amf-k8s-operator's Introduction

SD-Core AMF Operator (k8s)

CharmHub Badge

Charmed Operator for SD-Core's Access and Mobility Management Function (AMF) for K8s.

Pre-requisites

Juju model on a Kubernetes Cluster.

Usage

juju deploy sdcore-amf-k8s --trust --channel=edge
juju deploy mongodb-k8s --trust --channel=6/beta
juju deploy sdcore-nrf-k8s --channel=edge
juju deploy self-signed-certificates --channel=stable
juju deploy sdcore-webui-k8s --channel=1.5/edge
juju integrate sdcore-webui-k8s:common_database mongodb-k8s:database
juju integrate sdcore-webui-k8s:auth_database mongodb-k8s:database
juju integrate sdcore-nrf-k8s:database mongodb-k8s:database
juju integrate sdcore-nrf-k8s:certificates self-signed-certificates:certificates
juju integrate sdcore-amf-k8s:database mongodb-k8s:database
juju integrate sdcore-amf-k8s:fiveg_nrf sdcore-nrf-k8s:fiveg_nrf
juju integrate sdcore-amf-k8s:certificates self-signed-certificates:certificates
juju integrate sdcore-amf-k8s:sdcore_config sdcore-webui-k8s:sdcore-config

Overriding external access information for N2 interface

By default, the N2 connection information sent to the RAN will be taken from the created LoadBalancer Kubernetes Service. If this is not appropriate with your network configuration, you can override that information through configuration:

juju config sdcore-amf-k8s external-amf-ip=192.168.0.4 external-amf-hostname=amf.example.com

Image

amf: ghcr.io/canonical/sdcore-amf:1.4.2

sdcore-amf-k8s-operator's People

Contributors

danielarndt avatar dariofaccin avatar dependabot[bot] avatar gatici avatar ghislainbourgeois avatar gmerold avatar gruyaume avatar markbeierl avatar patriciareinoso avatar renovate[bot] avatar saltiyazan avatar telcobot avatar tonyandrewmeyer avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

sdcore-amf-k8s-operator's Issues

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

github-actions
.github/workflows/codeql-analysis.yml
.github/workflows/issues.yaml
.github/workflows/lint-pr.yaml
  • amannn/action-semantic-pull-request v5
.github/workflows/main.yaml
  • actions/checkout v4
  • dorny/paths-filter v3
  • ubuntu 22.04
.github/workflows/promote.yaml
.github/workflows/update-libs.yaml
  • actions/checkout v4
  • peter-evans/create-pull-request v6.0.0
pip_requirements
requirements.txt
test-requirements.txt
  • juju ==3.3.1.1
  • macaroonbakery ==1.3.4
tox.ini
terraform
terraform/terraform.tf
  • juju ~> 0.10.1

  • Check this box to trigger a request for Renovate to run again on this repository

Hook error when MetalLB is not enabled

Describe the bug

We are getting a hook failed error whenever relating AMF to gNBSIM whenever the external LB is not set in the AMF.

Expected behavior

Charm should go to blocked status.

Logs

guillaume@thinkpad:~$ juju status
Model  Controller  Cloud/Region        Version  SLA          Timestamp
dev    localhost   microk8s/localhost  3.1.6    unsupported  16:08:24+02:00

App                       Version  Status   Scale  Charm                     Channel  Rev  Address         Exposed  Message
gnbsim                             waiting      1  sdcore-gnbsim             edge      35  10.152.183.153  no       waiting for units to settle down
mongodb-k8s                        active       1  mongodb-k8s               6/edge    37  10.152.183.84   no       Primary
sdcore-amf                         waiting      1  sdcore-amf                edge      43  10.152.183.132  no       installing agent
sdcore-ausf                        active       1  sdcore-ausf               edge      32  10.152.183.254  no       
sdcore-nrf                         active       1  sdcore-nrf                edge      51  10.152.183.253  no       
sdcore-nssf                        active       1  sdcore-nssf               edge      30  10.152.183.37   no       
sdcore-pcf                         active       1  sdcore-pcf                edge      24  10.152.183.158  no       
sdcore-router                      active       1  sdcore-router             edge      26  10.152.183.59   no       
sdcore-udm                         active       1  sdcore-udm                edge      28  10.152.183.46   no       
sdcore-udr                         active       1  sdcore-udr                edge      24  10.152.183.21   no       
self-signed-certificates           active       1  self-signed-certificates  edge      43  10.152.183.44   no       
webui                              active       1  sdcore-webui              edge      18  10.152.183.237  no       

Unit                         Workload  Agent  Address      Ports  Message
gnbsim/0*                    waiting   idle   10.1.19.166         Waiting for N2 information
mongodb-k8s/0*               active    idle   10.1.19.137         Primary
sdcore-amf/0*                error     idle   10.1.19.140         hook failed: "fiveg-n2-relation-joined"
sdcore-ausf/0*               active    idle   10.1.19.149         
sdcore-nrf/0*                active    idle   10.1.19.146         
sdcore-nssf/0*               active    idle   10.1.19.159         
sdcore-pcf/0*                active    idle   10.1.19.162         
sdcore-router/0*             active    idle   10.1.19.163         
sdcore-udm/0*                active    idle   10.1.19.152         
sdcore-udr/0*                active    idle   10.1.19.155         
self-signed-certificates/0*  active    idle   10.1.19.143         
webui/0*                     active    idle   10.1.19.142         
unit-sdcore-amf-0: 16:05:29 ERROR unit.sdcore-amf/0.juju-log fiveg-n2:19: Uncaught exception while in charm code:
Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/./src/charm.py", line 686, in <module>
    main(AMFOperatorCharm)
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/venv/ops/main.py", line 436, in main
    _emit_charm_event(charm, dispatcher.event_name)
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/venv/ops/main.py", line 144, in _emit_charm_event
    event_to_emit.emit(*args, **kwargs)
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/venv/ops/framework.py", line 340, in emit
    framework._emit(event)
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/venv/ops/framework.py", line 842, in _emit
    self._reemit(event_path)
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/venv/ops/framework.py", line 931, in _reemit
    custom_handler(event)
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/./src/charm.py", line 386, in _on_n2_relation_joined
    self._set_n2_information()
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/./src/charm.py", line 425, in _set_n2_information
    amf_ip_address=self._get_n2_amf_ip(),
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/./src/charm.py", line 399, in _get_n2_amf_ip
    return self._amf_external_service_ip()
  File "/var/lib/juju/agents/unit-sdcore-amf-0/charm/./src/charm.py", line 645, in _amf_external_service_ip
    return service.status.loadBalancer.ingress[0].ip  # type: ignore[attr-defined]
TypeError: 'NoneType' object is not subscriptable

Environment

  • Juju version: 3.1.6
  • Cloud Environment: MicroK8s
  • Kubernetes version: v1.27.6

AMF does not go to blocked status when mongo is removed

Describe the bug

Charm does not go to blocked status when mongo is removed.

To Reproduce

  1. Deploy sdcore
  2. juju remove-application mongodb-k8s

Expected behavior

Unit goes to blocked status

Environment

  • Charm / library version (if relevant): latest/edge
  • Juju version (output from juju --version): 3.1.6
  • Cloud Environment: MicroK8s
  • Kubernetes version (output from kubectl version --short): MicroK8s v1.27.7 revision 6101

After restarting UDR, AMF loses the RanUe info

Describe the bug

After restarting UDR pod, AMF, authentication request failed in AMF by getting RanUe is not exist logs.

To Reproduce

Deploy the environment using tutorial: https://canonical-charmed-5g.readthedocs-hosted.com/en/latest/tutorials/getting_started/#
Run the simulation
Delete UDR pod
Run the simulation again
See that the simulation fails
Check the AMF logs

Expected behavior

The simulation should be succeeded.

Logs

2024-02-28T14:38:59.998Z [amf] 2024-02-28T14:38:59Z [INFO][Config5g][GRPC] connectivity ready
2024-02-28T14:39:00.000Z [amf] 2024-02-28T14:39:00Z [INFO][Config5g][GRPC] stream msg recieved
2024-02-28T14:39:00.000Z [amf] 2024-02-28T14:39:00Z [INFO][Config5g][GRPC] Complete config deleted
2024-02-28T14:39:00.000Z [amf] 2024-02-28T14:39:00Z [INFO][AMF][GRPC] Received updateConfig in the amf app : RestartCounter:125114909 ConfigUpdated:1
2024-02-28T14:39:36.046Z [amf] 2024-02-28T14:39:36Z [INFO][Config5g][GRPC] stream msg recieved
2024-02-28T14:39:36.046Z [amf] 2024-02-28T14:39:36Z [INFO][Config5g][GRPC] First time config Received RestartCounter:125114909 NetworkSlice:{Name:"default" Nssai:{Sst:"1" Sd:"010203"}} ConfigUpdated:1
2024-02-28T14:39:36.046Z [amf] 2024-02-28T14:39:36Z [INFO][AMF][GRPC] Received updateConfig in the amf app : RestartCounter:125114909 NetworkSlice:{Name:"default" Nssai:{Sst:"1" Sd:"010203"}} ConfigUpdated:1
2024-02-28T14:39:36.046Z [amf] 2024-02-28T14:39:36Z [INFO][AMF][GRPC] Network Slice Name default
2024-02-28T14:39:36.050Z [amf] 2024-02-28T14:39:36Z [INFO][Config5g][GRPC] stream msg recieved
2024-02-28T14:39:36.050Z [amf] 2024-02-28T14:39:36Z [INFO][Config5g][GRPC] Complete config deleted
2024-02-28T14:39:36.050Z [amf] 2024-02-28T14:39:36Z [INFO][AMF][GRPC] Received updateConfig in the amf app : RestartCounter:125114909 ConfigUpdated:1
2024-02-28T14:40:11.009Z [amf] 2024-02-28T14:40:11Z [INFO][Config5g][GRPC] stream msg recieved
2024-02-28T14:40:11.009Z [amf] 2024-02-28T14:40:11Z [INFO][Config5g][GRPC] Complete config deleted
2024-02-28T14:40:11.009Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] Received updateConfig in the amf app : RestartCounter:125114909 ConfigUpdated:1
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][Config5g][GRPC] stream msg recieved
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][Config5g][GRPC] First time config Received RestartCounter:125114909 NetworkSlice:{Name:"default" Nssai:{Sst:"1" Sd:"010203"} DeviceGroup:{Name:"default-default" IpDomainDetails:{Name:"pool1" DnnName:"internet" UePool:"172.250.1.0/16" DnsPrimary:"8.8.8.8" Mtu:1460 UeDnnQos:{DnnMbrUplink:20000000 DnnMbrDownlink:200000000 TrafficClass:{Name:"platinum" Qci:8 Arp:6 Pdb:300 Pelr:6}}} Imsi:"208930100007487"} Site:{SiteName:"demo" Gnb:{Name:"core77-gnbsim-gnbsim" Tac:1} Plmn:{mcc:"208" mnc:"93"} Upf:{UpfName:"upf-external.core77.svc.cluster.local"}} AppFilters:{PccRuleBase:{FlowInfos:{FlowDesc:"permit out ip from any to assigned" TosTrafficClass:"IPV4" FlowDir:BIDIRECTIONAL} RuleId:"DefaultRule" Qos:{Var5qi:9 Arp:{PL:1 PC:MAY_PREEMPT PV:PREEMPTABLE}} Priority:255}} OperationType:SLICE_UPDATE AddUpdatedImsis:"208930100007487"} ConfigUpdated:1
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] Received updateConfig in the amf app : RestartCounter:125114909 NetworkSlice:{Name:"default" Nssai:{Sst:"1" Sd:"010203"} DeviceGroup:{Name:"default-default" IpDomainDetails:{Name:"pool1" DnnName:"internet" UePool:"172.250.1.0/16" DnsPrimary:"8.8.8.8" Mtu:1460 UeDnnQos:{DnnMbrUplink:20000000 DnnMbrDownlink:200000000 TrafficClass:{Name:"platinum" Qci:8 Arp:6 Pdb:300 Pelr:6}}} Imsi:"208930100007487"} Site:{SiteName:"demo" Gnb:{Name:"core77-gnbsim-gnbsim" Tac:1} Plmn:{mcc:"208" mnc:"93"} Upf:{UpfName:"upf-external.core77.svc.cluster.local"}} AppFilters:{PccRuleBase:{FlowInfos:{FlowDesc:"permit out ip from any to assigned" TosTrafficClass:"IPV4" FlowDir:BIDIRECTIONAL} RuleId:"DefaultRule" Qos:{Var5qi:9 Arp:{PL:1 PC:MAY_PREEMPT PV:PREEMPTABLE}} Priority:255}} OperationType:SLICE_UPDATE AddUpdatedImsis:"208930100007487"} ConfigUpdated:1
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] Network Slice Name default
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] Network Slice has site name: demo
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] Plmn mcc 208
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] SupportedPlmnLIst: {{208 93} [{1 010203}]}, SupportGuamiLIst: {0xc000756300 cafe00} received fromRoc
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] SupportedPlmnLIst: [{{208 93} [{1 010203}]}], SupportGuamiLIst: [{0xc000756300 cafe00}] in AMF
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] Tai list present in Slice {0xc000365b40 1} []
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] Gnb Updated in existing Plmn, SupportTAILIst received from Roc: [{0xc000365b40 1}]
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][GRPC] SupportTAILIst in AMF [{0xc000365b40 1}]
2024-02-28T14:40:11.016Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][Util] amfconfig Info: Version[1.0.0] Description[AMF initial configuration]
2024-02-28T14:40:11.040Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][Init] Started KeepAlive Timer: 60 sec
2024-02-28T14:40:11.040Z [amf] 2024-02-28T14:40:11Z [INFO][AMF][CFG] Sent Register NF Instance with updated profile
2024-02-28T14:40:27.159Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP] [AMF] SCTP Accept from: 10.1.146.2/192.168.251.5:9487
2024-02-28T14:40:27.159Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP] Create a new NG connection for: 10.1.146.2/192.168.251.5:9487
2024-02-28T14:40:27.160Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487] Handle NG Setup request
2024-02-28T14:40:27.160Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487] Supported Tai List in AMF Plmn: &{208 93}, Tac: 0x000001 Tac: 1
2024-02-28T14:40:27.160Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487] Send NG-Setup response
2024-02-28T14:40:27.162Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487] RanUe is not exist
2024-02-28T14:40:27.162Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487] Handle Initial UE Message
2024-02-28T14:40:27.162Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487] RanUe is not exist
2024-02-28T14:40:27.162Z [amf] 2024-02-28T14:40:27Z [DEBU][DRSM][App] Allocate new chunk
2024-02-28T14:40:27.162Z [amf] 2024-02-28T14:40:27Z [DEBU][DRSM][App] Found chunk Id block 12550
2024-02-28T14:40:27.185Z [amf] 2024/02/28 14:40:27 Adding chunk 12550 success
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][Context] Allocate AmfUeNgapID : 12852199
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][DRSM][App] received Chunk Doc: &{chunkid-12550 chunkid-12550 amf-0 10.1.146.12 3cfa4e60-1b28-460a-956a-4818d21f81ff 0001-01-01 00:00:00 +0000 UTC chunk}
2024-02-28T14:40:27.185Z [amf] 2024/02/28 14:40:27 id received: chunkid-12550 value
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][DRSM][App] Chunk id 12550, podChunks map[12550:0xc0002b0e10 14006:0xc0008b42d0]
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][Comm] Security header type: PlainNas Message
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][Context] Allocate TMSI : 12852198
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487][AMF_UE_NGAP_ID:12852199] Antype from new RanUe : 3GPP_ACCESS
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][GMM][AMF_UE_NGAP_ID:12852199] New EventChannel created
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][GMM][AMF_UE_NGAP_ID:12852199] updated nashandler
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][GMM][AMF_UE_NGAP_ID:12852199] updated nashandler
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NAS][AMF_UE_NGAP_ID:12852199] Handle Nas Message
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][LIB][FSM] Handle event[Gmm Message], transition from [Deregistered] to [Deregistered]
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][GMM][AMF_UE_NGAP_ID:12852199] Handle Registration Request
2024-02-28T14:40:27.185Z [amf] 2024-02-28T14:40:27Z [INFO][LIB][FSM] Handle event[Start Authentication], transition from [Deregistered] to [Authentication]
2024-02-28T14:40:27.257Z [amf] 2024-02-28T14:40:27Z [ERRO][AMF][Kafka] Error publishing nf status event: dial tcp: lookup sd-core-kafka-headless on 10.152.183.10:53: no such host
2024-02-28T14:40:27.257Z [amf] 2024-02-28T14:40:27Z [ERRO][AMF][Kafka] Could not publish ue context event, error [dial tcp: lookup sd-core-kafka-headless on 10.152.183.10:53: no such host]
2024-02-28T14:40:27.257Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][GMM][AMF_UE_NGAP_ID:12852199][SUCI:suci-0-208-93-0-0-0-0100007487] Authentication procedure
2024-02-28T14:40:27.272Z [amf] 2024-02-28T14:40:27Z [ERRO][AMF][GMM][AMF_UE_NGAP_ID:12852199][SUCI:suci-0-208-93-0-0-0-0100007487] Nausf_UEAU Authenticate Request Failed: &{Type: Title: Status:500 Detail: Instance: Cause:AV_GENERATION_PROBLEM InvalidParams:[]}
2024-02-28T14:40:27.272Z [amf] 2024-02-28T14:40:27Z [INFO][LIB][FSM] Handle event[Authentication Error], transition from [Authentication] to [Deregistered]
2024-02-28T14:40:27.272Z [amf] 2024-02-28T14:40:27Z [ERRO][AMF][GMM][AMF_UE_NGAP_ID:12852199][SUCI:suci-0-208-93-0-0-0-0100007487] Handle Authentication Error
2024-02-28T14:40:27.272Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][GMM][AMF_UE_NGAP_ID:12852199][SUCI:suci-0-208-93-0-0-0-0100007487] Send Registration Reject
2024-02-28T14:40:27.272Z [amf] 2024-02-28T14:40:27Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487][AMF_UE_NGAP_ID:12852199] Send Downlink Nas Transport
2024-02-28T14:40:32.278Z [amf] 2024-02-28T14:40:32Z [INFO][AMF][NGAP] Handle SCTP Notification[addr: ]
2024-02-28T14:40:32.278Z [amf] 2024-02-28T14:40:32Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487] SCTP_SHUTDOWN_EVENT notification, close the connection
2024-02-28T14:40:32.278Z [amf] 2024-02-28T14:40:32Z [ERRO][AMF][Kafka] Error publishing nf status event: dial tcp: lookup sd-core-kafka-headless on 10.152.183.10:53: no such host
2024-02-28T14:40:32.278Z [amf] 2024-02-28T14:40:32Z [INFO][AMF][NGAP][10.1.146.2/192.168.251.5:9487] Remove RAN Context[ID: <PlmnID: {Mcc:208 Mnc:93}, GNbID: 000102>]
2024-02-28T14:40:32.278Z [amf] RanUe has been deleted2024-02-28T14:40:32Z [DEBU][DRSM][App] ID Released: 12852199
2024-02-28T14:40:32.278Z [amf] 2024-02-28T14:40:32Z [INFO][AMF][NGAP] Handle SCTP Notification[addr: ]
2024-02-28T14:40:32.278Z [amf] 2024-02-28T14:40:32Z [WARN][AMF][NGAP] RAN context has been removed[addr: ]
2024-02-28T14:44:36.352Z [pebble] GET /v1/files?action=list&path=%2Ffree5gc%2Fconfig&itself=true 76.38µs 200

Environment

  • Charm / library version (if relevant):
  • Juju version (output from juju --version): 3.1.7
  • Cloud Environment:
  • Kubernetes version (output from kubectl version --short): v1.27.11
  • Terraform version (output from terraform version):

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.